生活随笔
收集整理的這篇文章主要介紹了
python实现二叉堆中的大顶堆(大根堆)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
堆(英語:heap)是計算機科學中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱。堆通常是一個可以被看做一棵樹的數(shù)組對象。堆總是滿足下列性質(zhì):
- 堆中某個節(jié)點的值總是不大于或不小于其父節(jié)點的值;
- 堆總是一棵完全二叉樹。
將根節(jié)點最大的堆叫做最大堆或大根堆,根節(jié)點最小的堆叫做最小堆或小根堆。常見的堆有二叉堆、斐波那契堆等。他們的時間復雜度如下:
'''
遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:778463939
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
class BigPq(object):def __init__(self
, arr
: list):self
.arr
= arrself
.mark
= 1while self
.mark
== 1:self
.build
()def build(self
):self
.mark
= 0 index
= len(self
.arr
) - 1for i
in range(index
):if i
* 2 + 2 <= index
: self
.tri
(i
, i
* 2 + 1, i
* 2 + 2)elif i
* 2 + 1 <= index
: if self
.arr
[i
] < self
.arr
[i
* 2 + 1]:self
.swap
(i
, i
* 2 + 1)else:breakdef tri(self
, head
: int, left
: int, right
: int):if self
.arr
[head
] < self
.arr
[left
]:self
.swap
(head
, left
)if self
.arr
[head
] < self
.arr
[right
]:self
.swap
(head
, right
)def swap(self
, index_1
: int, index_2
: int):self
.mark
= 1temp
= self
.arr
[index_2
]self
.arr
[index_2
] = self
.arr
[index_1
]self
.arr
[index_1
] = temp
def show(self
):print(self
.arr
)def pop(self
) -> int:self
.arr
[0] = self
.arr
[-1]temp
= self
.arr
.pop
()self
.mark
= 1while self
.mark
== 1:self
.build
()return temp
def push(self
, value
: int):self
.arr
.append
(value
)self
.mark
= 1while self
.mark
== 1:self
.build
()
總結(jié)
以上是生活随笔為你收集整理的python实现二叉堆中的大顶堆(大根堆)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。