Есть поле букв, которое состоит из шестигранников, необходимо перебрать...

Автор темы sja 
ОбъявленияПоследний пост
ОбъявлениеРекомендации по использованию теха в нашем форуме07.10.2009 17:41
ОбъявлениеВакансия Perl программиста в ABBYY Language Services24.01.2012 18:23
ОбъявлениеМосковского математического общество объявляет конкурс ММО для молодых ученых 2012 года23.04.2012 01:34
14.07.2009 23:20
Есть поле букв, которое состоит из шестигранников, необходимо перебрать...
Всем добра!
Никак не могу найти оптимального решения для моей задачи.

Есть поле букв, только состоит не из квадратов, а из шестигранников. Картинка.
Задача перебрать все возможные варианты, т.е. найти все возможные слова.
Простой перебор - слишком медленно.



Редактировалось 1 раз(а). Последний 15.07.2009 00:50.
16.07.2009 18:49
Будем хитрить.
Если простой перебор - слишком медленно, то можно использовать тот факт, что в языке - не все возможно. Например, не бывает слишком длинных слов, поэтому можно ограничить сверху длину перебора. Затем, есть невозможные пары, тройки и т.п. букв, их тоже можно исключить из перебора, и т.п.
В общем, здесь много доп. возможностей сильно укоротить перебор.
17.07.2009 16:45
Уточните
Имеется ли ввиду, что слова должны получаться последовательным прохождением полей, начиная с произвольной точки и возможны ли циклы (повторы проходимых полей)?
17.07.2009 17:07
хм
Да - мы проходим полследоватьельнго, хоть зиг-загом, хоть вверх, хоть вниз. Буквы можно использовать только 1 раз каждую.

Те все равно только перебор ?
18.07.2009 01:11
Перечисление
Конечно, любая задача на перечисление сводится к этому самому перечислению. Единственное, над чем стоит думать, это: 1) как устранить повторы маршрутов , 2) как устранить повторы слов (у Вас имется одинаковые буквы, записанные в разных клетках) , 3) как не пропустить ничего.
Тот факт, что у Вас не произвольный граф, а , скажем так, "гексагональный", имеет значение только для выбора наглядного упорядочения клеток, что позволяет строить маршруты без повторов и без пропусков. Для обеспечения отсутсвия в списке совпадающих слов, видимо, оптимальным является выписывание их в лексикографическом порядке (правда. вставка новых слов внутрь уже построенной последовательности потребует постоянной перестройки ряда (сдвиг на единицу вправо). Но ничего не поделаешь.
19.07.2009 10:15
Относительно бесполезный для данной задачи комментарий. Про перечисление.
Есть всякие детские задачи про спички. Скажем, уберите три спички, чтобы осталось три квадрата. Так вот в большинстве из них есть "ход конём" - перебирать не спички, которые надо переложить, а квадраты, которые останутся. В этих задачах квадратов всегда меньше.
В Вашем случае задача несколько иная, но всё же стоит думать о том, нельзя ли перечислять не маршруты, а что-нибудь другое. Например, для большой карты, возможно, продуктивнее составить таблицы координат каждой буквы (в смысле одна таблица - для буквы A, в которой перечислены пары координат ячеек с "A", другая - для B и т.д.), а затем, начиная с них, перебирать слова, которые откладывать от данной начальной буквы.
19.07.2009 22:45
Про полезный комментарий
Оригинальное замечание про "ход конем" в детских задачках штука оригинальная, но совершенно не уместна в тех ситуациях, когда задание состоит не в поиске хода конем, а в выписывании всех возможных ходов (и не только конем). Впрочем, г-н Eastern.man это, вероятно, о чем-то таком догадался:
Цитата

В Вашем случае задача несколько иная, но всё же стоит думать о том, нельзя ли перечислять не маршруты, а что-нибудь другое.
Но по условию перечислять нужно именно МАРШРУТЫ = СЛОВА.
Конечно, условие можно представить и в иной форме, но суть не изменится, т.к. задача все-таки о выписывании всех возможных путей в графе, совмещенной с некоторым правилом отождествления. И думать придется именно об этом. Настоящая задача имеет наглядную форму, на нее и рассчитывайте.
20.07.2009 10:43
Место для хода конём
Ну да, здесь действительно надо перебирать пары, Единственное возможное "принципиальное" изменение алгоритма, как я уже сказал, начинать перебор с другой стороны пар - со слов.

Но для оптимизации здесь богатое поле. Например, интересно подумать, как учитывать форму поля - скажем, узкие выступы.
21.07.2009 00:42
Возможно
Действительно, в процессе работы могут возникнуть идеи "оптимизации", но это не в обсуждении, а в процессе работы. Так что нужно взять некоторый алгоритм выписывания и начинать выписывать, а в процессе работы могут придти и идеи.
Извините, только зарегистрированные пользователи могут публиковать сообщения в этом форуме.

Кликните здесь, чтобы войти