二项堆 Binomial Heap 与 二项树 Binomial Tree 性质探究(主要针对归并 merge 操作)
2016-04-08 13:02
225 查看
今天在做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程校赛,祝精神正常。
发现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程校赛,祝精神正常。
相关文章推荐
- 彩虹牌汉堡包
- iOS开发之自定义UITableView
- MyBatis (3)——优化MyBatis配置文件中的配置
- 剑指offer-面试题31.连续子数组的最大和
- HDU4717
- Python——在Linux和Windows下创建Django项目
- C++ string 与 C char *
- Android Studio配置初识
- UVA 11529-Strange Tax Calculation-求三角形内点数 /二分/two pointers
- 常见js 函数集合总结
- Android Studio配置初识
- 常见网站盈利模式
- 经典SQL语句大全、50个常用的sql语句
- mysql锁等待分析
- 【ThinkingInC++】75、多重继承
- web安全之token
- 2013 语言包无法运行解决方法
- 最小公倍数公约数(gcd函数)(模板)
- Spring MVC工作流程图
- ECSHOP 如何将商品价格的样式修改掉或者是price_format函数修改