从每个节点有效地找到图形的深度

时间:2013-08-20 07:39:33

标签: algorithm graph graph-algorithm

我有一个问题,我要找到图表的最小可能深度,这意味着我必须找到每个节点的最大深度,并返回所有节点中的最小深度。显然,每个节点的简单DFS都可以解决这个问题,但是当输入非常大的时候事情变得疯狂时,DFS会变得效率低下(时间限制)。我尝试将每个叶子的距离保持在内存中探索的节点,但这没有多大帮助。

如何有效地找到非常大的图形的最小深度。值得注意的是,有问题的图表无周期

2 个答案:

答案 0 :(得分:9)

要找到无向树形图的图形中心/中心,您可以:

  1. 执行DFS以查找所有叶节点O(n)
  2. 的列表
  3. 从图中删除所有这些叶节点,并在删除期间注意哪些新节点成为叶节点
  4. 重复步骤2,直到完全删除图表
  5. 在算法的最后阶段删除的节点/节点将是树的图形中心。

    每个节点都被删除一次,因此整个过程可以在O(n)中完成。

答案 1 :(得分:0)

你似乎要寻找的是直径 / 2.你可以计算一个树的直径,如下所示,并将其称为findDiameter(n, null),用于任意节点{{1这棵树。

n

你需要做的就是在邻居的循环中跟踪最大直径和2个最大深度。