线性时间构建极小极大树及其应用
一、极小极大树简介
极小极大树与霍夫曼树类似,但它的目标不是最小化叶子节点深度的加权平均值,而是最小化任意叶子节点的权重与其深度之和的最大值。在一个包含权重集合 $W = {w_1, \ldots, w_n}$ 的极小极大树中,每个叶子节点有一个权重 $w_i$,每个内部节点的权重等于其孩子节点权重的最大值加 1,并且根节点的权重尽可能小。也就是说,如果 $\ell_i$ 是权重为 $w_i$ 的叶子节点的深度,那么 $\max_i{w_i + \ell_i}$ 被最小化。
之前已经有一些构建极小极大树的算法。Golumbic 在 1976 年引入了极小极大树,并给出了一个类似霍夫曼算法的 $O(n \log n)$ 时间复杂度的算法来构建它们。Drmota 和 Szpankowski 在 2002 年给出了另一个 $O(n \log n)$ 时间复杂度的算法,当权重已经按其小数部分排序时,该算法可以在线性时间内运行。本文将给出第一个针对未排序实权重构建极小极大树的线性时间算法。
二、整数权重的极小极大树构建算法
对于整数权重的极小极大树构建,给出了两个 $O(n)$ 时间复杂度的算法,这两个算法都基于以下引理和推论。
引理 1 :如果 $W = {w_1, \ldots, w_n}$ 是一个权重集合,且 $W’ = {\max{w_1, \max_i{w_i} - n + 1}, \ldots, \max{w_n, \max_i{w_i} - n + 1}}$,那么 $M(W’) = M(W)$。此外,当我们将 $W’$ 的极小极大树中权重等于 $\max_i{w_
超级会员免费看
订阅专栏 解锁全文
15

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



