Позвольте мне повторно сформулировать ваш вопрос и дать вам возможный ответ. Не видя ваш набор данных, я не знаю, что было бы лучше для вас.
У вас уже есть алгоритм, который, учитывая два слова, дает расстояние между ними. Он основан на расстоянии Левенштейна для пути между этими словами, с некоторыми изменениями в стоимости. И вы хотите найти ближайшее слово к данному слову без необходимости поиска по всему словарю.
Самое простое, что я бы попробовал, - это начать с вашего слова и искать во всех возможных наборах модификаций, пока не найдете наиболее близкое слово в вашем словаре. Вы хотите изменить поиск в ширину. Сохраните (0, your_word)
как единственную запись в некотором виде http://en.wikipedia.org/wiki/Priority_queue (куча проста в реализации), выберите расстояние до случайного словарного слова в качестве вашего текущего лучшего решения и затем до тех пор, пока приоритетная очередь не будет пусто:
Take the lowest cost element out.
If it is more expensive than your best solution:
stop, return your best.
For each possible one step modification of that word:
if the new word is in the dictionary and is lower cost than your best:
improve best estimate
else:
store (new_cost, new_word) in the priority queue
Это приведет к экспоненциально растущему поисковому набору, начиная с вашего исходного слова. Но если в словаре есть близлежащее слово, оно должно найти это довольно быстро. Если вы пойдете по этому маршруту, вы можете захотеть поставить верхнюю границу в поле поиска, после чего вы сдадитесь.
Это может быть далеко не оптимальное решение, но его не должно быть слишком сложно программировать и пробовать.