Fast Algorithms for Finding Nearest Common Ancestors Dov Harel and Robert Endre Tarjan Fast Algorithms for Finding Nearest Common Ancestors SIAM J. COMPUT. Vol. 13: , May 1984 Speaker : Chan Shuo Wu ( ) Dept. of CSIE National Chi Nan University
2 Source Dov Harel and Robert Endre Tarjan. Fast Algorithm for Finding Nearest Common Ancestors. SIAM J. Comput. Vol. 13: , May Dov Harel and Robert Endre Tarjan. Fast Algorithm for Finding Nearest Common Ancestors. SIAM J. Comput. Vol. 13: , May 1984.
3 Introduction l owest c ommon a ncestor l owest c ommon a ncestor Denote the nearest common ancestor of vertices x and y by nca ( x, y ).
4 This paper presents an algorithm for NCA that runs on a random access machine and uses O ( n ) preprocessing time, O (1) time per query, and O ( n ) space. This paper presents an algorithm for NCA that runs on a random access machine and uses O ( n ) preprocessing time, O (1) time per query, and O ( n ) space.
5 Idea Preprocessing Preprocessing For complete binary trees For complete binary trees For general rooted trees For general rooted trees The difficulty is on how to perform NCA query in constant time.
6 A Fast Algorithm for Complete Binary Trees
7 A Complete Binary Tree B
8 Path Number Each node v of B is assigned a number that encodes the unique path from the root to v. Each node v of B is assigned a number that encodes the unique path from the root to v
9 Set to
10 Computing nca ( x, y ) Compute XOR( x, y ) Compute XOR( x, y ) Find the position of the left-most 1-bit in XOR( x, y ). Let it be k. Find the position of the left-most 1-bit in XOR( x, y ). Let it be k. Let t be x (or y ). Set the bit in position k of t to be 1 and those bits right to k to be 0. Let t be x (or y ). Set the bit in position k of t to be 1 and those bits right to k to be 0. Set nca ( x, y )= t. Set nca ( x, y )= t.
11 Preprocessing of B Build an O ( n )-size table in O ( n ) time Build an O ( n )-size table in O ( n ) time With this table, the following operations on binary numbers can be done in constant time: With this table, the following operations on binary numbers can be done in constant time: find the position k of the left-most 1-bit find the position k of the left-most 1-bit set bits to the right of position k to zero set bits to the right of position k to zero
XOR XOR OR AND
13 Mapping General Tree to Complete Binary Tree
14 T B
15 Preprocessing of T
Depth-First Numbering
Definition For any number v, height of v, h ( v ) denotes the position of the least-significant 1-bit in the binary representation of v. Definition For any number v, height of v, h ( v ) denotes the position of the least-significant 1-bit in the binary representation of v. Definition For a node v of T, let I ( v ) be a node w in T such that h ( w ) is maximum over all nodes in the subtree of v. Definition For a node v of T, let I ( v ) be a node w in T such that h ( w ) is maximum over all nodes in the subtree of v.
v I ( v ) a run
19 Lemma For any node v in T, there is a unique node w in the subtree of v such that h ( w ) is maximum over all nodes in v 's subtree. Lemma For any node v in T, there is a unique node w in the subtree of v such that h ( w ) is maximum over all nodes in v 's subtree. For any node v in T, node I ( v ) is the deepest node in the run containing node v. For any node v in T, node I ( v ) is the deepest node in the run containing node v. The function v I ( v ) is well defined. The function v I ( v ) is well defined
20 Lemma If z is an ancestor of x in T then I ( z ) is an ancestor of I ( x ) in B. Lemma If z is an ancestor of x in T then I ( z ) is an ancestor of I ( x ) in B. z x I(x)I(x)I(x)I(x) I(z)I(z)I(z)I(z) T I(z)I(z)I(z)I(z) I(x)I(x)I(x)I(x) B
z x I(x)I(x)I(x)I(x) I(z)I(z)I(z)I(z) T Lemma If z is an ancestor of x in T then I ( z ) is an ancestor of I ( x ) in B. Lemma If z is an ancestor of x in T then I ( z ) is an ancestor of I ( x ) in B. Proof Proof N I ( z ) = I ( x ) = N =
22 Lemma If z is an ancestor of x in T then I ( z ) is an ancestor of I ( x ) in B. Lemma If z is an ancestor of x in T then I ( z ) is an ancestor of I ( x ) in B. I(z)I(z)I(z)I(z) I(x)I(x)I(x)I(x) B z x I(x)I(x)I(x)I(x) I(z)I(z)I(z)I(z) T y I(y)I(y)I(y)I(y) I(y)I(y)I(y)I(y)
23 Preprocessing of T ( cont. )
For each node v in T, create an O (log n )-bit number A v. Bit A v ( i ) is set to 1 if and only if node v has some ancestor in T that maps to height i in B. For each node v in T, create an O (log n )-bit number A v. Bit A v ( i ) is set to 1 if and only if node v has some ancestor in T that maps to height i in B.
25 For each node v in T, create an O (log n ) bit number A v. Bit A v ( i ) is set to 1 if and only if node v has some ancestor in T that maps to height i in B. For each node v in T, create an O (log n ) bit number A v. Bit A v ( i ) is set to 1 if and only if node v has some ancestor in T that maps to height i in B
26 For each node in T, set a pointer to its parent node in T. For each node in T, set a pointer to its parent node in T
27 For each node v, set a pointer to the root of the run containing node v. For each node v, set a pointer to the root of the run containing node v
28 I(z)I(z)I(z)I(z) I(x)I(x)I(x)I(x) B z x I(x)I(x)I(x)I(x) I(z)I(z)I(z)I(z) T y I(y)I(y)I(y)I(y) I(y)I(y)I(y)I(y) Constant-Time NCA Retrieval
29 Constant-Time nca Retrieval x I(x)I(x)I(x)I(x) I(z)I(z)I(z)I(z) T y I(y)I(y)I(y)I(y) x y
30 1.Find the lowest common ancestor b in B of nodes I ( x ) and I ( y ). 2.Find the smallest position j greater than or equal to h ( b ) such that both numbers A x and A y have 1-bits in position j. j is then h ( I ( z )). 3.Find node x, the closet node to x on the same run as z as follow: Find the position l of the right-most 1-bit in A x. Find the position l of the right-most 1-bit in A x. If l = j, then set x = x ( x and z are on the same run in T ) and go to step 4. Otherwise (when l < j ) If l = j, then set x = x ( x and z are on the same run in T ) and go to step 4. Otherwise (when l < j ) Find the position k of the left-most 1-bit in A x that is to the right of position j. From the number consisting of the bits of I ( x ) to the left of position k, followed by a 1-bit in position k, followed by all zeros. (That number will be I ( w ), even though we dont yet know w.) Look up node L ( I ( w )), which must be node w. Set node x to be the parent of node w in T. Find the position k of the left-most 1-bit in A x that is to the right of position j. From the number consisting of the bits of I ( x ) to the left of position k, followed by a 1-bit in position k, followed by all zeros. (That number will be I ( w ), even though we dont yet know w.) Look up node L ( I ( w )), which must be node w. Set node x to be the parent of node w in T. 4.Find node y, the closest node to y on the same run as z, by the same approach as in step 3. 5.If x < y then set z to x, else set z to y.
XOR OR AND
32 I(z)I(z)I(z)I(z) I(x)I(x)I(x)I(x) B z x I(x)I(x)I(x)I(x) I(z)I(z)I(z)I(z) T y I(y)I(y)I(y)I(y) I(y)I(y)I(y)I(y) Lemma Let b be the NCA of I ( x ) and I ( y ) in B. Let j be the smallest position h ( b ) such that both A x and A y have 1-bits in position j. Then node I ( z ) is at height j in B. Lemma Let b be the NCA of I ( x ) and I ( y ) in B. Let j be the smallest position h ( b ) such that both A x and A y have 1-bits in position j. Then node I ( z ) is at height j in B. b
A 1101 AND AND AND h ( I ( z )) = h (1000) = 4
34 Constant-Time NCA Retrieval x I(x)I(x)I(x)I(x) I(z)I(z)I(z)I(z) T y I(y)I(y)I(y)I(y) x y
A h ( I ( z )) = AND OR AND = NOT 1000
36 Constant-Time NCA Retrieval x I(x)I(x)I(x)I(x) I(z)I(z)I(z)I(z) T y I(y)I(y)I(y)I(y) x y
38 Constant-Time NCA Retrieval x I(x)I(x)I(x)I(x) I(z)I(z)I(z)I(z) T y I(y)I(y)I(y)I(y) x y
39 Constant-Time NCA Retrieval x I(x)I(x)I(x)I(x) I(z)I(z)I(z)I(z) T y I(y)I(y)I(y)I(y) y z
40