樹剖學習筆記(二) 原理 複雜度證明

2021-08-11 07:58:22 字數 813 閱讀 5630

接上文 樹剖學習筆記(一)

wyj 在時隔十天以後發現自己並沒有理解樹剖,只是會打板子了而已,於是 wyj 慘兮兮的來這裡總結一下

(其實主要是因為被 小 ly d 的很慘 wyj 很不開心嚶嚶嚶tat

樹鏈剖分原理 —— by acdreamers

樹鏈剖分目的:樹路徑資訊維護。將一顆樹劃分成若干條鏈,用資料結構去維護每條鏈,複雜度 o(

logn

) 劃輕重鏈目的:為了讓tid連續。

我們在用線段樹維護鏈的時候,如果節點編號不連續,那麼就無法用線段樹。

第二次 dfs 就是連線重邊形成重鏈,具體過程就是:以根節點為起點,沿著重邊向下拓展,拉成重鏈。不在當前重鏈上的節點,都以該節點為起點向下重新拉一條重鏈。

也就是說如果u -> v是輕邊,則 v 成為重鏈鏈頭,在接下來「將所有重鏈首尾相連」的步驟時,和其他重鏈相連。即重鏈之間由一條不在重鏈上的邊(輕邊)連線。

剖分完畢後,每條重鏈相當於一段區間,然後用資料結構去維護,把所有重鏈首尾相接,放到資料結構上,然後維護整體。

樹鏈剖分執行一次修改/查詢的時間複雜度是 o(logn · logn)。

證明

可以發現樹鏈剖分的結構是沿著鏈向上跳 + 線段樹修改/查詢

線段樹修改查詢操作的時間複雜度是 o(logn);而在樹鏈上每走一條輕邊,子樹大小就 /= 2,所以最多走 log n 條輕邊,複雜度 o(logn)。

紅黑樹時間複雜度證明 O lgn

紅黑樹的時間複雜度為o lgn 當且僅當 節點數為n的一棵紅黑樹的高度滿足o lgn 的要求 證明如下 內容擷取自部落格 下面通過數學歸納法,證明高度為h的紅黑樹,其包含的內節點個數至少為2 bh x 1 當 h 0 內節點個數為0,bh x 0,原命題顯然成立 當 h 0,且樹的高度為h 1,其黑...

時間 空間複雜度學習筆記

五 空間複雜度分析 六 複雜度分析高階 把 跑一遍,通過統計 監控,就能得到演算法執行的時間和占用的記憶體大小,並且能夠正確評估執行效率的方法,但是有非常大的侷限性。int cal int n return sum 假設每行 執行的時間都一樣,為 unit time。第 2 3 行 分別需要 1 個...

學習筆記 演算法的時間複雜度

排序也稱排序演算法 sort algorithm 排序是將一組資料,依指定的順序進行排列的過程。內部排序 指將需要處理的所有資料都載入到內部儲存器中進行排序。外排序法 資料量過大,無法全部載入到記憶體中,需要借助外部儲存進行 排序。常見的排序演算法分類 一般情況下,演算法中的基本操作語句的重複執行次...