| Did you know ... | Search Documentation: |
| heaps.pl -- heaps/priority queues |
Heaps are data structures that return the entries inserted into them in an ordered fashion, based on a priority. This makes them the data structure of choice for implementing priority queues, a central element of algorithms such as best-first or A* search and Kruskal's minimum-spanning-tree algorithm.
This module implements min-heaps, meaning that key-value items are retrieved in ascending order of key. In other words, the key determines the priority. It was designed to be compatible with the SICStus Prolog library module of the same name. merge_heaps/3 and singleton_heap/3 are SWI-specific extension. The portray_heap/1 predicate is not implemented.
Although the values can be arbitrary Prolog terms, the keys determine the priority, so keys must be ordered by @=</2. This means that variables can be used as keys, but binding them in between heap operations may change the ordering. It also means that rational terms (cyclic trees), for which standard order is not well-defined, cannot be used as keys.
The current version implements pairing heaps. These support insertion and merging both in constant time, deletion of the minimum in logarithmic amortized time (though delete-min, i.e., get_from_heap/3, takes linear time in the worst case).
add_to_heap(+Heap0, +Key, ?Value, -Heap) is semidet
delete_from_heap(+Heap0, -Key, +Value, -Heap) is semidet
empty_heap(?Heap) is semidet
singleton_heap(?Heap, ?Key, ?Value) is semidetComplexity: constant.
get_from_heap(?Heap0, ?Key, ?Value, -Heap) is semidet
heap_size(+Heap, -Size:int) is det
heap_to_list(+Heap, -List:list) is det
is_heap(+X) is semidet
list_to_heap(+List:list, -Heap) is det
min_of_heap(+Heap, ?Key, ?Value) is semidet
min_of_heap(+Heap, ?Key1, ?Value1, ?Key2, ?Value2) is semidet
merge_heaps(+Heap0, +Heap1, -Heap) is det