Swift implementation of implicit treap. Data structure with efficient random insert / remove.
TreeArray behaves like a usual array but has a different implementation under the hood that allows some operations to work faster. You can just replace Array
with TreeArray
and it should work as expected.
import TreeArray
var foo: TreeArray = [1, 2, 3, 4, 5]
foo.insert(0, at: 0)
print(foo) // [0, 1, 2, 3, 4, 5]
According to performance tests, the visible difference starts to appear around 16k elements. After that, TreeArray
outperform Array
and Deque
on random insertions and deletions.
Operation | Complexity | Complexity Array |
---|---|---|
append | O(log n) |
O(1) |
subscript | O(log n) |
O(1) |
random insert | O(log n) |
O(n) |
random delete | O(log n) |
O(n) |
iteration (iterator) | O(n) |
O(n) |
iteration (subscript) | O(n * log n) |
O(n) |
build from array | O(n) |
O(n) |
build from unknown-sized seq | O(n * log n) |
O(n) |
reverse | O(n) |
O(n) |
contains | O(n) |
O(n) |
append array | O(m + log n) |
O(m) |
insert array | O(m + log n) |
O(m + n) |
The data structure is built upon a self-balancing random search tree. It allows performing random insertions and deletions efficiently with the cost of worse performance on other operations. In the directory Benchmarks/results you can explore full comparison results. Here, I will note only the most important cases.
However, on other tests, it works worse. For example, iteration or build.