什么是我的大O?

sha*_*kin 2 big-o

我的值排序时钟程序:

  • 100000 8s
  • 1000000 82s
  • 10000000 811s

那是O(n)吗?

noj*_*ojo 17

看起来像,但实际上,你真的需要分析算法,因为根据数据可能会有不同的情况.例如,一些算法对预先排序的数据做得更好或更差.你的算法是什么?

  • +1 Landau表示法适用于*算法***不适用于***程序*. (3认同)

Jon*_*eet 10

是的,对我来说看起来像是O(n) - 从第1个案例到第2个案例,从第2个案例到第3个案例,你已经把输入变大了10倍,并且它的使用时间增加了10倍.

特别是,您可以使用以下方法预测粗略的时间:

f(n) = n / 12500
Run Code Online (Sandbox Code Playgroud)

要么

f(n) = n * 0.00008
Run Code Online (Sandbox Code Playgroud)

它给出了所提供数据的O(n)的最简单解释.

编辑:但是......正如已经指出的那样,数据有多种方式可能误导你 - 我更喜欢丹尼斯帕尔默认为IO成本相形见绌.例如,假设您有一个算法,其绝对操作数为:

f(n) = 1000000000000n + (n^2)
Run Code Online (Sandbox Code Playgroud)

在那种情况下,复杂性仍然是O(n ^ 2),但是在观察到n非常大之前不会显而易见.

我认为这些观察结果提示O(n)算法是准确的,但这并不意味着它肯定是.


T.E*_*.D. 8

时间行为不起作用.所有你真的可以说这三个数据集大致相互O(n).这并不意味着算法是O(n).

第一个问题是我可以很容易地绘制一条指数(O(e**n))的曲线,但仍包括这三点.

但最大的问题是你没有对数据说什么.有许多排序算法接近O(n)的排序或近似排序的输入(例如:Mergesort).然而,它们的平均情况(通常是随机排序的数据)和最坏情况(通常是反向排序的数据)总是O(nlogn)或更糟.