資料結構 《18》----RMQ 與 LCA 的等價性 (一)

來源:互聯網
上載者:User

前言

    RMQ: 數組 a0, a1, a2,..., an-1, 中求任意區間 a[i+1], a[i+2], ..., a[i+k] 的最小值


    LCA: 求二叉樹中兩個節點的最低公用祖先


    本文將證明這兩個問題可以相互歸約為另一個問題。


證明

   先通過一個簡單的例子來說明問題。見:


   求 [7 2 8 6] 的最小值 2,等價於求二叉樹中節點 7 和 節點6的 LCA,也就是 節點2。

   有意思吧。。。


一、 RMQ -> LCA

   給定一個數組,如何求出其對於的二叉樹呢??

     方法1: 這棵二叉樹其實具有類似最小堆的性質(雖然不是完全二叉樹),

                  可以採用遞迴建樹,先找到最小值作為 root 節點,然後對最小值左半邊和右半邊遞迴建左子樹和右子樹即可。

    複雜度: 最好 O(NlgN),最壞 O(N^2), 分析類似與快排。。

     方法2:因此掃描數組的每一個元素,將元素按如下規則插入樹中;

                 從根節點出發,一直往右孩子移動,直到當前插入元素值位於一個 父親節點和右孩子節點之間。

                 將插入節點作為 父親節點的右孩子,之前的右子樹作為插入節點的左子樹。

       

二、LCA -> RMQ

如何將一個 LCA 歸約到一個數組求區間最小值呢?? 這個問題有一個 trick.

加入我們的二叉樹如,注意,它並不滿足最小堆的性質!!!

   1. 做一個變換,將節點的值改成節點的深度,這樣,新的二叉樹就滿足了最小堆的性質;

       這兩顆樹的節點是一一對應的,

       求 LCA(node3, node8) 對應於 在新樹中求 LCA(node3, node1)


    2. 新樹中求 LCA(node3, node1) 對應於在新樹的中序遍曆序列 2 1 3 2 0 1 中求 【3 2 0 1】的最小值;






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.