Ну сразу следовало бы повыкидывать те слова, которые содержат в себе более короткие слова как подстроки (Кадык, Кумыс) — зачем обеспечивать алгоритм проверки корректности лишней работой? ему и так несладко придётся…
По логике там хеш-таблица или какое-нибудь префиксное дерево. Обычный бинарный поиск тоже довольно быстр — ведь там не больше нескольких сотен тысяч слов, а это около 18ти сравнений.
Но ведь на сложность Филворда влияет не только кол-во и длинна слов, но и расположение области в которой слова находятся: М О Л О
- - - К
- - - О
- - - -
- - О М
- - Л -
- К О -
- О - -
И во втором случае мы уже не сможем подставить слова 5 букв + 5 букв.
Поэтому первичная задача — разбить поле на области и затем, исходя из их длинны и количества, подбирать слова из БД.
Самый простой алгоритм для создания Филворда (Часть 1)