Ridiculous Operations in log(n) with Treaps
Ankit Sultana
June 4, 2021
Background
Heaps
insert(elem)
max() / min()
extract_max() / extract_min()
Binary Search Trees
search(elem)
delete(elem)
insert(elem)
max()
min()
lower_bound()
upper_bound()
BSTs
search(elem)
insert(elem)
remove(elem)
max()
min()
lower_bound(value)
upper_bound(value)
Binary Search Trees
search(elem)
delete(elem)
insert(elem)
max()
min()
lower_bound()
upper_bound()
BSTs
insert(elem)
search(elem)
remove(elem)
max()
min()
lower_bound()
upper_bound()
kth_smallest(k)
count_less_than(value)
Treaps
- Cartesian Tree: A tree with two keys in every node, such that the tree forms a BST on one key and a Heap on the other.
- Treap: A cartesian tree where the heap keys are random
Treap
This is a valid Treap, with two keys per node. The orange set of keys forms a BST and the green set forms a Min-Heap
Treap
Same Treap which tracks number of nodes in the sub-tree in each node
Treap
search(elem)
insert(elem)
delete(elem)
min()
max()
lower_bound(value)
upper_bound(value)
kth_smallest(k) /kth_largest(k)
count_less_than(value)
What Else Can I Do With Treaps?
Treaps can be used to represent "dynamic arrays":
Get Element at Index
Delete Element at Index
Insert Element at Index
Range Min/Max/Sum
Reverse Sub-Array
Transplant Sub-Array
Split Array / Merge Two Arrays
etc.
Main Treap Operations
Merge(Treap_1, Treap_2): This takes in two treaps, such that all BST values in Treap_1 are less than all BST values in Treap_2, and combines them.
Split(Treap, v): Creates two treaps from the input Treap, such that all values in one treap are <= v, and all the values in the other are > v
Merge Treap
Merge Treap
Merge Treap
Merge Treap
Merge Treap
Merge Treap
Implicit Treap
Treaps where the BST value is not explicitly stored
Allows the dynamic array operations discussed before
Relies on the fact there's a unique labelling for a BST with N nodes for labels in [1, N]
An array with N elements has unique indices
Implicit Treap
Relies on the fact there's a unique labelling for a BST with N nodes for labels in [1, N]
Implicit Treap
Relies on the fact there's a unique labelling for a BST with N nodes for labels in [1, N]
4
2
1
3
5
Implicit Treap
4
3
2
5
1
1
2
3
4
5
Treap T = new Treap(A[1]);
for (int i = 2; i <= 5; i++) {
T = Merge(T, new Treap(A[i]))
}
Implicit Treap
4
3
2
5
1
1
2
3
4
5
4
1
103
3
1
49
Implicit Treap
4
3
2
5
1
1
2
3
4
5
4
1
103
3
2
49
2
1
70
Implicit Treap
4
3
2
5
1
1
2
3
4
5
4
1
103
3
3
49
2
1
70
5
1
11
Implicit Treap
4
3
2
5
1
1
2
3
4
5
4
1
103
3
3
49
2
1
70
5
4
11
1
1
84
Implicit Treap
4
3
2
5
1
1
2
3
4
5
4
1
103
3
3
49
2
1
70
5
5
11
1
1
84
Implicit Treap
4
3
2
5
1
4
1
103
3
3
49
2
1
70
5
2
11
1
1
84
1
2
3
1
2
Implicit Treap
4
3
2
5
1
4
1
103
3
2
49
2
1
70
5
2
11
1
1
84
1
1
2
1
2
Implicit Treap
4
3
2
5
1
4
1
103
3
2
49
2
1
70
5
2
11
1
1
84
1
1
2
1
2
Implicit Treap
4
3
2
5
1
4
1
103
3
5
49
2
1
70
5
3
11
1
1
84
1
2
3
4
5
Implicit Treap
4
3
2
5
1
4
1
103
3
5
49
2
1
70
5
3
11
1
1
84
1
2
3
4
5
R
Implicit Treap
4
3
2
5
1
4
1
103
3
5
49
2
1
70
5
3
11
1
1
84
1
2
3
4
5
R
R
Implicit Treap
4
3
2
5
1
4
1
103
3
5
49
2
1
70
5
3
11
1
1
84
1
2
3
4
5
R
R
R
Implicit Treap
Allow us to represent an array, with modification operations like:
insert/delete an element at any index
append an array to another
split an array into two
reverse a subarray
transplant a subarray
...
Implicit Treap
Allow us to represent an array, with read operations like:
get element at index
get sum/min/max of values for indices in [l, r]
get k-th smallest value in [l, r]
...
Persistent Implicit Treaps
All operations of Implicit Treaps with
*full immutability*
After each modification operation, a version is created, and each version is always accessible
Persistent Implicit Treaps - Merge
...
...
...
...
...
Persistent Implicit Treaps
All operations of Implicit Treaps with
*full immutability*
After each modification operation, a version is created, and each version is always accessible
Persistent Implicit Treaps
After each modification operation, a version is created, and each version is always accessible
When arrays A and B are merged to yield C, you can still perform any of the read-operations on all of A, B and C.
Other Data Structures
Splay Trees
Segment Trees (aka Interval Trees)
Binary Indexed Trees (aka Fenwick Trees)
Sparse Table
Fibonacci Heaps
...
Thank You!
Ridiculous Operations in log(n) with Treaps
By Ankit Sultana
Ridiculous Operations in log(n) with Treaps
Gives an overview of Treaps— a powerful version of Binary Trees
- 738