日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[算法学习] 线段树,树状数组,数堆,笛卡尔树

發布時間:2025/6/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [算法学习] 线段树,树状数组,数堆,笛卡尔树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

都是樹的變種,用途不同

【線段樹 Interval Tree】

區間管理,是一種平衡樹

可看做是對一維數組的索引進行管理。一維數組不需要是排序好的

深度不超過logL

任一個區間(線段)都分成不超過2logL條線段

優點:在O(log L)時間內完成一條線段的插入、刪除、查找、求和等

適用于和區間統計有關的問題。但是該問題必須是可以分解成不同子區間的問題的綜合

?

【樹狀數組】

解決需求:頻繁的求某一段之和,并且需要對數組進行動態的增加和刪減結點

求和的時間復雜度減低為log N

增刪結點的時間復雜度保持為log N?(但是常數項可能會很大。如果多次增刪結點,可考慮改用線段樹)

?

【樹堆】

解決需求:通過“隨機”保持排序二叉樹的平衡性,保持檢索的高效性

類似于排序二叉樹

但是結點保存的數據為<key, value>

從key的角度看,是一棵排序二叉樹,即,左子節點key<=父節點key <右子節點key

從value角度看,是一個最大堆,即,父節點value >= 子結點value

建樹過程:給每個結點賦一個隨機的value,先按排序二叉樹的插入方法插入,然后調整使之滿足最大堆的性質。通過旋轉實現。每個結點插入時的時間復雜度為O(lg N),N為已有的節點數

?

【笛卡爾樹】

和數堆很像。但是需求不同,建樹過程也不同

解決需求:未知

建樹過程:時間復雜度可以為O(N),N為所有的節點數

先按key從小到大排列,然后依次插入樹。保留一個數據棧,棧底是根節點,從棧底到棧頂依次是從根節點出來的右子路徑。

每次要插入的結點,根據value值找它應該插入的位置。

?

?

?

?

轉載于:https://www.cnblogs.com/chenhuanfa/p/3413387.html

總結

以上是生活随笔為你收集整理的[算法学习] 线段树,树状数组,数堆,笛卡尔树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。