【问题标题】:Building graph of "adjacent" strings“相邻”字符串的构建图
【发布时间】:2010-11-16 15:47:05
【问题描述】:

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

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

例如scarcar是相邻的(从scar中删除s),carfar也是相邻的(用c替换f)和@987654333 @ 和 farm(添加 m)。

是否有可能在不到O(n^2) 的时间内做到这一点?

【问题讨论】:

    标签: algorithm string language-agnostic graph


    【解决方案1】:

    您必须计算邻接矩阵中的 n(n - 1)/2 = O(n^2) 条目(如果 Levenshtein distance 为 1,则条目为 1,否则为 0)。没有办法避免这种情况。

    (请注意,给定n,我可以找到一个字母表和该字母表上的一组单词,这样所有n 单词都是邻居,并且图表是完整的。)

    【讨论】:

    • 由于编辑距离是一个距离,三角不等式成立。我认为,在一般情况下,您可以将空间递归地保留距离
    • 这就是我的完整图表示例的重点。这是最坏的情况。
    • 图形不必存储为邻接矩阵。
    • @Nabb:你的意思是什么?有n choose 2 可能的边缘。必须确定每个可能的边是否在图中。在最坏的情况下,必须明确检查每条边。
    【解决方案2】:

    我认为这是不可能的。

    在最坏的情况下,所有单词都是邻居。示例 6 words={cat, fat, rat, mat, sat, at}。

    在本例中,您需要建立 (n) * (n-1)/2 = 6 * 5/2 = 15 条边。

    所以你需要 O(n^2) 操作来设置最坏情况下的边缘......无论你需要多少比较或循环,你都无法做到更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 2021-06-29
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      相关资源
      最近更新 更多