k 叉 Huffman 树问题

k叉Huffman树问题?

描述:给 n 个节点和函数 \(w(i)\), 要求给这 n 个节点赋一个树结构, 可以新建节点, 使得这原来的 n 个节点都是新树的叶节点, 每个叶节点 \(i\) 的贡献是这个节点的深度乘以 \(w(i)\),要求总贡献最小, 求出这个最小值和树的结构。k叉是指一个节点最多有 k 个儿子。

解法:显然要让 \(w\) 值较小的深度更大, 所以每次贪心合并最小的 \(k\) 个节点, 值和结构就清晰可见了。有一个问题就是这样可能会使根节点的儿子不满 k 个,这样显然是不优的, 所以要增加几个无穷小点, 让儿子不满的情况出现在最深层。具体要怎么样呢?每次合并要减少 k 个点, 增加 1 个点, 相当于减少 k 个点,在没有儿子不满的情况下,点的数量 \(n\) 应满足 \((k-1)\mid (n-1)\) , 具体要增加的点数就清晰可见了。

posted @ 2020-12-11 17:06  xwmwr  阅读(158)  评论(0编辑  收藏  举报