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...