Fibonacci heap 2026-11-05
A Fibonacci heap implements a meldable priority queue using a collection of heap-ordered trees and a pointer to a minimum. Insertion and melding defer consolidation. Removing the minimum promotes its children and repeatedly links roots with equal numbers of children, keeping the smaller key above the larger. Decreasing a key cuts a violating node; mark bits and cascading cuts control how much child loss a retained node may accumulate.
The potential method charges stored work using the number of tree roots plus twice the number of marked nodes. It yields constant amortized cost for insertion, melding and decrease-key, and for removing the minimum. These are sequence guarantees, not worst-case bounds for each operation. A node with children has at least a Fibonacci-sized subtree, bounding logarithmically in total heap size. The inexpensive decrease-key operation improves Dijkstra's algorithm to with adjacency lists.[ref]
Michael L. Fredman 2026-11-05
Michael L. Fredman co-developed Fibonacci heaps with Robert Tarjan. Their 1987 paper uses deferred restructuring and amortized analysis to obtain constant amortized time for operations including insertion and decrease-key, with logarithmic amortized time for delete-min.[ref]
This matters in graph algorithms that repeatedly lower tentative priorities: reducing the cost of many decrease-key operations can improve a whole algorithm's bound. A single operation can still be expensive. The guarantee concerns the total cost of a sequence, so confusing amortized time with the worst-case analysis of each individual operation loses the point of the construction.
Robert Tarjan Created 2026-10-18 Updated 2026-11-05
Robert Tarjan is a computer scientist whose work connects efficient graph algorithms, data structures and rigorous analysis. His contributions include algorithms for lowest common ancestors and, with collaborators, splay trees and Fibonacci heaps.[ref]
His work on amortized analysis explains why an individual operation can be expensive while a whole sequence remains efficient. The accounting assigns the cost of occasional restructuring across the sequence instead of assuming each operation has the same worst-case cost. Splay trees make this distinction particularly concrete: moving recently accessed nodes changes the tree while supporting strong bounds over a sequence of accesses.[ref]