資料結構堆的一種比較明白的講解

2021-09-07 05:55:43 字數 666 閱讀 6306

著作權歸作者所有。

來乙個離題的開頭

heap和tree結合,生了個孩子叫treap

中文名叫樹堆。

首先它每個節點有2個值value和weight

其中只看weight的話,滿足heap二叉堆的特性(父親比兒子都小/大),只看value的話,滿足排序二叉樹特性(以左兒子為根的子樹元素都比父親小,右兒子為根的子樹都比父親大)

廢話結束,回歸題目(莫名押韻)

只要無環無向聯通圖都叫樹,具體就是n個點n-1條無向邊連線且任意兩點聯通的一種拓撲結構

如果我們選定乙個節點作為根,那麼這棵樹就是有根樹,遍歷一遍就可以確定所有的父親-兒子的關係了。。。

如果一棵有根樹的每乙個結點至多有兩個兒子,那麼這棵樹稱為二叉樹

如果一棵二叉樹的每乙個節點都帶著乙個值,且父親的值總是比兒子的值要大,我們稱這棵樹為大頂二叉堆,如果是父親比兒子都要小,那就是小頂二叉堆,統稱為二叉堆。(其實一般都把二叉兩個字省略掉,畢竟通常說的堆都是二叉堆,然而堆不止二叉堆)。這乙個良好的性質注定了堆可以用來當作優先佇列使用。

優先佇列支援以下操作

1.放乙個元素進去

2.總是能取出乙個最大的元素出來(大,小的規矩可以通過乙個比較函式來定義)

顯然堆就是可以這麼做。

當然啦,之前說過堆不止二叉堆,還有更複雜的二項堆,斐波那契堆,配對堆等等

Trie樹 一種NB的資料結構

最近在做一些題的時候更加理解到為什麼有一句話叫做程式 演算法 資料結構,可能之前的一些題我用 最基本的資料型別加上一些 意想不到 的演算法就可以解決,但是往往一些問題,佐以精妙的資料結構能讓人事半功倍。字典樹,是一種 樹形結構 是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的 字串 但不僅限...

樹 一種資料結構(二)

通過樹形結構的構造,進行組合設計模式 composite 的實現 node作為基類 本身不持有資料,用於維護共同的節點結構 class node protected node size t id,boost shared ptrp parent p id id 通過建構函式傳遞進來的父類指標建立與其...

一種很有意思的資料結構 Bitmap

昨晚遇到了一種很有意思的資料結構,bitmap。bitmap,準確來說是基於位的對映。其中每個元素均為布林型 0 or 1 初始均為 false 0 位圖可以動態地表示由一組無符號整數構成的集合。每個bit對應乙個無符號數。如位圖第10個位元為true 1 表示無符號整數9。之所以用位圖來表示整數,...