Algorithm 查找不同类型的连接组件

Algorithm 查找不同类型的连接组件,algorithm,Algorithm,我想将有向图中的单连通组件定义为子图,其中对于每对节点u和v,存在从u到v或从v到u的路径。它还应该具有这样的属性:它不是另一个单连通组件的子图 我知道如何找到弱连接和强连接的组件。如何找到uni连接的组件 一个非常低效的方法可能会从每个节点进行广度搜索,以查看哪些节点可以从中访问,并尝试以某种方式从这些节点集计算组件。一个最大单连通子图(我拒绝称它们为“组件”,因为基础关系是不可传递的)包含所有强连接组件或不包含强连接组件。作为枚举最大单连通子图的第一步,然后将每个SCC折叠到单个顶点(即,计

我想将有向图中的单连通组件定义为子图,其中对于每对节点u和v,存在从u到v或从v到u的路径。它还应该具有这样的属性:它不是另一个单连通组件的子图

我知道如何找到弱连接和强连接的组件。如何找到uni连接的组件


一个非常低效的方法可能会从每个节点进行广度搜索,以查看哪些节点可以从中访问,并尝试以某种方式从这些节点集计算组件。

一个最大单连通子图(我拒绝称它们为“组件”,因为基础关系是不可传递的)包含所有强连接组件或不包含强连接组件。作为枚举最大单连通子图的第一步,然后将每个SCC折叠到单个顶点(即,计算输入图的压缩)

无环有向图的单连通子图具有这样的性质:对于不同的节点u和v,要么存在从u到v的路径,要么存在从v到u的路径,但不是两者都存在。如果存在从u到v和u的路径,则写入u 这里有一个枚举有向图G的最大单连通子图的算法

  • 找到G的强组分。收缩它们,产生凝结G'
  • 计算G'的传递约简G'
  • 通过深度优先搜索等方式枚举所有源-汇路径,然后用g中的强组件替换每个节点
  • 这是一个图族,它具有指数级多个最大单连通子图。所有边都向下

      *
     / \
    *   *
     \ /
      *
     / \
    *   *
     \ /
      *
     / \
      .
      .
      .
     \ /
      *
     / \
    *   *
     \ /
      *
    

    构造一个无向图G,该图与原始图具有相同的节点集,并且每对节点之间有一条边,该边在原始图的任意方向上由一条边连接

    通过广度优先搜索找到G的连通分量。循环遍历节点,但仅在不属于以前找到的任何组件的节点上启动新搜索。见()

    每个组件的节点也构成原始有向图的单连通组件的节点

    =============================================================

    我现在了解到,在无向图的子集中,每个节点都必须有一个到其他节点的边到边,因此需要的是G中的a,而不是G的连通子图。不幸的是,问题的决策形式是NP完全的,函数形式是NP难的


    请参阅以获得一些查找该集团的免费选项。

    这是您的定义:“存在从u到v或从v到u的路径”-但不存在从v到u和从u到v的路径???我想说这是对@fall的调用,因为图形是定向的,我不要求在两个方向上都有路径。可能有,但不是必需的。您的意思是“对于子图中的每一对节点u和v”?不“单连通”的连通子图的示例是什么?所有单连通图都是弱连通的,但可能不是强连通的。例如,具有两个节点A->B的简单图是单连通的,但不是强连通的。图A->B很遗憾给出了错误的答案。考虑A- >B@phoenix. 我懂了。我被连通子图的概念弄糊涂了。你实际上是在找一个小集团。这意味着你的问题是NP完全问题。我会相应地修改我的答案。我认为这不对。请看另一个答案,它有一个多时间解。@phoenix如果我现在理解了你的问题,最大团,一个基于无向图的经典NP完全问题,可以通过构造一个有向图来简化为你的问题,该有向图在原始图的每个无向边上都有一条任意方向的边。最大组将包含与您的一个组件相同的节点。谢谢。所以我明白了,第二步在实践中需要立方时间?步骤3的最坏情况复杂度是多少?@phoenix-Exponential,但这只是因为可以有很多单连通子图(请参阅我编辑的答案以获取示例)。对于任何图,覆盖每个节点的最大单连通子图的最小数目始终是线性的。如果能够输出这样一个最小覆盖,那将是很有帮助的。这就是我的想法。在你的算法中,第二步的多边形时间是多少?是的,有线性大小的覆盖。在步骤3中,不是查找所有路径,而是查找其并集包含所有顶点的最小大小的路径集,即a。我认为总体运行时间主要由立方时间传递缩减决定。如果单连通子图的最大化对您来说并不重要,除非是为了最小化所使用的子图的数量,那么您可以省略传递约简,并且运行时间将由查找封面(看起来像是Hopcroft--Karp的一次调用)来决定。这看起来非常好。非常感谢。现在要是有人能投票支持你的答案就好了!