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

今天在做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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值