Data.ByteString.Char8 O(m * n)中`isInfixOf`的时间复杂度是多少?

时间:2015-04-20 08:58:38

标签: string algorithm haskell

从阅读相关源代码,

https://hackage.haskell.org/package/bytestring-0.9.2.1/docs/src/Data-ByteString.html#isInfixOf

似乎isInfix算法实际上是O(m * n)。但事实上,它自己比KMP代码运行得快得多?

这个算法实际上是O(m * n)haskell如何使这个功能极为有效?

1 个答案:

答案 0 :(得分:1)

渐近复杂性并不考虑任何常数,这些常数在现实生活中可能比复杂性本身更为重要。情况可能就是这样 - 它们的常数非常小,你有很大的常数。

根据定义,更大的复杂性是,当一个函数在一个点上具有无穷大值时,即使你将其他函数乘以任意大小的常数。

然而,"一点"可能很大。

例如,如果你有两个alghoritms与此运行时:1000000*n*sqrt(n)n^2n^2的复杂性更大,但为了获得更高的速度,{{1} 1}}必须高于n。对于较小的数字1 000 000 000 000,alghoritms更快。


因此,n^2考虑复杂性不是好方法。