什么是以汉明距离=1为标准制作词典单词图表的最有效方法?
O(n^2 * l)
,其中l
是字典中单词的最大长度。由于字典中有n
个单词,因此l
至少为log n / log 26
,因此暴力破解方法在最好情况下为O(n^2 log n)
。 - Chris HopmanO(n * l)
。对于字典中的每个单词,在哈希集合中查找该单词的l * 25
个可能的汉明邻居(l * 50
左右的莱文斯坦邻居)- O(n * l * l)
。如果l ~ log(n)
,则总体上这是O(n (log n)^2)
。 - Chris Hopmanmap<string, list<string>
来表示图形。它将图形节点(在我们的情况下是单词)映射到相邻节点的列表(即距离==1的所有单词)。set<string> wordset[MAX_WORD_LENGTH]
,然后按以下方式填充映射。map<string, list<string>> adjacency_map
for each wordset in wordset array
for each w1 in wordset
for each w2 in wordset
if one_char_off(w1, w2) { // if the distance between w1 and w2 == 1
update(adjacency_map, w1, w2)
update(adjacency_map, w2, w1)
}
Function one_char_off(string w1, string w2)
checks if the distance between w1 and w2 is 1.
int diff = 0
for i in [0, w1.length) // both w1 and w2 have the same length
if w1[i] != w2[i]
if ++diff > 1
return false
return diff == 1
函数 update(map<string, list<string>> adjacency_map, string w1, string w2)
将相邻单词对 w1
和 w2
添加到相邻映射中。