色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

python+堆的原理

方一強2年前7瀏覽0評論

Python 是一種流行的編程語言,其特點是簡單易學、實用、開源和可拓展。在 Python 中,堆是一種重要的數據結構,它可以幫助我們實現高效的優先級隊列和排序算法。

堆是一種完全二叉樹,分為最大堆和最小堆。最大堆的任何一個父節點都比其子節點大,最小堆的任何一個父節點都比其子節點小。我們通常使用數組來實現堆,因為數組的索引操作效率高。

# 堆的基本操作實現
class Heap:
def __init__(self):
self.heap = []
def parent(self, i):
return (i-1)//2
def left_child(self, i):
return 2*i + 1
def right_child(self, i):
return 2*i + 2
def insert(self, k):
self.heap.append(k)
self.heapify_up(len(self.heap)-1)
def heapify_up(self, i):
while i >0 and self.heap[self.parent(i)]< self.heap[i]:
self.heap[self.parent(i)], self.heap[i] = self.heap[i], self.heap[self.parent(i)]
i = self.parent(i)
def extract_max(self):
root = self.heap[0]
self.heap[0] = self.heap[-1]
del self.heap[-1]
self.heapify_down(0)
return root
def heapify_down(self, i):
max_index = i
l = self.left_child(i)
if l< len(self.heap) and self.heap[l] >self.heap[max_index]:
max_index = l
r = self.right_child(i)
if r< len(self.heap) and self.heap[r] >self.heap[max_index]:
max_index = r
if i != max_index:
self.heap[i], self.heap[max_index] = self.heap[max_index], self.heap[i]
self.heapify_down(max_index)

代碼中,我們使用類來實現堆的基本操作。首先定義了堆的parent、left_child、right_child和insert等操作,使用heapify_up實現了插入操作,heapify_down實現了刪除操作,把堆頂元素移到最末尾,并重新排序。

堆在很多高級算法中都起著重要的作用,例如堆排序、圖形搜索等。Python 中 heap 模塊提供了內置的堆實現,方便我們在不同場景中使用,例如:

# heap 模塊的使用
import heapq
nums = [4, 1, 7, 3, 8, 5]
heapq.heapify(nums)
print(nums)
heapq.heappush(nums, 2)
print(nums)
print(heapq.heappop(nums))
print(nums)

在上面的代碼中,我們使用 heap 模塊提供的方法 heapify,將列表 nums 轉換成堆。之后使用了 heappush 和 heappop 等方法實現了元素的插入和彈出操作。

總之,Python 中的堆是使用基于數組實現的數據結構,可以進行快速的排序和查找,支持優先級隊列和圖形搜索等算法。掌握 Python 堆的原理及其使用,有助于我們提高編程效率,實現更優秀的算法。