繁体   English   中英

这种不一致的时间复杂度的可能原因是什么?

[英]What could be the possible cause of this inconsistent time complexity?

我创建了一个需要执行大量计算的脚本。 我目前正在对其时间复杂度进行评估,并且当计算数量较低时似乎存在一些不一致之处。

计算相当简单,我希望时间复杂度是线性的,但是,直到大约 20 000 次计算,无论执行多少计算,执行时间似乎都会加倍。 运行代码的每次迭代之间的唯一区别是计算次数,即输入的循环数和所有其他爵士乐都是相同的

经过大约 20 000 次计算,我们可以看到该关系符合线性趋势。 这可能是什么潜在原因? 我对计算机科学的了解有限,但我知识有限的大脑认为这可能与我的 CPU 时钟速度为 2.1MHz 有关 - 但这可能是巧合。 数据附在下面,包括总体时间复杂度的图表。 当计算量很低时,一开始会发生什么? 感谢所有帮助! 谢谢

计算次数 执行时间(秒)
100 1.0739
1000 1.5066
5000 1.7258
10000 1.8882
15000 2.0061
20000 2.1536
25000 2.4743
35000 3.1681
50000 4.9021
75000 7.7399
100000 8.9756
500000 42.1814
1000000 82.0846
500万 416.8664
750万 624.5523
10000000 825.1506

数据 数据图 数据图2

这可能是由于函数的运行时是线性 function 具有非常大的截距项。 例如,假设您的函数的运行时间是 T(n) = n + 100000。然后如果您开始查看 T(2n) / T(n) 形式的比率,您将看到形式的值

(2n + 100000) / (n + 100000) = 1 + n / (n + 100000)。

对于较小的 n 值,这将远远小于 2,尽管线性 function 的“规范标志”是它大约是 n 的两倍。 然而,随着 n 的增加,第二项越来越接近 1,最终比率接近 2。

至于可能导致这种情况的原因,可能是由于加载大型二进制文件而导致程序启动时间缓慢,或者解释器启动的开销,或者计算一些巨大表的成本等。但是没有看到代码和工作流程很难说是哪个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM