特定数据的计算复杂性

Computational complexity for a specific data

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

简而言之:据我所知,你不是这样证明的。

更详细地说:
关于复杂性的事情是它们在 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