让我重新表述你的问题,并给你一个可能的答案。没有看到你的数据集,我不知道哪个更适合你。
你已经有了一个算法,给定两个词,给出它们之间的距离。它基于这些单词之间路径的 Levenstein 距离,并对成本进行了一些修改。并且您希望找到与给定单词最接近的单词,而无需搜索整个字典。
我会尝试的最简单的事情是从您的单词开始,并搜索所有可能的修改集,直到您在字典中找到最接近的单词。您需要修改后的广度优先搜索。存储(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
这将导致从您的原始单词开始呈指数增长的搜索集。但是,如果字典中有附近的单词,它应该会很快找到。如果你走这条路,你可能希望在它的搜索空间上设置一个上限,然后你就放弃了。
这可能远非最佳解决方案,但编程和尝试应该不会太难。