Генератор кроссвордов.

Данная программа демонстрирует возможности алгоритма составления кроссвордов.

Задача программы составляющей кроссворды, заключается в следующем.

    Дано:

  • БД слов - загадок для кроссворда.
  • Поле кроссворда, которое определяет, каким образом эти слова должны пересекаться.

  • Надо выбрать из БД подходящие слова, т.е. составить кроссворд.

Человек справляется с этой задачей так как имеет ассоциативное мышление, но научить машину составлять кроссворд не так просто, как может показаться на первый взгляд.
Традиционным решением подобной задачи для ЭВМ является перебор всех вариантов, с целью выявления подходящего. Однако кроссворд - это как раз тот случай когда никакое быстродействие не поможет. Дело в том, что количество этих самых вариантов выливается в цифру с таким порядком, для которого я даже названия не знаю.
Считайте сами:
Представьте себе кроссворд, который выглядит как квадрат 5х5 клеток. Нужно подобрать 10 слов, которые будут пересекаться по правилу кроссворда в каждой букве.
Алгоритм с перебором будет выглядеть примерно так:

  • первое слово из БД надо вставить в первое свободное место.
  • первое слово из оставшихся надо вставить во второе свободное место и проверить выполняется ли условие кроссворда (т.е. правильное пересечение слов). если нет надо взять второе слово из оставшихся и повторить проверку.
  • дальше все тоже самое только с 3,4,...10 словом.

Вероятность того, что первые десять слов из БД и будут решением кроссворда очень мала.
Однако понятно, что если придется перебирать всю БД, то даже если она состоит из 100 слов, количество переборов будет равно 10 в степени 100.  А сколько это ?

Я долго ломал голову и придумал складывать буквы в местах пересечения слов, операцией AND таким образом можно просчитать последствия установки определенного слова на несколько шагов вперед. В результате мой алгоритм заполняет такой кроссворд, как на картинке, за несколько секунд, причем не зависимо от того есть его решение в БД или нет. Вы получите либо кроссворд, либо неуспех. Чем больше слов в БД, тем лучше составляются кроссворды и такой кроссворд составляется за несколько секунд из БД в 30 тыс. слов.

Скачать программу и исходный код.

evm.narod.ru ©