【发布时间】:2019-10-18 14:04:45
【问题描述】:
既然大 O 是衡量代码如何扩展的指标,那么 n^2 的扩展速度不应该比 m 快得多吗?我看不出具体值有何相关性
【问题讨论】:
-
我不是大 O 表示法的专家,但我从未见过它与值的加法或减法一起使用。我的理解是,诸如 Big O 之类的符号被命名为“渐近符号”(wikipedia),特别是因为它们描述了极端的时间复杂性,此时加法和减法可以忽略不计。你有这方面的来源或例子吗?
既然大 O 是衡量代码如何扩展的指标,那么 n^2 的扩展速度不应该比 m 快得多吗?我看不出具体值有何相关性
【问题讨论】:
有时复杂性和大 O 有,或者说取决于两个变量。例如,很多图算法使用 E 和 V 来表示边和顶点的数量。如果 m 是常数或从 n 派生,那么通常的分析可以允许减少它。但是,我们可以想象(可能是相当人为的)情况,例如 m=n^3,因此比 m^2 项具有更高的阶数。
我带来的一个人为的例子是有一个 N 个 n 元素的数组和一个 M m 的巨大列表strong> elements 检查元素是否在第一个数组中。我们天真地选择使用冒泡排序 ( O n^2 ) 并在排序后的数组 N 上对 M 中的每个元素使用二分查找。
我们会有 O(n^2+ m + log(n) )。 在将 log n 降低为一个较低的数量级后,我们最终得到 O(n^2+m)。
我们可以使用需要检查 m 次的交叉自连接来代替自行车排序的数组。
【讨论】: