1 / 16

160 likes | 227 Views

Lowest common ancestors. 0. Shallowest node. 12. 8. 3. 9. 1. 2. 11. 4. 7. 10. 5. 6. Write an Euler tour of the tree. 3. 3. 2. 3. 1. 4. 1. 7. 1. 3. 5. 6. 5. 3. 5. 1. 2. 4. 6. 7. LCA(1,5) = 3. 0. minimum. 12. 8. 3. 9. 1. 2. 11. 4. 7. 10. 5. 6. 3. 5.

Download Presentation
## Lowest common ancestors

**An Image/Link below is provided (as is) to download presentation**
Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.
Content is provided to you AS IS for your information and personal use only.
Download presentation by click this link.
While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.
During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

**0**Shallowest node 12 8 3 9 1 2 11 4 7 10 5 6 Write an Euler tour of the tree 3 3 2 3 1 4 1 7 1 3 5 6 5 3 5 1 2 4 6 7 LCA(1,5) = 3**0**minimum 12 8 3 9 1 2 11 4 7 10 5 6 3 5 1 2 4 6 7 3 2 3 1 4 1 7 1 3 5 6 5 3 0 1 0 1 2 1 2 1 0 1 2 1 0**0**minimum 12 8 3 9 1 2 11 4 7 10 5 6 Range minimum Preprocess an array, such that given i,j you can find the minimum in [i,j] fast 3 5 Reduction takes linear time 1 2 4 6 7 3 2 3 1 4 1 7 1 3 5 6 5 3 0 1 0 1 2 1 2 1 0 1 2 1 0**Less trivial algorithms to RMQ**• Try to use O(nlog(n)) space to do a query in O(1) time**Optimal solution**... ... ... ... ... Rememeber the min in each block (A’) and its position (B) … ... B[0] B[i] B[2n/logn] … ... A’[0] A’[i] A’[2n/logn]**Example**n=16 A[] : 8 0 1 2 3 4 5 6 7 9 10 11 12 13 14 15 10 25 22 7 34 9 2 26 33 12 24 43 5 11 19 27 = 8 10 25 22 7 34 9 … B[] : A’[] : 0 1 2 0 1 2 0 3 5 10 7 9 … …**Preprocess A’ for RMQ using the O(nlog(n)) space**algorithm. Since the size of A’ is this would take Space, preprocessing time**How do we answer queries ?**i and j might be in the same block, we need some mechanism to answer inside blocks i < j on different blocks, answer the query as follows: • Compute minima from i to end of its block. • Compute minima of all blocks in between i’s and j’s blocks. • Compute minima from the beginning of j’s block to j. Return the index of the minimum of these 3 values.**0**12 8 3 9 1 2 11 4 7 10 5 6 restriction We need to solve a special case of RMQ 3 5 1 2 4 6 7 3 2 3 1 4 1 7 1 3 5 6 5 3 0 1 0 1 2 1 2 1 0 1 2 1 0**3**4 5 6 5 4 5 6 5 4 Two subproblems with the same vector of ±1 are equivalent Each subproblem can be described by the first entry and a vector of ±1 0 1 2 3 2 1 2 3 2 1 +1 +1 +1 -1 -1 +1 +1 -1 -1**The bottom line**There aren’t too many different subproblems, only For each such subproblem prepare all answers in advance **Find the solution using i,j:**Pick a subproblem:**Summary**... ... ... ... ... Each block know its subproblem (A’’) … ... B[0] B[i] B[2n/logn] … ... A’[0] A’[i] A’[2n/logn] … ... A’’[0] A’’[i] A’’[2n/logn]

More Related