为什么蛮力算法的时间复杂度为O(n * m)?

时间:2017-02-28 11:05:45

标签: algorithm pattern-matching time-complexity brute-force string-search

我使用以下强力算法搜索另一个字符串中的字符串。

据我所知,在最坏的情况下,比较次数为(n-m+1)*m,但时间复杂度的正确答案应为O(n*m)

要得到这个答案,我会进行以下转换:

(n-m+1)*m = (n+1) * m - m^2 = O(n*m) - m^2

你如何从这里得到O(n*m)

-m^2去了哪里?

暴力算法:

NAIVE-STRING-MATCHER

n = T.length
m = P.length
for s = 0 to n - m
    if P[1...m] == T[s+1...s+m]
        print s

1 个答案:

答案 0 :(得分:1)

运行时间确实属于O(m(n-m))。但由于Big-O表示法是上限,因此O(mn)也为mn ≥ m(n-m)

实际上,这种简化不会造成任何伤害,因为您通常希望搜索字符串的长度与模式的长度成比例。然后m = αn会产生m(n-m) = mn(1-α)