【问题标题】:Why can't the m be dropped in O(n^2 +m)?为什么不能在 O(n^2 +m) 中删除 m?
【发布时间】:2019-10-18 14:04:45
【问题描述】:

既然大 O 是衡量代码如何扩展的指标,那么 n^2 的扩展速度不应该比 m 快得多吗?我看不出具体值有何相关性

【问题讨论】:

  • 我不是大 O 表示法的专家,但我从未见过它与值的加法或减法一起使用。我的理解是,诸如 Big O 之类的符号被命名为“渐近符号”(wikipedia),特别是因为它们描述了极端的时间复杂性,此时加法和减法可以忽略不计。你有这方面的来源或例子吗?

标签: big-o notation


【解决方案1】:

有时复杂性和大 O 有,或者说取决于两个变量。例如,很多图算法使用 EV 来表示边和顶点的数量。如果 m 是常数或从 n 派生,那么通常的分析可以允许减少它。但是,我们可以想象(可能是相当人为的)情况,例如 m=n^3,因此比 m^2 项具有更高的阶数。

我带来的一个人为的例子是有一个 Nn 元素的数组和一个 M m 的巨大列表strong> elements 检查元素是否在第一个数组中。我们天真地选择使用冒泡排序 ( O n^2 ) 并在排序后的数组 N 上对 M 中的每个元素使用二分查找。

我们会有 O(n^2+ m + log(n) )。 在将 log n 降低为一个较低的数量级后,我们最终得到 O(n^2+m)

我们可以使用需要检查 m 次的交叉自连接来代替自行车排序的数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    相关资源
    最近更新 更多