首页 > 试题广场 >

(二项树和二项堆)二项树Bk是一棵递归定义的有序树。如下图所

[问答题]
(二项树和二项堆)二项树Bk是一棵递归定义的有序树。如下图所示,二项树B0仅包含一个节点。二项树Bk是由两个二项树Bk-1组成,这两棵树按照一棵树的根是另一棵树根的最左孩子的方式连接。下图所示是B0到B4。

a.对于二项树Bk,证明:
  1.    一共有2k个节点
  2. 数的高度是k
  3. 对于i=0,1,2,...,k深度为i的节点恰有
  4. 根的度数为k,它比其他任何节点的度数都要大,此外如图所示,如果把根的孩子从左到右编号为k-1,k-2,...,0,那么孩子i时子树Bi的根。
    二项堆(binomial heap)H是具备如下性质的二项树的集合:
  1. 每个节点具有一个关键字(与斐波拉契堆相同)
  2. H中的每个二项树遵循最小堆性质
  3. 对于任意的非负整数k,H中最多有一个二项树的根的度数为k
b.假定一个二项堆H一共有n个节点,讨论H中包含的二项树与n的二进制表示之间的关系。并证明H最多由棵二项树组成。
      假定按如下方式表述二项堆。用左孩子右邻兄弟方案表示二项堆中的每一棵二项树。每个节点包含一个关键字,指向它父节点的指针,指向它最左孩子的指针和指向它右邻兄弟的指针(这些指针一些情况下是NIL)。以及它的度数(如同斐波拉契堆,表示为有多少孩子)。这些根组成了一个单向链接的根链表,并以根的度数从小到大排列,可以通过一个指向根链表第一个节点的指针来访问二项堆。
c.完整描述如何表示一个二项堆(例如,对属性进行命名,描述属性值什么时候为NIL,定义根链表是怎么组织的),并说明如何用实现斐波拉契堆一样的方式来实现在二项堆上同样的7个操作。每一个操作的最坏时间应该为O(lgn),其中n为二项堆中的节点数目(或对于UNION操作,为要被合并的两个二叉堆中的节点数)。MAKE-HEAP操作应为常数时间。
d.假定仅仅要实现在一个斐波拉契堆上的可合并堆操作(即并不实现DECREASE-KEY和DELETE操作)。斐波拉契堆中的树与二项堆中的树有何相似之处?有什么区别?证明在一个n个节点的斐波拉契堆中最大度数最多为
e.McGee教授提出了一个基于斐波拉契堆的新的数据结构。一个McGee堆具有与斐波拉契堆相同的结构,并且只支持可合并堆操作。除了插入和合并在最后一步中合并根链表外,其他操作的实现方式均与斐波拉契堆中的实现方式相同。McGee堆上各操作的最坏情况运行时间是多少?

这道题你会答吗?花几分钟告诉大家答案吧!