大字符串的快速近似字符串差异

时间:2014-12-09 08:35:30

标签: string edit-distance

我试图量化两个字符串之间的差异,作为变更监控系统的一部分。

我遇到的问题是字符串 large - 我经常可以处理100K +字符的字符串。

我目前正在使用Levenshtein距离,但计算大字符串的levenshtein距离是非常低效的。即使最好的实现也只管理O(min(mn))

由于两个字符串的长度大致相同,因此距离计算过程可能需要几秒钟。

我不需要高精度。对于我的应用程序,更改分辨率为1(1000)(例如0.1%)。

有哪些选项可以实现更有效的字符串距离计算?

1 个答案:

答案 0 :(得分:0)

如果您可以容忍某些错误,可以尝试将字符串拆分为较小的块,并计算它们的成对L距离。

该方法显然会产生准确的替换结果,插入和删除会导致精度损失,具体取决于块的数量(最坏的情况会给你2 * <number of insert/deletes> * <number of chunks>而不是<number of insert/deletes>的距离)

下一步可能是让流程自适应,我会看到两种方法,取决于预期的变化性质:

  1. 首先尝试一个小块大小然后继续更大和更大的块并观察每次迭代之间的下降。这应该可以帮助你估计你的测量距离有多少是错误的(虽然我还没有确切地知道如何)。
  2. 一旦找到两个块之间的差异,请尝试确定区别(确切地添加/删除了多少个字符),并相应地将下一个块移到左侧或右侧。