关于数据规模与运行时间测试的疑问

来源:1-5 选择排序法的复杂度分析

rymrst

2021-11-27 13:55:42

请问老师,我在我的电脑进行选择排序法的性能测试,在十万和一百万的规模上,多次测试两组数据规模,结果时间上来说好像时间都是不止10倍,请问是因为在实际的测试过程中计算机的影响或者是系数以及非最高次数项带来的影响吗?

https://img.mukewang.com/climg/61a1c795099e493900000000.jpg


写回答

1回答

liuyubobobo

2021-11-27

首先,100 这个数量级是正常的。数据增长 10 倍,时间增长 100 倍,这就是 O(n^2) 的意思。因为 (10*n)^2 = 100*n^2。如果数据增长 10 倍,时间是 10 倍,这是 O(n) 的算法。


其次,你的截图表明,在你的环境下,数据规模从 10 万 到 100 万,时间增长了 200 倍。如果你确定你的程序是正确的,这样的结果在我看来也是正常的,不算离谱。


因为在高级语言上测试的程序性能,不完全是算法的性能,有很多其他因素的影响。比如操作系统的影响,比如 JVM 的影响,比如地址空间变大以后寻址的性能开销的改变,等等等等。整体,语言越底层,类似这样的影响会越小。


继续加油!:)

0
hymrst
hp>好的,这个是用老师您上课的代码跑的。明白了,谢谢老师。

h021-11-27
共1条回复

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2584 学习 · 1063 问题

查看课程