[Python] 斐波那契堆的实现
斐波那契堆是一种基于堆的数据结构,其用途主要为:
- 实现“可合并堆”
-某些在斐波那契堆中常数摊还时间内完成的操作频繁使用的应用
具体函数(操作):
首先介绍堆中元素(节点)的实现:
元素初始化
def __init__(self, key):
self.key=key #关键字
self.degree=0 #元素在堆中的度
self.p=0 #指向双亲节点
self.child=0 #指向第一个孩子节点
self.left=0 #左向循环指针
self.right=0 #右向循环指针
self.mark=False #标记
x.GetChild(c): 使元素c成为元素x的孩子节点
def GetChild(self,cn):
cn.p=self
self.degree=self.degree+1
if self.child==0:
self.child=cn
cn.left=cn
cn.right=cn
else:
c=self.child
cn.right=c
cn.left=c.left
cn.left.right=cn
x.printNode():循环输出元素x和它的同一级节点及他们的子节点
def printNode(self):
if self.child!=0:
c=self.child
cl=c.left
while True:
print("%d has child: %d" % (self.key,c.key))
c.printNode()
if cl==c:
break
c=c.right
x.SearchChild(key):循环搜索关键字为key的节点
def SearchChild(self, key):
w=self
v=self
resultnode=0
while True:
if w.key==key:
return w
if w.child!=0:
resultnode=w.child.SearchChild(k