snippetModerate
A median of an AVL. How to take advantage of the AVL?
Viewed 0 times
theadvantagetakeavlhowmedian
Problem
Here is the source of my question.
Given a self-balancing tree (AVL), code a method that returns the
median.
(Median: the numerical value separating the higher half of a data
sample from the lower half. Example: if the series is
2, 7, 4, 9, 1, 5, 8, 3, 6
then the median is 5.)
I can offer the following solution:
But I can do it with a binary search tree, can't I?
Is there a better algorithm for an AVL?
Given a self-balancing tree (AVL), code a method that returns the
median.
(Median: the numerical value separating the higher half of a data
sample from the lower half. Example: if the series is
2, 7, 4, 9, 1, 5, 8, 3, 6
then the median is 5.)
I can offer the following solution:
- Traverse the given tree, return the number of elements.
- Traverse
n / 2 + 1(ifnis odd) the tree again applying an in-order tree walk. The value of then / 2 + 1th element is the median.
But I can do it with a binary search tree, can't I?
Is there a better algorithm for an AVL?
Solution
If you modify the AVL tree by storing the size of the subtree at each node rather than just its height, then you can find the median in time $O(\log n)$ using the fact that the tree is balanced. To accomplish this, you write a more general procedure Select which accepts a node $v$ and a number $k$, and finds the $k$th smallest node at the subtree rooted at $v$.
Suppose that the left subtree (if any) has $L$ nodes. If $k \leq L$ then we recurse to the left subtree. If $k = L+1$ then we return $v$. Otherwise we recurse to the right subtree, reducing $k$ by $L+1$.
The running time of this algorithm is linear in the height of the tree, which is $O(\log n)$.
Suppose that the left subtree (if any) has $L$ nodes. If $k \leq L$ then we recurse to the left subtree. If $k = L+1$ then we return $v$. Otherwise we recurse to the right subtree, reducing $k$ by $L+1$.
The running time of this algorithm is linear in the height of the tree, which is $O(\log n)$.
Context
StackExchange Computer Science Q#41473, answer score: 10
Revisions (0)
No revisions yet.