最佳归并树

最佳归并树

归并树的神秘性质

读写磁盘需要2*(6+8+14+16)

每个初始归并段看作一个叶子结点,归并段的长度作为结点权值,则上面这颗归并树的带权路径长度WPL=2 * 1+(5+1+6+2) * 3 = 44 =读磁盘的次数 = 写磁盘的次数

WPL:结点值*到根节点的路径长度

重要结论:归并过程中的磁盘I/O次数 = 归并树的WPL * 2

可以想到:如果要追求归并过程中的磁盘IO次数最小,就要使归并树WPL最小——哈夫曼树

构造2路归并的最佳归并树

一开始把每一个结点都看成一个个独立的树,接下来在这几颗树中挑选权值最小的两棵树,让他们称为兄弟。新的结点的权值是这两个孩子结点的权值之和。还剩下4颗树

。。。如此操作。。。

WPLmin=(1+2)4+23+52+61=34

读磁盘次数 = 写磁盘次数 = 34次

总的磁盘I/O次数 = 68

多路归并的情况

显然不是最佳的归并树

多路归并的最佳归并树

原理和2路归并类似,选择权值最小的3个结点让他们成为兄弟

WPLmin=(2+3+6)3+(9+12+17+24+18)2+301=223

归并过程中 磁盘的I/O总次数 = 446次

如果减少一个归并段

要做3路归并

不正确!!!!

最后一次归并是2路归并

正确的做法

对于k叉归并,若初始归并段的数量无法构成严格的k叉归并树,则需要补充几个长度为0的”虚段“,在进行k叉哈夫曼树的构造。

添加虚段的数量

对于k叉归并,若初始归并段的数量无法构成严格的k叉归并树,则需要补充几个长度为0的”虚段“,在进行k叉哈夫曼树的构造。

k叉的最佳归并树一定是一棵严格的k叉树,即树中只包含度为k、度为0的结点。

知识回顾

本文作者:Jev_0987

本文链接:https://www.cnblogs.com/jev-0987/p/13322232.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Jev_0987  阅读(3491)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起