Even a rough literature review reveals that there are many alternative ways of implementing a binary heap, the fundamental priority-queue structure loved by us all. Which one of these alternatives is the best in pract...
详细信息
Even a rough literature review reveals that there are many alternative ways of implementing a binary heap, the fundamental priority-queue structure loved by us all. Which one of these alternatives is the best in practice? The opinions of crowd-pullers and textbook authors are aligned: use an array. Of course, the correct answer is it depends'. To get from opinions to facts, a frameworka set of class templateswas written that provides a variety of customization options so it could be used to realize a large part of the proposed variants. Also, some of the derived implementations were performance benchmarked. From this work, three conclusions can be drawn: (i)It is difficult to achieve space efficiency and speed at the same time. If n denotes the current number of values in the data structure, E is a small positive real, E<1, and |V| denotes the size of the values of type V in bytes, space efficiency means (1+E)|V|n bytes of space, and speed means O(lgn) worst-case time per push and pop. (ii) If an array-based solution is sufficient, Williams' original program from 1964 is still to this day hard to beat. (iii)Sometimes a linked structure and clever programming is a viable option. If the binary-heap variant you need is not available at the software library you are using, reading this essay might save you some headaches. Copyright (c) 2016 John Wiley & Sons, Ltd.
暂无评论