如果m <n,O(n + m)和O(n)表示法是否等效?

时间:2019-01-24 06:32:15

标签: algorithm big-o rabin-karp

=“”

我正在阅读有关Wikipedia上的Rabin-Karp算法,并且其中提到的时间复杂度为O(n + m)。现在,根据我的理解,m必定在0到n之间,所以最好的情况下复杂度为O(n),最坏的情况下复杂度也为O(2n)= O(n),为什么不呢?只是O(n)?

3 个答案:

答案 0 :(得分:4)

罗宾·卡普(Robin-Karp)基本上用O(m+n)表示它的渐近符号,以此表示相对于m+n而不是n花费线性时间这一事实。本质上,每当使用渐近表示法时,变量mn都必须表示某些含义。对于Robin-Karp算法,n代表文本的长度,m代表文本和图案的组合长度。请注意,O(2n)O(n)的含义相同,因为O(2n)仍然是 just n的线性函数。但是,对于Robin-Karp,m+n并不是 just n的功能。相反,它是两个独立变量mn的函数。因此,O(m+n)的含义与O(n)等于O(2n)的含义不同。

我希望这是有道理的。 :-P

答案 1 :(得分:0)

mn测量输入数据的不同维度。长度为n的文本和长度为m的样式与长度为2n的文本和长度为0的样式不同。

O(m+n)告诉我们,复杂度与文本的长度和图案的长度成正比。

答案 2 :(得分:0)

在某些情况下,用O(n+m)形式表示复杂性比仅说O(max(m,n))更为合适。

场景

BFS (宽度优先搜索)或 DFS (深度优先搜索)作为方案。 这样会更加直观,并且会传达更多信息,表明复杂度是O(E+V)max{E,V}。前者与实际算法描述保持同步。