【问题标题】:Are O(n+m) and O(n) notations equivalent if m<n?如果 m<n,O(n+m) 和 O(n) 符号是否等效?
【发布时间】:2019-06-17 19:57:33
【问题描述】:

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

【问题讨论】:

  • 我认为这只是为了表明算法的复杂性和m之间也存在线性依赖关系@

标签: algorithm big-o rabin-karp


【解决方案1】:

基本上,Robin-Karp 将其渐近符号表示为 O(m+n),以表示它相对于 m+n 而不仅仅是 n 需要线性时间这一事实。从本质上讲,变量mn 在您使用渐近符号时都必须有意义。对于 Robin-Karp 算法,n 表示文本的长度,m 表示文本和模式的组合长度。请注意O(2n)O(n) 的含义相同,因为O(2n) 仍然是只是 n 的线性函数。然而,在 Robin-Karp 的情况下,m+n 并不是真正的只是 n 的函数。相反,它是两个独立变量mn 的函数。因此,O(m+n)O(n) 的含义不同,O(2n) 等同于 O(n)

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

【讨论】:

    【解决方案2】:

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

    O(m+n) 告诉我们复杂度与文本长度和模式长度成正比。

    【讨论】:

      【解决方案3】:

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

      场景

      考虑 BFS(广度优先搜索)或 DFS(深度优先搜索)作为场景。 它将更直观,并且会传达更多信息来说明复杂性是O(E+V) 而不是max{E,V}。前者与实际算法描述同步。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-20
        • 1970-01-01
        • 2021-07-03
        • 1970-01-01
        相关资源
        最近更新 更多