解决这一问题的更简单的方法确实是预先绘制的地图[黑字]——和;[建议]。
问题在于,如果删除一封信,就会增加或替代候选人many。
因此,我建议另一种解决办法。
http://en.wikipedia.org/wiki/Levenshtein_distance. Levenshtein Distance
解决办法按增量步骤加以描述,通常每个设想的搜索速度都应不断提高,我试图首先以更简单的想法(从执行期)加以组织。 只要你对结果感到欣慰,就可自由终止。
0.Preliminary
- Implement the Levenshtein Distance algorithm
- Store the dictionnary in a sorted sequence (
std::set
for example, though a sorted std::deque
or std::vector
would be better performance wise)
Keys Points:
- The Levenshtein Distance compututation uses an array, at each step the next row is computed solely with the previous row
- The minimum distance in a row is always superior (or equal) to the minimum in the previous row
后一种财产允许使用短路:如果你想要将 yourself字限制在2个错误(门槛),那么,如果目前行文的最低点位优于2个,你就可以放弃计算。 一项简单战略是将战区+1作为距离。
1. First Tentative
让我们开始简单。
我们用直线扫描仪:每字我们计算距离(短路),我们列出迄今为止距离较小的词语。
它在小独裁者方面做得很好。
2. 改进数据结构
远距至少等于长短。
通过把双胞胎(宽度,字数)作为钥匙而不是仅仅使用字句,你可以把你的搜索限制在<代码>的长度范围内[宽度-编辑、长度+ edit],并大大减少搜索空间。
3. Prefixes and pruning
为了改进这方面工作,我们可以指出,在我们建立距离矩阵、逐行发展的时候,一个世界完全被扫描(我们所看一字),而另一个世界(指名人)不是:我们只用一封信给各行。
This very important property means that for two referents that share the same initial sequence (prefix), then the first rows of the matrix will be identical.
请你储存字典吗? 也就是说,具有相同先决条件的词语是相邻的。
假设你在<条码>和<条码>上核对你的字句,你在<条码>上看到该字不可行(距离已经太长),那么从<条码>开始的任何字。 或者,只要通过<条码>,你就可以打字。
能力本身可以是直线性的,也可以是搜索的(定义第1字,其序号高于car
):
- linear works best if the prefix is long (few words to skip)
- binary search works best for short prefix (many words to skip)
“长时间”取决于你的字典,你必须衡量。 我将开始双轨搜索。
注意:长度分区与前缀分区相反,但它会修剪更多的搜索空间
4. 固定和再使用
Now, we ll also try to re-use the computation as much as possible (and not just the "it does not work" result)
Suppose that you have two words:
您首先将表格(逐行)计算为<条码>。 然后在读到<条码>时,先由>条令/条码>。 您需要确定共同的序号(见car
)的长度,并且可以保留矩阵头4行(对应的是空白,c
,a
,r
。
Therefore, when begin to computing carwash
, you in fact begin iterating at w
.
为此,在你开始搜寻时简单地使用一个阵列,使之足以满足更大的参考要求(你应当知道你的字典中最长的长度)。
5. Using a "better" data structure
如果时间较长,可以使用Trie或Patricia树储存dict。 然而,这并不是一个STL数据结构,你需要扩大这一结构,以便在每个子树中储存所储存的字数长度,这样你就不得不自行执行。 这并不像现在这样容易,因为有记忆爆炸问题可以造成当地人死亡。
This is a last resort option. It s costly to implement.