特定数据的计算复杂性

时间:2015-01-19 21:50:28

标签: performance-testing performance-estimation

如果复杂性为O(nlog2(n)) ...... 如果我们知道像10e7执行时间这样的数据是0.1秒,如何证明像10e5这样的数据的执行时间?

1 个答案:

答案 0 :(得分:1)

简而言之:据我所知,你不能以这种方式证明这一点。

更详细地说:
关于复杂性的事情是它们在Big O notation中报告,其中任何常量和低阶项都被丢弃。例如;问题O(nlog2(n))的复杂性,但这可能是k1 * n * log(k2 * log(k3 * n + c3) + c2) + c1的简化形式。

这些常量涵盖的事项包括初始化任务,无论采样数是多少,都需要相同的时间,执行log2(n)位所需的比例时间(每一项可能需要10 ^ 6倍) n位),等等。

除了常量之外,您还有可变因素,例如执行算法的硬件,系统上的任何额外负载等。

为了将此作为估计执行时间的基础,您需要在问题大小方面拥有足够的执行时间样本来估计常量和变量因子。

出于实际目的,人们可以收集多个执行时间样本,以获得足够大的问题大小集,然后根据您的复杂性公式使用合适的函数拟合数据。

在证明执行时间......不是真的可行的时候,你能想到的最好的是最合适的模型和重要的p值。

当然,如果您只想粗略猜测,您可以尝试假设所有常量和变量都是1或0,并插入您拥有的数字:(0.1s / (10^5 * log2(10^5))) * (10^7 * log2(10^7)) = 11 ish