python的difflib.find_longest_match是如何实现的?

时间:2013-07-07 00:18:20

标签: python algorithm difflib longest-substring

最初想要一个算法来找到两个python字符串之间最长的子字符串。最佳运行时的一般答案是“构建后缀树”,基于线性运行时的在线共识。然而,在线上没有任何示例,并且这并不奇怪,因为后缀树被认为是非常复杂和不直观的构造。

我实施了一个DP解决方案(仍然是二次方的),对于我想要做的事情来说太慢了。

尝试使用python的difflib.find_longest_match,它更快(但它仍然不像id那么快)。

所以如果有人知道,find_longest_match()方法使用什么算法?

此外,如果find_longest_match()的算法不是最优的,那么是否有人知道在哪里可以找出如何实现线性最大子串算法。这是一个有点着名的问题,并且奇怪的是如何在网上提供这么少的优化解决方案。或者也许我只是被误导,下限是二次的,甚至是nlogn。

感谢。

1 个答案:

答案 0 :(得分:1)

以下是代码:http://svn.python.org/view/python/tags/r271/Lib/difflib.py?view=markup 在我看来它是二次的。

只有speedup似乎是一个字典,用于获取使用给定字符的所有索引。这会将时间减少一个因子,即使用的不同字符数。