用执行时间表计算big-O?

时间:2017-02-21 13:20:37

标签: big-o execution-time

假设我有一个bitsize和executiontime表,其中bitsize是我输入算法的数字的大小。

 bitsize   -  exectime

 512       -    5
 1024      -    50
 2048      -    500

将big-O计算为bitsize函数意味着什么?我会怎么做这个案子?

我可以看到时间增加为0.5 * 10 ^ x

如果我想知道下一个执行时间是什么,我也可以这样做:

(50/1024)/(5/512)= 5

(500/2048)/(50/1024)= 5

(t / 4096)/(500/2048)= 5 => t = 5000

1 个答案:

答案 0 :(得分:0)

此表中的数据表明,当您将输入的大小加倍时,函数的运行时间会增加十倍。因此,猜测运行时为O(f(n))是合理的,其中f(n)是具有上述行为的某个函数,n是位大小。问题是如何找到这样的函数。

这里合理的猜测是你正在研究多项式的某种风格,因为一般来说,如果你将输入的大小加倍到多项式函数,输出会增长一些常数。因此,假设对于某个常数k,f(n)= n k 。我们想选择k使得f(2n)= 10f(n)。这意味着我们要解决

  

(2n) k = 10n k

     

2 k n k = 10n k

     

2 k = 10

     

k = log 2 10

因此,合理的猜测是运行时为O(n log 2 10 )。这不一定是这种情况,因为对于越来越大的输入,运行时可能会以不同的方式发生变化,但它仍然是一个合理的猜测。

如果你想从这里推断,你需要找出隐藏在big-O表示法中的常数因子。尝试查看是否可以将cn log 2 10 形式的某些内容放入数据点。一旦你得到它,推断应该给你一个合理的猜测未来的输入。