Algorithm 查找访问树的所有节点的最低成本

Algorithm 查找访问树的所有节点的最低成本,algorithm,tree,graph-theory,greedy,Algorithm,Tree,Graph Theory,Greedy,给定树的根,其中每条边都有相关的代价。找到访问树的每个节点的最小成本 我想到的递归解决方案是: 节点为叶返回0时的基本情况 对于节点的每个子节点c,递归地计算代价 将所有这些成本加起来,并将边缘成本从节点到子节点再加上两次(因为我们需要回溯) 减去具有最大成本的子级的边缘成本。(“贪婪”-我们不想从具有最大成本的子级回溯) 这种方法正确吗 有没有更好的办法来解决这个问题 从一个节点访问所有子树并返回到该节点,它将消耗属于该子树的所有边*2 因此,我们应该在树中找到一条路径,该路径的代价是最大的。

给定树的根,其中每条边都有相关的代价。找到访问树的每个节点的最小成本

我想到的递归解决方案是:

  • 节点为叶返回0时的基本情况
  • 对于节点的每个子节点c,递归地计算代价
  • 将所有这些成本加起来,并将边缘成本从节点到子节点再加上两次(因为我们需要回溯)
  • 减去具有最大成本的子级的边缘成本。(“贪婪”-我们不想从具有最大成本的子级回溯)
  • 这种方法正确吗

    有没有更好的办法来解决这个问题

  • 从一个节点访问所有子树并返回到该节点,它将消耗属于该子树的所有
    边*2
  • 因此,我们应该在树中找到一条路径,该路径的代价是最大的。我们只是通过路径,如果我们遇到一些不在路径中的节点,我们就访问它并返回。 因此,路径中的边将只访问一次,其余边将访问两次
  • 如何找到成本最大的路径?因为它是一棵树,所以可以递归地找到它
  • 答案应该是:

    sum(cost(edge)*2) - sum(edge which in the path)
    

    我检查了您的解决方案,我认为它是错误的(如果我误解了您的解决方案,请留下评论):

    减去具有最大成本的子项的边缘成本。(“贪婪”-我们不希望从具有最大成本的子项中回溯)

    那个孩子将是一棵树,有些边缘必须访问两次。例如:

        A
       / \
      B   C
     / \
    D   E
    

    您不能一次访问该子树的所有边以访问所有节点。

    1-除最后一个叶节点外,所有节点路径将访问两次

    2-我们需要找出哪个叶节点访问根节点的附加成本最高


    3-一旦我们发现了这个问题,我们就需要进行遍历,使这个叶节点成为最后访问的节点。

    我发现问题描述有点混乱;“拜访”到底是什么样的?显然,所提出的算法计算所有边权重之和的两倍。这不是什么意思吗。本页定义了一些算法,您可以浏览这些算法。@harindersingh我不必找到最小权重生成树。也有可能第一次访问的节点也是一个叶子;如果树是线图,则最优解将唯一确定(即所有边);第一个和最后一个访问的节点都是叶子。