0

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

我实现了一个 DP 解决方案(它仍然是二次的)并且对于我正在尝试做的事情来说太慢了。

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

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

另外,如果 find_longest_match() 的算法不是最优的,有谁知道哪里可以找到线性最大子串算法是如何实现的。这是一个有点著名的问题,奇怪的是在线上的最优解决方案如此之少甚至没有。或者我可能只是被误导了,下限是二次的,甚至是 nlogn。

谢谢。

4

1 回答 1

1

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

只有加速似乎是一个字典来获取使用给定字符的所有索引。这将时间减少了一个因素,即使用的不同字符的数量。

于 2013-07-07T00:36:58.793 回答