我有一组字符串,需要构建一个图表,其中字符串是节点,并且在任何一对相邻的字符串之间有一条边。
如果通过添加,删除或替换A
的单个字符(在任何位置),将字符串B
和A
称为相邻你得到B
。
例如scar
和car
相邻(从s
移除scar
),car
和far
也是如此(替换{ {1}}与c
)同等f
和far
(添加farm
)。
是否可以在m
以下的时间内完成此操作?
答案 0 :(得分:6)
您必须在邻接矩阵中计算n(n - 1)/2 = O(n^2)
条目(如果Levenshtein distance为1则条目为1,否则为0)。没有办法避免这种情况。
(请注意,给定n
,我可以在该字母表中找到一个字母和一组单词,这样所有n
个单词都是邻居,图表就完整了。)
答案 1 :(得分:5)
我认为这是不可能的。
在最坏的情况下,所有单词都是邻居。例6 words = {cat,fat,rat,mat,sat,at}。
在此示例中,您需要建立(n)*(n-1)/ 2 = 6 * 5/2 = 15个边。
所以你需要O(n ^ 2)操作只是为了在最坏的情况下设置边缘...无论你需要多少比较或循环,你都不能更好。