Provides a basic implementation of weight-balanced binary trees.
The WBTrees library contains classes as follows:
- A list by a weight-balanced binary tree, with all
O(log n)
basic operationsWBList<T>
- A set and a map by weight-balanced binary search trees, which can be accessed by index in
O(log n)
timeWBSet<T>
WBMultiSet<T>
WBMap<TKey, TValue>
WBMultiMap<TKey, TValue>
All these trees are constructed from Node<T>
objects.
See Wiki for more information.
This library is written in C#.
You are welcome to port this to other languages.
Provides the WBList<T>
class as a list with all O(log n)
basic operations.
You can also use a WBList<T>
as a (high-grade) double-ended queue (deque).
The following table compares time complexities of System.Collections.Generic.List<T>
and WBList<T>
:
Operation | List<T> |
WBList<T> |
---|---|---|
Get by Index | O(1) |
O(log n) |
Set by Index | O(1) |
O(log n) |
Remove by Index | O(n) |
O(log n) |
Insert by Index | O(n) |
O(log n) |
Prepend | O(n) |
O(log n) |
Add | O(1) |
O(log n) |
Get All | O(n) |
O(n) |
Provides the WBSet<T>
, WBMultiSet<T>
, WBMap<TKey, TValue>
and WBMultiMap<TKey, TValue>
classes, which can be accessed by index in O(log n)
time. All these classes are derived from the WBTreeBase<T>
class.
You can also use a WBMultiSet<T>
or a WBMultiMap<TKey, TValue>
as a priority queue with stable sorting or a double-ended priority queue.
The following table compares time complexities of System.Collections.Generic.SortedSet<T>
and WBSet<T>
:
Operation | SortedSet<T> |
WBSet<T> |
---|---|---|
Get by Item | O(log n) |
O(log n) |
Remove by Item | O(log n) |
O(log n) |
Add | O(log n) |
O(log n) |
Get by Index | O(n) |
O(log n) |
Remove by Index | O(n) |
O(log n) |
Get Index by Item | O(n) |
O(log n) |
Get All | O(n) |
O(n) |
Both WBList<T>
and WBTreeBase<T>
are weight-balanced binary trees (not necessarily searchable by items).
The Node<T>
class contains the Count
property that contributes to both self-balancing and fast access by index (order).
- .NET 5
- .NET Standard 2.0
The WBTrees library is published to NuGet Gallery. Install the NuGet package via Visual Studio, etc.
You can also download a single source file here for competitive programming, etc.
See Usage on Wiki for coding.
- v1.0.4 The first release.