构建“相邻”字符串的图形

时间:2010-11-16 15:47:05

标签: algorithm string language-agnostic graph

我有一组字符串,需要构建一个图表,其中字符串是节点,并且在任何一对相邻的字符串之间有一条边。

如果通过添加,删除或替换A的单个字符(在任何位置),将字符串BA称为相邻你得到B

例如scarcar相邻(从s移除scar),carfar也是如此(替换{ {1}}与c)同等ffar(添加farm)。

是否可以在m以下的时间内完成此操作?

2 个答案:

答案 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)操作只是为了在最坏的情况下设置边缘...无论你需要多少比较或循环,你都不能更好。