Expand description

A priority queue implemented with a weak heap.

Insertion and popping the largest element have O(log(n)) time complexity. Checking the largest element is O(1). Converting a vector to a weak heap can be done in-place, and has O(n) complexity. A weak heap can also be converted to a sorted vector in-place, allowing it to be used for an O(n * log(n)) in-place weak-heapsort.

The main purpose of using a weak heap is to minimize the number of comparisons required for push and pop operations or sorting, which is why it is especially useful in cases where comparing elements is an expensive operation, for example, string collation. For the classical comparison of numbers, it is still preferable to use a standard binary heap, since operations with a weak heap require additional numerical operations compared to a conventional binary heap.

This create presents an implementation of the weak heap - WeakHeap, which has an identical interface with BinaryHeap from std::collections, and at the same time it has several new useful methods.

Read about weak heap:

Structs

A draining iterator over the elements of a WeakHeap.

An owning iterator over the elements of a WeakHeap.

An iterator over the elements of a WeakHeap.

A priority queue implemented with a weak heap.

Structure wrapping a mutable reference to the greatest item on a WeakHeap.