从阅读相关源代码,
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
如何使这个功能极为有效?
答案 0 :(得分:1)
渐近复杂性并不考虑任何常数,这些常数在现实生活中可能比复杂性本身更为重要。情况可能就是这样 - 它们的常数非常小,你有很大的常数。
根据定义,更大的复杂性是,当一个函数在一个点上具有无穷大值时,即使你将其他函数乘以任意大小的常数。
然而,"一点"可能很大。
例如,如果你有两个alghoritms与此运行时:1000000*n*sqrt(n)
和n^2
,n^2
的复杂性更大,但为了获得更高的速度,{{1} 1}}必须高于n
。对于较小的数字1 000 000 000 000
,alghoritms更快。
因此,n^2
考虑复杂性不是好方法。