【问题标题】:Find the maximum distance for all nodes in a tree in linear time在线性时间内找到树中所有节点的最大距离
【发布时间】:2016-11-22 05:46:18
【问题描述】:

将节点的最大距离定义为距离的最大值 在该节点和树中的所有其他节点之间。我的问题是查找并打印树中所有节点的最大距离(不一定是二进制或任何东西)。基本上,对于每个节点,我需要打印出该节点在我们正在查看的节点与树中的任何其他节点之间的最大距离。运行时间预计为 O(n)。

我最好的方法都需要 O(N^2) 时间,我不确定还有什么地方可以解决这个问题。我目前在树中的每个节点上运行 BFS 以找到树中每个节点的最大距离,但我认为更好的方法可能是使用某种形式的动态编程。不过我不确定。

提前感谢您的帮助。

【问题讨论】:

标签: c++ algorithm tree graph-theory breadth-first-search


【解决方案1】:

让我们选择一个任意节点作为根。现在我们有了一个有根的树。

在子树中找到最远的节点很简单:它只是最高的叶子(子树中最远节点的子树动态规划可以工作)。

但如果它不在子树中怎么办?它不可能发生在根上,所以我们有答案。假设我们想去它的孩子。我们需要考虑根的所有孩子的子树中最远的叶子,除了这个。在最坏的情况下,天真地遍历所有孩子会给出 n^2 时间复杂度。但是我们可以通过存储两个最好的孩子来找到除固定孩子之外的最优孩子。我们可以对任何其他节点做同样的事情,所以它在线性时间内工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多