2.0.9 • Published 7 years ago
@tyriar/fibonacci-heap v2.0.9
ts-fibonacci-heap
A TypeScript implementation of the Fibonacci heap data structure.
Note that the primary purpose of this library is education but it should work in a production environment as well. It's certainly not as performant as it could be as it optimises for readability, abstraction and safety over raw performance.
Features
- 100% test coverage
- Supports all common heap operations
- Store keys with optional associated values
- Optional custom compare function that can utilize both key and value to give full control over the order of the data
Install
npm install --save @tyriar/fibonacci-heapUsage
See the typings file for the full API.
// Import npm module
import { FibonacciHeap } from '@tyriar/fibonacci-heap';
// Construct FibonacciHeap
const heap = new FibonacciHeap<number, any>();
// Insert keys only
heap.insert(3);
heap.insert(7);
// Insert keys and values
heap.insert(8, {foo: 'bar'});
heap.insert(1, {foo: 'baz'});
// Extract all nodes in order
while (!heap.isEmpty()) {
const node = heap.extractMinimum();
console.log('key: ' + node.key + ', value: ' + node.value);
}
// > key: 1, value: [object Object]
// > key: 3, value: undefined
// > key: 7, value: undefined
// > key: 8, value: [object Object]
// Construct custom compare FibonacciHeap
const heap2 = new FibonacciHeap<string, string>(function (a, b) {
return (a.key + a.value).localeCompare(b.key + b.value);
});
heap2.insert('2', 'B');
heap2.insert('1', 'a');
heap2.insert('1', 'A');
heap2.insert('2', 'b');
// Extract all nodes in order
while (!heap2.isEmpty()) {
const node = heap2.extractMinimum();
console.log('key: ' + node.key + ', value: ' + node.value);
}
// > key: 1, value: a
// > key: 1, value: A
// > key: 2, value: b
// > key: 2, value: BOperation time complexity
| Operation | Complexity |
|---|---|
| clear | Θ(1)* |
| decreaseKey | Θ(1)* |
| delete | O(log n)* |
| extractMinimum | O(log n)* |
| findMinimum | Θ(1) |
| insert | Θ(1) |
| isEmpty | Θ(1) |
| size | Θ(n) |
| union | Θ(1) |
* amortized
2.0.9
7 years ago
2.0.9-beta1
7 years ago
2.0.8
7 years ago
2.0.7
8 years ago
2.0.6
8 years ago
2.0.5
8 years ago
2.0.4
8 years ago
2.0.3
8 years ago
2.0.2
8 years ago
2.0.1
8 years ago
2.0.0
8 years ago
1.0.10
9 years ago
1.0.9
9 years ago
1.0.8
9 years ago
1.0.7
10 years ago
1.0.6
10 years ago
1.0.5
10 years ago
1.0.3
10 years ago
1.0.2
10 years ago
1.0.1
10 years ago
1.0.0
10 years ago
0.1.0
10 years ago