在测试heapify时发现了一个问题。
来源:8-5 Heapify 和 Replace
GGGJH
2018-10-30
我发现将44-43和46-47代码交换顺序会出现Without heapify用时约居然等于with heapify的二分之一的情况,这是为什么?
写回答
2回答
-
测试了一下,确实有这个问题,目测和JVM内部的优化有关。在第一次操作这片内存的时候,效率会低。
之前在我的《算法和数据结构》课程中,使用Java也有一个地方有这种情况。但是使用Java1.7会好转。(因为Java1.7的JVM优化还不够吧),我测试了一下,在这个例子中,Java1.7也是同样的。
暂时没有解决方案。(这本身也不是Bug)。毕竟,Java是运行在JVM上的,JVM本身的优化就会决定代码效率,这和在这个课程开篇,我讲Python等脚本语言不适合用于研究测试底层算法性能的原因是一样的。脚本语言运行的效率,很大程度上取决于解释器,同样,Java算法的性能效率也会受JVM影响。
在我的《算法与数据结构》课程中,使用C++实现了同样的两种建堆机制,测试结果是比较稳定的,有兴趣可以尝试:)(虽然C++的运行结果也会受编译器影响,但还是比Java更底层的:))
加油!:)
20 -
GGGJH
提问者
2018-10-30
用的是老师的源码
00
相似问题