第二章 資料結構 heapq 堆排序演算法 示例資料

2021-09-10 16:34:09 字數 1246 閱讀 6849

2.4 heapq:堆排序演算法

堆(heap)是乙個樹形資料結構,其中子節點與父節點有一種有序關係。二叉堆(binary heap)可以使用乙個有組織的列表或陣列表示,其中元素n的子元素位於2n+1和2n+2(索引從0開始)。這種布局允許原地重新組織堆,從而不必在增加或刪除元素時重新分配大量記憶體。

最大堆(max-heap)確保父節點大於或等於其兩個子節點。最小堆(min-heap)要求父節點小於或等於其子節點。python的heapq模組實現了乙個最小堆。

2.4.1 示例資料

這一節中的示例將使用heapq_heapdata.py中的資料。

# this data was generated with the random module.

data =[19

,9,4

,10,11

]

堆輸出使用heapq_showtree.py列印

import math

from io import stringio

defshow_tree

(tree,total_width=

36,fill=

' ')

:"""pretty-print a tree."""

output = stringio(

) last_row =-1

for i,n in

enumerate

(tree)

:if i:

row =

int(math.floor(math.log(i +1,

2)))

else

: row =

0if row != last_row:

output.write(

'\n'

) columns =

2** row

col_width =

int(math.floor(total_width / columns)

) output.write(

str(n)

.center(col_width,fill)

) last_row = row

print

(output.getvalue())

print

('-'

* total_width)

print

()

第二章 資料結構 二

知識點 trie樹 並查集,堆的操作 高效地儲存和查詢字串集合的資料結構 const int n 100010 int son n 26 cnt n idx 插入 void insert char str cnt p 以這個點結尾的字元數 查詢 intquery char str return cn...

資料結構 第二章總結

線性表是由n 0 個資料元素組成的有限序列。我們學習了線性表上定義的基本運算 有構造空表 initlist l 求表長 listlength l 取結點 getnode l i 查詢 locatenode l x 插入 insertlist l x,i 刪除 delete l i 還學習了順序表 單...

資料結構第二章總結

線性表簡稱表,是n個具有相同型別的資料元素的有限序列。線性表中資料元素的個數稱為線性表的長度。長度為零時稱為空表。線性表中資料元素的型別是同一的。線性表的順序儲存結構稱為順序表。儲存結構是資料及其邏輯結構在計算機中的表示 訪問結構是在乙個資料結構上對查詢操作的時間效能的一種描述。順序表的類的宣告 c...