Download Presentation
## Source

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -

**Dov Harel and Robert Endre TarjanFast Algorithms for Finding**Nearest Common AncestorsSIAM J. COMPUT. Vol. 13:338--55, May 1984Speaker : Chan Shuo Wu (吳展碩)Dept. of CSIENational Chi Nan University**Source**• Dov Harel and Robert Endre Tarjan. Fast Algorithm for Finding Nearest Common Ancestors. SIAM J. Comput. Vol. 13:338--55, May 1984.**Introduction**• lowest common ancestor Denote the nearest common ancestor of vertices x and y by nca(x, y).**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.**Idea**• Preprocessing • For complete binary trees • For general rooted trees The difficulty is on how to perform NCA query in constant time.**1000**8 0100 1100 4 12 0010 0110 1010 1110 2 6 10 14 1 3 5 7 9 11 13 15 0001 0011 0101 0111 1001 1011 1101 1111 Path Number • Each node v of B is assigned a number that encodes the unique path from the root to v.**1001**1011 ---- 0010 000 1001 ---- 1011 ---- 1010 Set to 0**Computing nca(x, y)**• Compute XOR(x, y) • 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. • Set nca(x, y)=t.**Preprocessing of B**• 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: • find the position k of the left-most 1-bit • set bits to the right of position k to zero**1001**XOR 1011 ---- 0010 1001 XOR 1011 ---- 0010 OR 1001 ---- 1011 AND 1110 ---- 1010 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 ... 1 2 2 3 3 3 3 4 4 4 4 4 4 4 4 ... 1111 1110 1110 1100 1100 1100 1100 1000 1000 1000 1000 1000 1000 1000 1000 ...**T**B**Depth-First Numbering**0001 1 0010 0101 2 5 1000 3 4 6 7 8 0011 0100 0110 0111 9 10 1001 1010**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.**v I (v)**0001 1 a run 0010 0101 2 5 1000 3 4 6 7 8 0011 0100 0110 0111 9 10 1001 1010**0100**： 1000 ： 1100 0010 • 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. • The function v I(v) is well defined.**Lemma If z is an ancestor of x in T then I(z) is an ancestor**of I(x) in B. z x I(z) I(x) T I(z) I(x) B**Lemma If z is an ancestor of x in T then I(z) is an ancestor**of I(x) in B. Proof I(z) = I(x) = N = ...010100 ...000110 ...010000 z x 010000 010100 N 000110 I(z) I(x) T**Lemma If z is an ancestor of x in T then I(z) is an ancestor**of I(x) in B. z x I(z) I(x) y I(y) T I(z) I(y) I(x) B**For each node v in T, create an O(log n)-bit number Av. Bit**Av(i) is set to 1 if and only if node v has some ancestor in T that maps to height i in B. 1000 1000 1 0100 1100 2 5 3 4 6 7 8 0011 1101 0110 1010 0111 1001 9 10 1001 1001 1010 1010**For each node v in T, create an O(log n) bit number Av. Bit**Av(i) is set to 1 if and only if node v has some ancestor in T that maps to height i in B.**0001**1 0010 0101 2 5 1000 3 4 6 7 8 0011 0100 0110 0111 9 10 1001 1010 • For each node in T, set a pointer to its parent node in T.**For each node v, set a pointer to the root of the run**containing node v. 0001 1 0010 0101 2 5 1000 3 4 6 7 8 0011 0100 0110 0111 9 10 1001 1010**z**x I(z) I(x) y I(y) T Constant-Time NCA Retrieval I(z) I(y) I(x) B**Constant-Time nca Retrieval**x’ y’ x I(z) I(x) y I(y) T**Find the lowest common ancestor b in B of nodes I(x) and**I(y). • Find the smallest position j greater than or equal to h(b) such that both numbers Ax and Ay have 1-bits in position j. j is then h(I(z)). • 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 Ax. • 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 Ax 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 don’t 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 node y’, the closest node to y on the same run as z, by the same approach as in step 3. • If x’ < y’ then set z to x’, else set z to y’.**0011**XOR 0110 ---- 0101 OR 0011 ---- 0111 AND 1100 ---- 0100**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 Ax and Ay have 1-bits in position j. Then node I(z) is at height j in B. z x I(z) I(x) y I(y) T I(z) b I(y) I(x) B**1101**AND 1100 ---- 1100 1010 AND 1100 ---- 1000 1100 AND 1000 ---- 1000 h(I (z)) = h(1000) = 4 A**Constant-Time NCA Retrieval**x’ y’ x I(z) I(x) y I(y) T**h(I (z)) = 4**1101 AND 0111 ---- 0101 OR 0011 ---- 0111 AND 1100 ---- 0100 = NOT 1000 A**Constant-Time NCA Retrieval**x’ y’ x I(z) I(x) y I(y) T**0001**1 0010 0101 2 5 1000 3 4 6 7 8 0011 0100 0110 0111 9 10 1001 1010**Constant-Time NCA Retrieval**x’ y’ x I(z) I(x) y I(y) T**Constant-Time NCA Retrieval**z y’ x I(z) I(x) y I(y) T