配对堆(Pairing Heap)是一种优先队列的数据结构,它的主要特点是每个节点都有两个子节点,分别称为左子节点和右子节点。配对堆中每个节点的优先级都大于等于(或小于等于)其子节点的优先级。它具有以下基本操作:插入、删除、查找最小值、更新最小值和堆化。
使用配对堆时,可以根据需要选择插入、删除或查找最小值等操作。当需要频繁插入和删除数据时,可以使用配对堆。它适用于实时数据处理、缓存和优化问题等场景。
以下是一个使用 Python 实现配对堆的简单示例:
class PairingHeap:
def init(self):
self.heap = []
def insert(self, value):
self.heap.append(value)
self._bubble_up(len(self.heap) - 1)
def delete_min(self):
if not self.heap:
return None
if len(self.heap) == 1:
return self.heap.pop()
min_value = self.heap[1]
self.heap[1] = self.heap.pop()
self._bubble_down(1)
return min_value
def find_min(self):
if not self.heap:
return None
return self.heap[1]
def update_min(self, new_value):
if not self.heap or new_value < self.heap[1]:
self.heap[1] = new_value
self._bubble_up(1)
def _bubble_up(self, index):
while index > 0:
parent_index = (index - 1) // 2
if self.heap[parent_index] > self.heap[index]:
self.heap[parent_index], self.heap[index] = self.heap[index], self.heap[parent_index]
index = parent_index
else:
break
def _bubble_down(self, index):
while 2 index + 1 < len(self.heap):
min_child_index = self._find_min_child_index(index)
if self.heap[index] > self.heap[min_child_index]:
self.heap[index], self.heap[min_child_index] = self.heap[min_child_index], self.heap[index]
index = min_child_index
else:
break
def _find_min_child_index(self, index):
left_child_index = 2 index + 1
right_child_index = 2 * index + 2
if right_child_index >= len(self.heap):
return left_child_index
else:
return left_child_index if self.heap[left_child_index] < self.heap[right_child_index] else right_child_index
CopyCopy
使用示例
ph = PairingHeap()
ph.insert(5)
ph.insert(3)
ph.insert(8)
ph.insert(1)
print(ph.find_min()) # 输出 1
print(ph.delete_min()) # 输出 1
print(ph.find_min()) # 输出 3
ph.update_min(2)
print(ph.find_min()) # 输出 2
CopyCopy
这个示例中,我们创建了一个名为 PairingHeap 的类,实现了插入、删除最小值、查找最小值和更新最小值等操作。可以根据需要使用这些方法来处理配对堆。