在测试heapify时发现了一个问题。

来源:8-5 Heapify 和 Replace

GGGJH

2018-10-30

http://img.mukewang.com/szimg/5bd860d100016e2c10000750.jpg
我发现将44-43和46-47代码交换顺序会出现Without heapify用时约居然等于with heapify的二分之一的情况,这是为什么?

写回答

2回答

liuyubobobo

2018-10-31

测试了一下,确实有这个问题,目测和JVM内部的优化有关。在第一次操作这片内存的时候,效率会低。


之前在我的《算法和数据结构》课程中,使用Java也有一个地方有这种情况。但是使用Java1.7会好转。(因为Java1.7的JVM优化还不够吧),我测试了一下,在这个例子中,Java1.7也是同样的。


暂时没有解决方案。(这本身也不是Bug)。毕竟,Java是运行在JVM上的,JVM本身的优化就会决定代码效率,这和在这个课程开篇,我讲Python等脚本语言不适合用于研究测试底层算法性能的原因是一样的。脚本语言运行的效率,很大程度上取决于解释器,同样,Java算法的性能效率也会受JVM影响。


在我的《算法与数据结构》课程中,使用C++实现了同样的两种建堆机制,测试结果是比较稳定的,有兴趣可以尝试:)(虽然C++的运行结果也会受编译器影响,但还是比Java更底层的:))


加油!:)

2
0

GGGJH

提问者

2018-10-30

用的是老师的源码

0
0

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程