采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
在测试时间的代码里应该把验证堆实现是否正确的代码去掉,去掉之后比较1000万的数据,时间差距还是很明显的。
我测试了一下,这里最大的时间差距,应该是因为在不是 isHeapify 的情况下,如果初始是一个空的 MaxHeap,在不断添加元素的情况下,对动态数组的扩容操作会使用大量时间。
所以,如果,我们的 else 中,创建 MaxHeap 的方式是这样:
// 传入数据容量大小,一次性创建足够的空间 maxHeap = new MaxHeap<>(testData.length);
结果应该更合理:)
在我的计算机上,1000万数据,不要后续验证,结果是这样的:)
继续加油!:)
但我在不是isHeapify的情况下一次性创建足够的空间,1000万数据,结果还是差距很大, Without heapify: 2.665304074 s With heapify: 0.272771521 s 不会是jdk版本不一致导致的吗?
哦?好奇怪。我这里测试用的 jdk 是1.8。虽然之前我测试一些算法的性能,jdk不同的版本确实会带来不小变化,但是差距不至于有 10 倍这么多。我也不知道怎么回事儿了。。。:-(
我如果不把这段验证代码去掉,1000万数量级,With heapify比Without heapify花的时间还多;只有到了5000万数量级,With heapify比Without heapify花的时间明显少
登录后可查看更多问答,登录/注册
动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…
11.2k 16
1.8k 17
1.7k 14
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号