给树上色,以使重量乘以时间最小化

时间:2019-02-14 06:22:11

标签: algorithm binary-tree

给定一个二叉树,其中有n个节点,每个节点的权重为wi(i表示第i个节点的权重),我们必须为树的每个节点着色。节点着色的成本等于节点的重量乘以节点着色的时间。时间从1开始,并随着您继续为节点着色而增加1。在强制着色时,父母必须在孩子之前着色。计算着色整棵树的最低成本?

2 个答案:

答案 0 :(得分:0)

在研究文献中,这个问题是在单台机器上优先安排作业,以最大程度地减少总加权完成时间。由于劳勒,有一个O(n log n)算法用于串并联优先级。在特殊情况下,让我总结一下。

如果不要求将父母安排在孩子之前,则我们希望按不增加体重的顺序上色。 Lawler的过程是自下而上的,将节点组合成我称之为复合节点的过程。每个节点x的输出是一组复合节点,其中(1)恰好包含x的每个后代(2)可以按权重的非降序进行着色(其中,复合节点的权重是其平均权重)组成节点)而不会违反父子排序约束。

在后顺序的每个节点x上,首先合并x的子级中的集合。尽管合并集中存在一个复合节点,其大小至少与x一样重,但弹出该节点并用x和该节点组成的复合节点替换x。为了提高效率,请将集合表示为可合并的优先级队列(例如,配对堆)。

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

答案 1 :(得分:0)

您可以做的是可以逐级遍历树。对整个级别进行排序,然后对每个节点进行着色,以使其总和最小。对每个级别重复此操作。

举例说明,如果您有以下树:

      4
     / \
    3   7
       / \
      1   9
     /
    2
  1. 获取第一级:4
  2. 按降序排列。并乘以time4*1。费用= 4。
  3. 检索第二级:3 7
  4. 按降序排列。并将每个节点乘以time7*2 + 3*3 = 23。费用= 4 + 23 = 27。
  5. 检索第3级:1 9
  6. 按降序排列。并将每个节点乘以time9*4+1*5 = 41。费用= 27 + 41 = 68。
  7. 检索第4级:2
  8. 按降序排列。并将每个节点乘以time2*6 = 12。费用= 68 + 12 = 80。

如何以级别顺序遍历二叉树。请参考:https://www.geeksforgeeks.org/level-order-tree-traversal/