В последнее время я играю в игру на своем iPhone под названием Scramble. Некоторые из вас могут знать эту игру как Boggle. По сути, когда игра начинается, вы получаете матрицу букв примерно так:
F X I E
A M L O
E W B X
A S T U
Цель игры - найти как можно больше слов, которые можно составить, объединяя буквы. Вы можете начать с любой буквы, и все буквы, которые ее окружают, являются честной игрой, а затем, как только вы перейдете к следующей букве, все буквы, которые окружают эту букву, являются честной игрой, , за исключением любых ранее использованных букв . Так, например, в приведенной выше таблице я мог бы найти слова LOB
, TUX
, SEA
, FAME
и т. Д. Слова должны содержать не менее 3 символов и не более NxN символов, что было бы 16 в этой игре, но может варьироваться в некоторых реализациях. Хотя эта игра веселая и затягивающая, я, видимо, не очень хорош в этом, и я хотел немного обмануть, создав программу, которая дала бы мне наилучшие возможные слова (чем длиннее слово, тем больше очков вы получите).
(источник: boggled.org )
Я, к сожалению, не очень хорош с алгоритмами или их эффективностью и так далее. Моя первая попытка использует словарь , такой как этот (~ 2.3MB), и выполняет линейный поиск, пытаясь сопоставить комбинации со словарными статьями. Для поиска возможных слов требуется очень много времени, и, поскольку вы получаете только 2 минуты за раунд, этого просто недостаточно.
Мне интересно посмотреть, могут ли какие-либо Stackoverflowers предложить более эффективные решения. Я в основном ищу решения, использующие Big 3 Ps: Python, PHP и Perl, хотя что-нибудь с Java или C ++ тоже здорово, так как скорость важна.
ТЕКУЩИЕ РЕШЕНИЯ :
- Адам Розенфилд, Питон, ~ 20 с
- Джон Фухи, Python, ~ 3 с
- Кент Фредрик, Perl, ~ 1с
- Дариус Бэкон, Питон, ~ 1с
- rvarcher, VB.NET (прямая ссылка) , ~ 1 с
- Паоло Бергантино, PHP (прямая ссылка) , ~ 5 с (~ 2 с локально)