假设我有一个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
答案 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 形式的某些内容放入数据点。一旦你得到它,推断应该给你一个合理的猜测未来的输入。