请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

在测试时间的代码里应该把验证堆实现是否正确的代码去掉

在测试时间的代码里应该把验证堆实现是否正确的代码去掉,去掉之后比较1000万的数据,时间差距还是很明显的。图片描述

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2019-08-06 06:01:06

我测试了一下,这里最大的时间差距,应该是因为在不是 isHeapify 的情况下,如果初始是一个空的 MaxHeap,在不断添加元素的情况下,对动态数组的扩容操作会使用大量时间。


所以,如果,我们的 else 中,创建 MaxHeap 的方式是这样:

// 传入数据容量大小,一次性创建足够的空间
maxHeap = new MaxHeap<>(testData.length);


结果应该更合理:)


在我的计算机上,1000万数据,不要后续验证,结果是这样的:)

//img1.sycdn.imooc.com//szimg/5d48a71609129dda22480322.jpg


继续加油!:)

1 回复 有任何疑惑可以回复我~
  • 提问者 zhured #1
    但我在不是isHeapify的情况下一次性创建足够的空间,1000万数据,结果还是差距很大,
    Without heapify: 2.665304074 s
    With heapify: 0.272771521 s
    不会是jdk版本不一致导致的吗?
    回复 有任何疑惑可以回复我~ 2019-08-06 08:12:21
  • liuyubobobo 回复 提问者 zhured #2
    哦?好奇怪。我这里测试用的 jdk 是1.8。虽然之前我测试一些算法的性能,jdk不同的版本确实会带来不小变化,但是差距不至于有 10 倍这么多。我也不知道怎么回事儿了。。。:-(
    回复 有任何疑惑可以回复我~ 2019-08-06 08:36:43
  • 我如果不把这段验证代码去掉,1000万数量级,With heapify比Without heapify花的时间还多;只有到了5000万数量级,With heapify比Without heapify花的时间明显少
    回复 有任何疑惑可以回复我~ 2019-08-10 21:23:57
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号