K元归并树——贪心算法
问题介绍
两个分别包含n个和m个记录的已分类文件可以在O(n+m)时间内归并在一起而得到一个分类文件。当要把两个以上的已分类文件归并在一起时,可以通过成对地重复归并已分类的文件来完成。例如:假定X1,X2,X3,X4是要归并的文件,则可以首先把X1和X2归并成文件Y1,然后将Y1和X3归并成Y2,最后将Y2和X4归并,从而得到想要的分类文件;也可以先把X1和X2归并成Y1,然后将X3和X4归并成Y2,最后归并Y1和Y2而得到想要的分类文件。给出n个文件,则有许多种把这些文件成对地归并成一个单一分类文件的方法。不同的配对法要求不同的计算时间。
问题是确定一个把n个已分类文件归并在一起的最优方法(即需要最少比较的方法)
像刚才所描述的归并模式称为二路归并模式(每一个归并步包含两个文件的归并)。二路归并模式可以用二元归并树来表示。叶结点被画成方块形,表示已知的文件。这些叶结点称为外部结点。剩下的结点被画成圆圈,称为内部结点。每个内部结点恰好有两个儿子,表示把它的两个儿子所表示的文件归并而得到的文件。每个结点中的数字都是那个结点所表示的文件的长度(记录数)。一个i级结点在距离根为i-1的地方,在i级结点上的文件的记录都要移动i-1次。如果di是由根到代表文件Fi的外部结点的距离,qi是Fi的长度,则这颗二元归并树的记录移动总量是 。这个和数叫做这颗树的带权外部路径长度。一个最优二路归并模式与一颗具有最小权外部路径的二元树相对应。
生成归并树的贪心方法也适用于K路归并的情况。相应的归并树是一颗K元树。所有的内部结点的度数必须为K,所以对于n的某些值,就不与K元归并树相对应。例如:当K=3时,就不存在具有n=2个外部结点的K元归并树。所以有必要引进一定量的“虚”外部结点。每一个虚外部结点被赋以0值的qi。这个虚值不会影响所产生的K元树的带权外部路径长度。
问题分析
算法思路分析
问题简述为:“确定一个把n个已分类文件归并在一起的最优方法”
即:最优K路归并模式问题,也就是如何构建一棵具有最短带权外部路径的K叉树
而为了构造具有最短带权外部路径的树,感性的、直观的想法是将复杂的(即文件Fi的长度qi长的) 置于上层,简单的置于下层;
即,先解决K元短文件之间的归并,再考虑剩下的以及已经归并了的文件中的K元“简单文件”的归并。
这个思路,以及构造具有最短带权外部路径的树,毫不意外想到使用哈夫曼算法来构建哈夫曼树
所以问题可以等价替换为:
用所给的n个文件(Fi)的长度值(qi)来构建K叉哈夫曼树,从而得到最优值(最少比较次数)和最优解(K路归并的分配策略)
证明:K叉哈夫曼树是最优树
设:T(n) 为带权节点 q 1 ⩽ q 2 ⩽ … ⩽ q n − 1 ⩽ q n ( n > 2 ) \ q_1 \leqslant q_2 \leqslant … \leqslant q_{n-1} \leqslant q_n(n > 2) q1⩽q2⩽…⩽qn−1⩽qn(n>2)的最优树的带权外部路径长度。
证明 哈夫曼树是最优树 等价于:
证明:
{ Q 1 : 带 权 q 1 , q 2 , … , q K 为 兄 弟 节 点 Q 2 : 最 优 树 收 缩 与 展 开 同 为 最 优 树 Q 3 : 最 优 树 的 合 并 仍 为 最 优 树 \begin{cases} \mathbf{Q_1}:带权q_1,q_2,…,q_K为兄弟节点 \\ \mathbf{Q_2}:最优树收缩与展开同为最优树 \\ \mathbf{Q_3}:最优树的合并仍为最优树 \end{cases} ⎩⎪⎨⎪⎧Q1:带权q1,q2,…,qK为兄弟节点Q2:最优树收缩与展开同为最优树Q3:最优树的合并仍为最优树
证明 Q 1 : 带 权 q 1 , q 2 , … , q K 为 兄 弟 节 点 \mathbf{Q_1}:带权q_1,q_2,…,q_K为兄弟节点 Q1:带权q1,q2,…,qK为兄弟节点
1、设: N o d e m a x Node_{max} Nodemax为最优树中通路长度最长的内节点,则其一定有K个叶子节点。
由于K叉哈夫曼算法的性质决定,内节点一定包含K个叶子节点。
2、设: N o d e m a x Node_{max} Nodemax为最优树中通路长度最长的内节点,则其K个叶子节点的权一定为 q 1 , q 2 , … , q K q_1,q_2,…,q_K q1,q2,…,qK
若 L x L_x Lx为 N o d e m a x Node_{max} Nodemax的一叶子节点,但是其权重 q x ∉ { q 1 , q 2 , … , q K } q_x\notin\{q_1,q_2,…,q_K\} qx∈/{
q1,q2,…,qK}
L y L_y Ly

2270

被折叠的 条评论
为什么被折叠?



