1 / 16

Lowest common ancestors

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

Presentation Transcript


  1. Lowest common ancestors

  2. 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

  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

  4. 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

  5. Trivial algorithms for RMQ

  6. Less trivial algorithms to RMQ • Try to use O(nlog(n)) space to do a query in O(1) time

  7. 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]

  8. 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 … …

  9. Preprocess A’ for RMQ using the O(nlog(n)) space algorithm. Since the size of A’ is this would take Space, preprocessing time

  10. 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.

  11. So what do we do inside blocks?

  12. 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

  13. 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

  14. The bottom line There aren’t too many different subproblems, only For each such subproblem prepare all answers in advance 

  15. Find the solution using i,j: Pick a subproblem:

  16. 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