【问题标题】:Algorithm: for G = (V,E), how to determine if the set of edges(e belong to E) is a valid cut set of a graph算法:对于G = (V,E),如何判断边集(e属于E)是否是图的有效割集
【发布时间】:2011-04-24 02:41:20
【问题描述】:

给定图 G = (V,E) 的边子集,我们如何检查它是否是图的有效割集? 注意:割是将图的顶点划分为两个不相交的子集。因此,割的割集是其端点在分区的不同子集中的边的集合。 我有兴趣找到解决这个问题的算法

【问题讨论】:

    标签: algorithm graph theory


    【解决方案1】:

    一个简单的算法是从图中删除可疑的切割边,看看您是否仍然可以从已删除边的节点到它的对应节点。如果你仍然可以,这不是一个完整的削减。因此,如果您删除具有节点 A 和 D 的 E2,您可以使用 A 的广度优先搜索,看看您是否到达 D。它应该在空间需求和复杂性方面是线性的,因为我们存储了我们访问过的所有节点,所以我们不要回溯并访问任何节点两次。 这个 wiki 页面有一些不错的图片可能会有所帮助:http://en.wikipedia.org/wiki/Cut_%28graph_theory%29

    【讨论】:

    • @Josh 谢谢,有一个疑问,在正方形图中,我可以有一个大小为 3(3 个边)的割集吗?
    • 我不这么认为。这将需要两次切割相同的边缘。
    • @Josh 您提到的算法是否在上述尺寸 3 切割集中起作用,我认为它将作为有效切割集返回,因为 BFS 无法从边缘 E2 中的 D 到达 A .
    • @Justin:我想你是对的。您必须通过在图中实际绘制一条“线”来生成可疑的切边,而不是通过尝试随机子集。
    • @Josh :对不起,我应该和你讨论,原因是因为当我用你的算法来解决“在正方形图中,当我测试任何 3 条边的割集时,我得到了答案,因为这 3 个边是有效的切割集,但情况并非如此,例如,如果我想通过 bfs 遍历到对应节点,则在移除这 3 个边之后,我不能根据这表明它是有效的切割集算法”。
    【解决方案2】:

    如果在删除边子集后不再是连通图,则它是有效割集。

    如果您要求算法,您应该能够从任何节点开始,看看您是否可以通过深度优先搜索到达所有其他节点。如果是,则不是有效割集,如果不能,则为有效割集。

    【讨论】:

    • 割集的定义我认为与连通性无关,例如考虑V = {a,b,c}和E = {ab,bc,ca}的三角形图。如果边子集 S= {ab,bc} 被移除,那么我们得到的 ac 仍然是连接的,但 S 仍然是一个有效的割集,因为它将 G 划分为两个顶点子集 {b} 和 {a,c}
    • @Justin:实际上,这是不正确的。它不会将 G 划分为两个顶点子集。您可以通过 {ab}(仍在子集中)从 {b} 到 {a}。您也可以通过 {ac} 从 {b} 到 {c}。此外,look here 您会看到该定义确实涉及分割成不相交的子集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    相关资源
    最近更新 更多