给定每个边都有相关成本的树的根。查找访问树的每个节点的最低成本。查找访问树的所有节点的最小开销
是来到我的脑海递归的解决方案是:当节点是节点递归地计算成本的每一个孩子℃的叶返回0
- 基本情况。
- 合计所有这些成本,并且还将两次从节点到小孩的边缘成本加起来(因为我们需要回溯)。
- 减去成本最高的孩子的边缘成本(“贪婪” - 我们不想从成本最高的孩子回溯)。
该方法是否正确?
有没有更好的方法来解决问题?
给定每个边都有相关成本的树的根。查找访问树的每个节点的最低成本。查找访问树的所有节点的最小开销
是来到我的脑海递归的解决方案是:当节点是节点递归地计算成本的每一个孩子℃的叶返回0
该方法是否正确?
有没有更好的方法来解决问题?
edges * 2
属于该子树。答案应该是:
sum(cost(edge)*2) - sum(edge which in the path)
我检查你的解决方案,我认为这是错误的(如果我误解你的解决方案,请留言):
减(“贪婪” - 我们不希望从儿童回溯,成本最高)。
那孩子会是树,有些边缘必须访问两次。例如:
A
/\
B C
/\
D E
您无法访问该子树的所有边一次访问所有节点。
1-除最后一个叶节点外,所有节点路径都将被访问两次。
2-我们将需要找出哪个叶节点具有最高的成本附加访问根节点。
3-一旦我们发现这一点,我们将需要使我们的遍历,使这个叶节点是最后访问的节点。
_first_访问的节点也是可能的叶子;如果树是折线图,最佳解决方案将被唯一确定(即所有边)。第一个和最后一个访问节点都将是一片叶子。 – Codor
我发现问题描述有点混乱; “访问”究竟如何?显然,所提出的算法计算两次所有边权重的总和。 – Codor
这不就是[最小权重生成树](https://en.wikipedia.org/wiki/Minimum_spanning_tree)的含义。在这个页面上定义了算法,你可以通过这些。 – harindersingh
@harindersingh我不必找到最小权重生成树。 –