We compare algorithms for the construction of a minimum spanning tree through largescale experimentation on randomly generated graphs of different structures and different densities. In order to extrapolate with confidence, we use graphs with up to 130,000 nodes (sparse) or 750,000 edges (dense). Algorithms included in our experiments are Prim's algorithm (implemented with a variety of priority queues), Kruskal's algorithm (using presorting or demand sorting), Cheriton and Tarjan's algorithm, and Fredman and Tarjan's algorithm. We also ran a large variety of tests to investigate low-level implementation decisions for the data structures, as well as to enable us to eliminate the effect of compilers and architectures.
Within the range of sizes used, Prim's algorithm, using pairing heaps or sometimes binary heaps, is clearly preferable. While versions of Prim's algorithm using efficient implementations of Fibonacci heaps or rank-relaxed heaps often approach and (on the densest graphs) sometimes exceed the speed of the simpler implementations, the code for binary or pairing heaps is much simpler, so that these two heaps appear to be the implementation of choice.
Some conclusions regarding implementation of priority queues also emerge from our study: in the context of a greedy algorithm, pairing heaps appear faster than other implementations, closely followed by binary, rank-relaxed and Fibonacci heaps, the latter two implemented with sacks, while splay trees finish a decided last.