【问题标题】:Choosing a root of a tree so that the tree height is minimum [duplicate]选择树的根以使树的高度最小[重复]
【发布时间】:2015-12-16 18:26:02
【问题描述】:

在我试图解决的算法问题中 - 我处于一种情况,我得到了一棵树,我需要选择一个节点作为树高最小的根。

有 200,000 个节点和 150,000 条边。由于时间限制,我需要一个比O(n^2)更好的算法。

我可以使用什么算法?

【问题讨论】:

  • 所以,你要找的东西叫做树的中心,已经讨论过here
  • @PhamTrung:很好。谢谢你。我不知道树的中心一词。您为什么不将其发布为答案,以便我可以选择它作为最佳答案?

标签: algorithm graph tree


【解决方案1】:

我认为树的中心应该是作为树根的所需节点,因为如果根是树的中心,那么从根到任何节点的最大距离都是最小的。

【讨论】:

    【解决方案2】:

    选择任何节点并假设它是根。运行 DFS 以查找到最远叶子的距离。如果您选择第一个节点作为根,这将基本上计算树的高度。

    接下来,您通过找到树的中心来找到正确的根。为此,您查看当前根的子节点并选择高度最大的子节点(与最远叶子的距离最大)。如果您将根移动到该子节点,则新高度将是您在该节点中已有的值与 1 + 当前根的其他叶子的下一个最大值之间的最小值。你应用这个,移动根直到你不能再降低高度。这是树的一个中心(可能更多),也是您正在寻找的解决方案。

    初始 DFS 为 O(N)。在优化距离时,您不能两次访问一个节点,并且每一步都是 O(1) 摊销的,所以总体而言它是 O(N)。 O(1) 摊销,因为一个节点可以有很多孩子,但你只考虑一次(移动后你不能回去,所以你不能再次检查它们)所以即使你检查整个树你也会检查总共 O(N) 个孩子。

    【讨论】:

      猜你喜欢
      • 2020-09-16
      • 2014-12-09
      • 1970-01-01
      • 2022-11-15
      • 2011-02-18
      • 1970-01-01
      • 2021-09-07
      • 2018-02-28
      • 1970-01-01
      相关资源
      最近更新 更多