algorithm - O(N) 或 O(2N) 哪个算法更快?

标签 algorithm big-o

关于大 O 表示法,如果一种算法的时间复杂度为 O(N),而另一种算法的时间复杂度为 O(2N),哪个更快?

最佳答案

大O的定义是:

O(f(n)) = { g | there exist N and c > 0 such that g(n) < c * f(n) for all n > N }

在英语中,O(f(n)) 是最终增长率小于或等于 f 的所有函数的集合。

所以 O(n) = O(2n)。就渐近复杂性而言,两者都不比另一个“更快”。它们代表相同的增长率 - 即“线性”增长率。

Proof:

O(n) is a subset of O(2n): Let g be a function in O(n). Then there are N and c > 0 such that g(n) < c * n for all n > N. So g(n) < (c / 2) * 2n for all n > N. Thus g is in O(2n).

O(2n) is a subset of O(n): Let g be a function in O(2n). Then there are N and c > 0 such that g(n) < c * 2n for all n > N. So g(n) < 2c * n for all n > N. Thus g is in O(n).

通常,当人们提到渐近复杂性(“大 O”)时,他们指的是规范形式。例如:

  • 对数:O(log n)
  • 线性:O(n)
  • 线性:O(n log n)
  • 二次方:O(n2)
  • 指数:O(cn) 对于某些固定的 c > 1

(这是一个更完整的列表:Table of common time complexities)

所以通常你会写 O(n),而不是 O(2n); O(n log n),而不是 O(3 n log n + 15 n + 5 log n)。

关于algorithm - O(N) 或 O(2N) 哪个算法更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25777714/

相关文章:

algorithm - LZW 压缩似乎无法正常工作

c - 冒泡排序 - 如果需要 n 次操作来对大小为 k 的列表进行排序,那么大约需要多少次操作来对大小为 2k 的列表进行排序?

algorithm - 印了多少颗星?

c - 这个算法是线性的吗?

algorithm - 我应该使用什么算法?

algorithm - 为期权定价实现快速傅里叶变换

python - 如何准确识别 O(nlogn)?

algorithm - 这些循环可以执行多少次?

java - 具有原始字符串的所有不同字符的最小长度子字符串的滑动窗口解决方案

algorithm - 为最大长度为 4 的 BFS 绘制图形