Вот простой подход.
Вы ищете только точные совпадения, поэтому я думаю, что вы должны немедленно рассмотреть алгоритмы, основанные на хэше, а не на основе дерева.Сначала рассмотрим хэш-карту, которая связывает каждую букву алфавита с ее позициями в таблице.Теперь для каждого слова вы смотрите на первую букву, а затем просмотрите таблицу (влево, вправо, вверх, вниз), чтобы увидеть, существует ли целое слово.
Вы можете улучшить это, создав вместо этого хеш-карта для каждой двухбуквенной комбинации (всего 676 клавиш) для каждого направления (влево, вправо, вверх, вниз).Теперь вы начинаете с проверки первых двух букв вашего слова, и хэш-карта сразу же дает вам местоположения, где эти две буквы существуют.Теперь вы можете продолжать смотреть в таблице в этом направлении, чтобы увидеть, завершено ли слово.В качестве альтернативы - вы можете взять следующие две буквы слова и посмотреть, есть ли место для этой пары букв, которое находится рядом с первой парой букв и имеет то же направление.
Вы можете улучшить это в дальнейшем... рассматривая хэш-карту для каждой трехбуквенной комбинации для каждого направления.Вы должны быть в состоянии найти хороший баланс между требованиями к хранилищу и производительностью, основываясь на эвристике, такой как средняя длина слова.