Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Alexey Kruglov                       2:5015/70.5    09 May 2002  20:32:08
 To : Andrew Plyako
 Subject : Простенькая задача
 -------------------------------------------------------------------------------- 
 
 
 Вторник 07 Мая 2002 22:44, Andrew Plyako wrote to All:
 
  AP> Есть матрица (двумерный массив) n на n. Hадо в цикле перебрать все
  AP> варианты расстановки 0 и 1 в этой матрице; все варианты __с точностью
  AP> до отражений/поворотов__.
 
  AP> Какой алгоритм можно предложить? Просто промоделировать все 2^{n^2}
  AP> вариантов расстановки 0 и 1 несложно. Hо как при этом "пропустить" уже
  AP> полученные (с точностью до поворота) варианты?
 
 Это, кстати, сократит количество вариантов менее, чем в 8 раз, т.е. их будет
 больше 2^{n^2-3}.
 
 Теперь решение.
 
 Обозначим поворот (например, прочив часовой стрелки) на 90 градусов S,
 отражение (например, относительно вертикальной прямой) R. <a,b> -- группа,
 сожержащая все произведения, составленные a и b в любом порядке (и только их). 
 Можно разбить матрицу на восьмерки и четверки (и при нечетном n будет еще
 центральный элемент), которые преобразуются при поворотах и отражениях
 независимо. Центральный элемент можно перебирать отдельно, например, самым
 внутренним циклом, т.к. его S и R не меняют. Матрицу будем представлять в виде
 вектора из всех ее восьмерок и четверок: M=(x_1,...,x_m).
 
 Будем перебирать матрицы M, для которых m<=fM для всех f\in <S,R>. Порядок на M
 лексикографический, порядок на 8-ках и 4-ках любой (линейный :). Перебирать
 тоже будем в этом же порядке.
 
 Пусть начало M_{k-1}=(x_1,...,x_{k-1}) такое, что M_{k-1}<=fM_{k-1} для f\in
 <S,R>, уже подобрано. Hадо перебрать все начала длины k с тем же свойством,
 начинающиеся с M_{k-1}. Пусть G(x) -- подгруппа <S,R>, эл-ты которой переводят
 x в себя, G_{k-1}=G(M_{k-1}).
 
 M_k<=fM_k <=> (M_{k-1}=fM_{k-1} и x_k<=f x_k) или M_{k-1}<fM_{k-1} <=>
 (f\in G_{k-1} и x_k<=f x_k) или f\not\in G_{k-1}.   =>
 
 (\forall f: f\in <S,R> => M_k<=fM_k) <=> \forall f\in G_{k-1}: x_k<=f x_k.
 
 Т.е. в качестве x_k надо брать все, удовлетворяющие последнему св-ву. Поскольку
 G_{k-1} может принимать только 10 значений (могу ошибаться):
 <S,R>, <S^2,R>, <R>,
 <S>,   <S^2>,   <>=<e>,
 <RS>, <RS^2>, <RS^3>, <RS,S^2>,
 все варианты для x_k можно загнать в таблицу, т.е. для 4-ок и для 8-ок будет
 таблица please_give_me_the_i_th_possible_value_of_x_k[G_{k-1},i].
 
 Легко проверить, что G_k=G_{k-1} \cap G(x_k) -- пригодится для перебора
 x_{k+1}. G_k можно положить в ту же таблицу рядом с x_k.
 
 Получается рекурсивный перебор, следующему шагу передается M_k и G_k.
 M_0=(), G_0=<S,R>. В случае нечетного n последний шаг рекурсии должен еще
 M_0=(), G_0=<S,R>перебрать 2 значения центрального элемента.
 
 Чтобы быстрее работало, при G_{k-1}=<> для восьмерок можно перебирать x_k без
 таблицы, прямо циклом, G_k=G_{k-1} \cap G(x_k)=<>.
 
  AP> Оговорюсь, что
  AP> 1) не важен порядок в каком будут получатся эти варианты расстановки
  AP> 2) важно получать только правильные варианты; моделирование всех
  AP> вариантов с последующей проверкой/отбраковкой -- не устраивает.
 
 Лишних не перебирается, т.к. все циклы идут по непустым множествам.
 
 nOkA. Alexey.
 
 --- GoldED+/386 1.1.4.7
  * Origin:  6DFA 1186 7576 DE60 6CCB  EB39 AD81 1733 EEBB 970A  (2:5015/70.5)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Простенькая задача   Andrew Plyako   07 May 2002 23:44:24 
 Простенькая задача   Alexey Kruglov   09 May 2002 20:32:08 
 Простенькая задача   Elvira Svirshchova   11 May 2002 21:27:00 
 Простенькая задача   Alexey Kruglov   14 May 2002 17:59:59 
 Простенькая задача   Elvira Svirshchova   18 May 2002 20:57:00 
 Простенькая задача   Alexey Kruglov   20 May 2002 22:31:58 
 Простенькая задача   Elvira Svirshchova   24 May 2002 23:36:00 
 Простенькая задача   Elvira Svirshchova   21 May 2002 15:11:00 
 Простенькая задача   Elvira Svirshchova   13 May 2002 07:29:00 
 Простенькая задача   Elvira Svirshchova   13 May 2002 17:08:00 
 Простенькая задача   Comoderator Of Ru Algorithms   15 May 2002 19:47:39 
Архивное /ru.algorithms/27643cdaee0b.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional