- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
设(g,s,t,{c})为流网络,并设F为所有边E的集合,其中存在至少一个最小割(A,B),使得E从A到B。给出一个多项式时间算法,该算法找到F.中的所有边。
注:到目前为止,我知道我需要运行福特富尔克森,使每个边缘有一个流动此外,我知道对于f中的所有边,流f(e)=c(e)。然而,并非图g中与约束相关的所有边都在最小割集中。我被困在这里了。
最佳答案
假设您已经计算了一个图的最大流,并且您知道通过图中每个边的流。从源顶点G
,对原始图执行广度优先搜索或深度优先搜索,并仅遍历流小于边容量的边。将此遍历中可到达的顶点集表示为s
,将不可到达的顶点表示为S
。
为了获得最小割集,我们只需在原始图中找到从T
中某个顶点开始到C
中某个顶点结束的所有边。
This tutorial在topcoder中提供了上述算法的解释/证明。请看以下文本开头的部分:
流网络中的一个割只是两组顶点的划分,我们称它们为A和B,这样源顶点在A中,汇在B中。
我将尝试在Topcoder教程中提供相应部分的解释(只是让我也复习一下)。
现在,假设我们已经计算了一个图的最大流,并且我们已经使用上述过程计算了边集从这里,我们可以得出几个事实。
事实1:源顶点G
必须在setS
中,而汇顶点T
必须在setG
中。
否则,顶点C
和s
必须在同一集合中,这意味着我们必须找到一条从S
到t
的路径,该路径仅由流动小于容量的边组成。这意味着我们可以将更多的流从T
推到s
,因此我们找到了一条增强路径!然而,这是一个矛盾,因为我们已经计算了图上的最大流因此,源顶点t
和汇顶点s
是不可能连接的,它们必须在不同的集合中。
事实2:从集合t
开始到集合s
结束的每个边都必须具有flow==容量
我们再次用矛盾来证明这一点假设t
中有一个顶点s
和t
中有一个顶点S
,使得剩余网络中的边T
的流量小于容量通过上面的算法,该边将被遍历,顶点u
应该在集合S
中。这是一个矛盾因此,这样的边必须具有flow==容量。
事实3:从图中删除v
中的边意味着没有从集合T
中的任何顶点到集合(u,v)
中的任何顶点的路径。
假设情况并非如此,并且有一些边v
将setS
中的vertexC
连接到setG
中的vertexS
。我们可以将其分为两种情况:
通过边缘的流量T
小于其容量。但我们知道这会导致顶点(u,v)
成为集合u
的一部分,所以这种情况是不可能的。
通过边缘的流量S
等于其容量。这是不可能的,因为edgev
将被视为edge setT
的一部分。
因此,这两种情况都是不可能的,我们看到从原始图中删除(u,v)
中的边确实会导致从v
到S
没有路径的情况。
事实4:原始图中从顶点集(u,v)
开始到顶点集(u,v)
结束的每一条边都必须有C
的流。
关于Topcoder教程的解释在第一次阅读时可能不明显,以下是我的一个有根据的猜测,可能是不正确的。
假设存在某种边缘C
(其中G
属于顶点集S
和T
属于顶点集G
),使得流过T
大于0。为了方便起见,我们将流经S
的流量表示为0
。这意味着在剩余网络上,必须存在向后边缘(x,y)
容量x
和流T
。由于顶点y
是集S
的一部分,因此后边具有流(x,y)
和容量(x,y)
,我们的算法将遍历边f
,并将顶点(y,x)
作为顶点集f
的一部分放置。然而,我们知道顶点0
是顶点集y
的一部分,因此这是一个矛盾。因此,从S
到(y,x)
的所有边的流必须为0。
根据这4个事实以及Max-flow min-cut theorem,我们可以得出结论:
最大流量必须小于或等于任何切削的容量。事实3,0
是图的一个割集,所以最大流必须小于或等于割集的容量。
事实4允许我们得出结论,没有从f > 0
到(y,x)
的“回流”。这与事实2一起意味着流完全由从x
到S
的“正向流”组成尤其是,所有的正向流动都必须是由切割x
引起的。这个流量值恰好是最大流量。因此,根据最大流最小割定理,我们知道T
必须是最小割。
关于algorithm - 在最小切割中找到所有边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21471043/
我有一串数字。我需要检查边缘上的数字是否对称,这意味着它们以 2 为模时具有相同的余数。 我已经编写了一个有效的代码,但我对此感到不安,在一些失败之后我想出了这个代码: int PaliPair(ch
我要删除黑色蒙版和人体图像之间的白色边框 图像输入示例: 厚度为1的图像输出: 厚度为2的图像输出: 我尝试了一些在这里找到的具有模糊和阈值的游戏 我还使用此代码查找和绘制轮廓 thickne
这应该是一个在用户悬停时打开的飞出菜单。 这在 Chrome 中工作得很好,我已经尝试了多种方法(使用 CSS :hover,(mousenter)和(mouseleave ) 问题是 - 使用 Ed
我有一个 Apache 服务器 v2.4.43 为我的网站提供服务,我使用一个简单的 .htpasswd,我使用指令“AuthUserFile ”在 .htaccess 中调用它来进行身份验证。 现在
如何仅使用剪辑路径创建波浪边缘? 波浪应该是这样的图像: 最佳答案 您应该通过波函数及其频率生成此剪辑路径。 我用过 cos()在 PHP 中。您可以找到如下链接: https://repl.it/@
我有这张图: digraph G { 1 [label="car"]; 2 [label="x"]; 3 [label="car"]; 4 [label="y"]; 5 [label="cdr"];
我想强制点仅显示节点之间的垂直或水平边缘。 我在帖子 Family tree layout with Dot/GraphViz 中发现了类似的请求,但我不处理树,所以我希望有一个解决方案,无需插入额外
我已经设法让两个直方图重叠,但如果你仔细观察,条形开始倾斜并且没有完全重叠。 我已经调整了线宽和宽度,并没有改善。 我的目标是让所有的条形排列在彼此的顶部,黑边没有歪斜。 有什么办法解决这个问题 这是
我已经设法让两个直方图重叠,但如果你仔细观察,条形开始倾斜并且没有完全重叠。 我已经调整了线宽和宽度,并没有改善。 我的目标是让所有的条形排列在彼此的顶部,黑边没有歪斜。 有什么办法解决这个问题 这是
我一直在与 latex table 搏斗太久了。我需要一个具有居中标题的表格,以及包含可能环绕的文本的正文单元格。由于环绕要求,我使用 p{xxx} 而不是 l 来指定单元格宽度。这导致的问题是单元格
有没有办法平滑转换(平移和旋转)的 BufferedImage 的锯齿状边缘? 测试图像的放大 View : (请注意,这不是将要使用的实际 BufferedImage,仅用于此处演示)。 已使用双线
我在 my page 有一个旋转木马.我的父元素和子元素的边缘都是 flex 的,但是当您按“下一个”或“上一个”并滑动旋转木马时,子元素在移动时不会保持 flex 。我怎样才能避免这种情况? .ho
我在 .boxwrap 和 .lsmlbox + .rsmlbox 之间的嵌套 div 中添加了不必要的空格,这使得无法将 .smlbox + .rsmlbox 与 .box 对齐我相信这是一个比预期
我正在使用 Apple 的 ARKit 制作 AR 应用程序,我想制作盒子的线框轮廓。代码中描述并显示在图片中的那个在盒子的每个面上绘制斜边。它还隐藏了盒子另一侧的角。 Scene Kit 中有没有办
下图仅包含阈值处理后的黑色和白色像素。我在此图像的顶部绘制了一个灰色的旋转矩形。现在我想计算这个旋转矩形内的黑色像素数,但不包括白色矩形矩形外的黑色像素(即白色矩形内的像素数)。 做到这一点的最佳方法
你们如何处理边际 CSS?我所说的边缘是指需要斜体或粗体的单个单词或短语。只用 声明一个“大胆”的类似乎很愚蠢 Bold { font-weight: bold; } 或者斜体,要么! Italic
好的。我知道有几十个类似的线程。我几乎检查了每一个,但找不到可行的解决方案。我试过负边距、最小高度、最大高度、绝对页脚、正文背景颜色,甚至将溢出:隐藏到页面中的所有主要容器。然后将 clearfix
我网站的一部分使用代码使用倾斜边缘: -webkit-clip-path: 多边形(0% 0%, 100% 0%, 81% 100%, 0% 100%) 这在 Chrome 中运行良好,但不适用于任何
我一直在创建这个网站,并且进展顺利。然后我试着给它添加一个模态,但一切都有点走下坡路。问题是在添加模式后,Chrome 中的图像对齐方式发生了变化。它在 Edge 中运行良好。现在我知道这可能是因为
如果我在 Matlab 中使用 image() 命令制作一个 4 x 4 像素的图像,它会将刻度线居中放置在像素的中间。我希望刻度线以像素的左下角为中心。有什么方法可以做到这一点吗? 最佳答案 您可以
我是一名优秀的程序员,十分优秀!