algorithm - 给树上色,使得随时间乘以的权重最小

标签 algorithm binary-tree

给定一棵二叉树,有 n 个节点,每个节点的权重为 wi(i 表示第 i 个节点的权重),我们必须为树的每个节点着色。为节点着色的成本等于节点的权重乘以它被着色的时间。时间从 1 开始,并随着您继续为节点着色而递增 1。在着色时, parent 必须在 child 之前着色。计算为整棵树着色的最小成本?

最佳答案

在研究文献中,此问题是在单台机器上安排具有优先权的作业,以最小化总加权完成时间。由于 Lawler,有一个用于串并联优先级的 O(n log n) 算法。让我在树的特殊情况下总结一下。

如果不要求 parent 排在 child 之前,那么我们希望按重量不增加的顺序着色。 Lawler 的过程是自下而上的,将节点组合成我称之为复合节点的东西。每个节点 x 的输出是一组复合节点,它们 (1) 包含 x 的每个后代恰好一次 (2) 可以按权重的非递减顺序着色(其中复合节点的权重是其权重的平均)组成节点)而不违反父子顺序约束。

在后序的每个节点 x 处,首先合并 x 的子节点的集合。当合并集中存在一个至少与 x 一样重的复合节点时,弹出该节点并将 x 替换为由 x 和该节点组成的复合节点。为了提高效率,将集合表示为可合并的优先级队列(例如,配对堆)。

最后,对复合节点进行排序,并将它们展平成一个列表。

关于algorithm - 给树上色,使得随时间乘以的权重最小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54684320/

相关文章:

c - 判断树是否为二叉搜索树 (BST) 的递归函数(修改后的代码)

java - 二叉搜索树差异键之和

r - 将数据分成两个独立的组 s.t.最小化具有一个连续预测变量的残差平方和

algorithm - 对列表的两个列表设置操作

c# - 从数独解决方案中删除单元格使其成为一个谜题

algorithm - 不构造二叉树的后序Inorder到Preorder的转换

algorithm - 用于并行处理的分区二叉树的 "m-bridge technique"是什么?

arrays - 计数排序是否到位且稳定?

algorithm - 缓存友好的离线随机读取

c++ - 为什么我不能在 C++ 的三元条件语句中使用 "break"语句?