二项堆 Binomial Heap 与 二项树 Binomial Tree 性质探究(主要针对归并 merge 操作)

来源:互联网 发布:移动宽带端口扩容申请 编辑:程序博客网 时间:2024/06/16 02:02

今天在做ADS的project4(之前完成了project2:倒排索引 Inverted file index,project3:二叉堆 binary heap、左倾堆 leftist heap、斜堆 skew heap 的归并 merge):二项堆 binomial heap 与斐波那契堆 Fibonacci Heap 的节点值减小 DecreaseKey、归并 merge 与删除最小结点 DeleteMin。

发现merge之后的二项堆,并不是同level的结点都被链住。存在sibling为0但仍有同级结点的结点。导致一些有趣现象。于是开始计算:

一、指数为n的二项树,其中未链的条数?

以下所涉递归,均取n>1,防初始值异常。

T(n) = 2T(n-1) + (n+1) - 3

注意,n+1是level数,而3是无断链的层数(即头两层,以及底层)。

二、指数为n的二项树,其中sibling为0的结点数?

P(n) = 2P(n-1) - 1

此式可以考虑combine时(同指数merge),仅使那个被作为儿子的root的sibling指针非0。

也可以逆向考虑其补:~P(n) = 2~P(n) + 1。加1是因为,combine时多出一个sibling。这与正向考虑时一样。

其中,~P(n) = 2^n - P(n)

三、指数为n的二项树,第i层中,sibling为0的结点数?

这个问题,我没有整理出递归式,仅附思路,供读者自己写罢。

(一)观察到,每次merge,所有未链将在本层存留一份,再在下一层复制一份。以文章底部附图为例,考虑n=4。我们可以写出如下的未链记录:

2,2;3,2

表示第2层有2条未链;第3层有2条未链。

那么当n=5时,我们可以记录:

2,2;3,2;3,2;4,2

前两项,分别是n=4的2,2项的本层保留、下层复制;后两项,分别是n=4的3,2项的本层保留、下层复制。

(二)这并没有结束。merge后,将新增(n+1)-3条新链。注意合并(一)与(二)的结果,作为完整的新层的未链记录。

四、我们假设,每条未链将同级结点分割成若干断链。则:

1. 如上所述,对任意n>=2,头两层及底层,仅是一条整链。

2. 从顶至底(from root to leave),第一个有断链的层,其断链长度从左至右:n-1, n-2, ... ,1

3. 从底至顶,各层第一条断链的长度:1,2,3,...,n-1,n,1

4. (从左至右)(第i层各断链长度) ||(连接) (第i+1层各断链长度) 得:第n+1棵树的第i+1层各断链长度。

五、除root,有child等价于有sibling。

这些问题探究之后,还顺便复习了等差等比数列。猜测ADS考试会有所涉及。

后天参加C程校赛,祝精神正常。


0 0
原创粉丝点击