老师,在我生成数组时,发现一个问题

老师,在我生成数组时,发现一个问题

当我设置100万以下时,可能我电脑速度比较快,查询时间显示不出来,于是我只好调成了100万以上才能看到毫秒数,然后我就在做对比测试的时候

第一次我用的100万 1000万两个长度的数据

http://img1.sycdn.imooc.com//climg/6038dbad09fea64106830127.jpg

显示出了时间,但是相差比较小,于是我就又增大了数据,调成了1000万和1亿 

http://img1.sycdn.imooc.com//climg/6038dbd009338e5106980111.jpg

然后问题就出现了,当我是100万和1000万的时候是这样的,我明明等待了2秒左右,查询结果却还是那么快

http://img1.sycdn.imooc.com//climg/6038da9c095d16d202110108.jpg

然后我调整成了1000万和1亿的时候,我等了几十秒才出现结果,然后数据是

http://img1.sycdn.imooc.com//climg/6038daf309e0e03502120097.jpg

说明两次查询都很快,于是我猜想,一定是在生成数组的时候太慢了,然后我就在生成数组的for循环外部,也增加了时间的监控

http://img1.sycdn.imooc.com//climg/6038dbf20949644e11480298.jpg

然后两次测试如图

http://img1.sycdn.imooc.com//climg/6038da73098e8ef304440214.jpg

http://img1.sycdn.imooc.com//climg/6038da8009979df304930205.jpg

然后我就证实了自己的猜想,确实是因为在生成数组的时候,花费了大量的时间

但是通过我多次测试的比较,发现了在我数据为100万与1000万的时候,插入的很快,

哪怕是1000万插入也只需要0.4S左右

但是当我数据为1000万与1亿的时候,插入1000万就需要2.7秒

左右,同样是生成1000万数据的数组,为什么差距这么大呢?


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

抱歉,我没有理解你的问题。什么叫“插入1000万”?我们这一章的代码是做线性查找,是查询的过程。


如果你的问题是,为什么生成数组大到一定程度,生成的时间就变得很长,是的,静态数据内存分配就是这样。因为系统需要找到一个连续的空间,而需要分配的内存过大,这个连续空间很难找到,甚至没有,系统需要先做一些内存整理工作,再分配除这个连续空间。


所以,在我们的性能测试中,我们是不把这个 new 的时间测试进来的。因为这部分性能开销不属于线性查找算法的性能开销。


继续加油!:)

  • 要快乐_ 提问者 #1

    额,抱歉老师,我没有表述清楚,我主要的问题就是在生成1000万长度的数组的时候,为什么会有那么大的时间差距,在我生成100万和1000万长度数组的时候,1000万的数组只需要0.4秒,在我生成1000万和1亿数组的时候,1000万的数组却需要2.7秒

    2021-02-27 08:38:46
  • liuyubobobo 回复 提问者 要快乐_ #2

    明白你的意思了。可能跟系统环境有关。我在我的环境下测试,并没有得到类似的结果。我这里测试,两次生成 1000 万的数组,甚至我使用你的方式测试了一下两次生成 1 亿的数组,所使用的时间是一个量级的。所以这不是一个能在任何环境都稳定复现的问题,我暂时也解释不了:(

    2021-02-27 14:09:03
  • 要快乐_ 提问者 回复 liuyubobobo #3

    好的,谢谢老师。

    2021-02-28 14:51:15
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2594    人
  • 解答问题       1091    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师