Professional Documents
Culture Documents
[Experiment]HeapComparison
[Experiment]HeapComparison
[Experiment]HeapComparison
1. 目的
本文目的在于比较三种高级堆结构的实际效率。从而得到对数据结构的一些感性认识,
为实际应用积累经验。它们分别是:
二叉堆(Binary Heap)
Fibonacci 堆(Fibonacci Heap)
配对堆(Pair Heap)
2. 测试方法
具体实现的图结构存储采用邻接表。
3. 理论比较
第 1 页 共 4 页
[ADN.cn][Library]Experiment 三种堆基于 Dijkstra 算法的对比试验 Amber
小于 O (log n ) 。
4. 数据生成
对于这样的数据,用文件存不下,所以一次生成后,再分别用各个堆来计算。这样省去
了输入输出的时间。
z 数据生成:
采用稀疏图的生成函数,先随机一个生成树( n − 1 条边),再随机边插入剩下的 m − n + 1 条
边。
5. 测试细节
z 计时
采用在 Windows 单元中的 GetTickCount()计算时间差,精度到达毫秒级别,但有一
定误差。
z 测试环境
编译器:Delphi 6.0 based on Dcc32 v14.0
系统环境:Windows XP SP2
CPU: Centrino M, 1.8G
内存:512M DDR2
6. 测试结果
用表格表示如下:
第 2 页 共 4 页
[ADN.cn][Library]Experiment 三种堆基于 Dijkstra 算法的对比试验 Amber
用图表表示如下:
10
7. 代码长度
Heaps Lines
FibonacciHeap.pas 279
PairHeap.pas 194
BinaryHeap.pas 150
8. 实际比较结论
第 3 页 共 4 页
[ADN.cn][Library]Experiment 三种堆基于 Dijkstra 算法的对比试验 Amber
由于试验中规模很大,二叉堆(Binary Heap)也不是特别逊色。所以大部分比赛中用二
叉堆就可以了。
Fibonacci 堆的常数很大。可能均摊的复杂度有时可能会小于 Pairheap,但却被巨大的常数
掩盖了。
9. 参考文献
[1] Mark Allen Weiss. Data Structures and Algorithm Analysis in C++. 1996.
[2] Thomas H. Cormen, Charles E. Leiseison, Ronald L. Rivest and Clifford Stein.
Introduction to Algorithm, Second Edition. MIT Press and McGraw-Hill, 2001.
10. 源程序
Base.pas 基本数据定义
GraphGen.pas 数据生成器
Dijkstra.dpr 主算法
BinaryHeap.pas 二叉堆
FibonacciHeap.pas Fib 堆
PairHeap.pas 配对堆
第 4 页 共 4 页