我试着解决一个关于最大流量问题的问题。我有一个源和两个汇。我需要在这个网络中找到一个最大流量。这部分是一般最大流量。然而,在这种特殊的最大流问题中,两个目标必须得到相同的流量。
有没有人能帮助我,我该怎么做呢?
让S
作为源顶点,T1
和T2
作为两个汇点。
您可以使用以下算法:
>
使用具有两个接收器的正则最大流,例如通过具有无限容量的边将T1
和T2
连接到超接收器。您现在有了最大超额(t1)+超额(t2)
的解决方案,但它可能不平衡。
如果超额(t1)==超额(t2)
,您就完成了。否则为W.L.O.G.让超额(t1)>超额(t2)
在步骤1的剩余网络中使用源T1
和宿T2
运行另一轮max-flow。限制从t1
流出到C=楼层((experient(t1)-experient(t2))/2)
的流,例如,通过具有给定容量C
的边引入连接到t1
的超级源S
。现在,超额(t2)
是您可以发送到两个接收器的最大流量。
如果需要重新构造每个边的流值,请执行另一轮max-flow以将超额(t1)-excore(t2)
流的剩余单位传输回源。
复杂度是你的最大流算法的复杂度。
如果您已经知道如何求解具有下限容量的最大流,您还可以对该解进行二分搜索,从而得到复杂度O(log W*f)
,其中W
是解的值,f
是最大流复杂度。
用餐问题: 几家人一起出去吃饭。为了增加他们的社会交往,他们愿意坐在桌子上,这样同一家庭的两个成员就不会在同一张桌子上。假设晚餐特遣队有家庭,而家庭有成员。另外,假设有桌可用,并且第1桌的座位容量为。 问题是:我们可以坐在桌子上的最多人数是多少? 编辑:创建一个图并运行最大流算法可以解决这个问题。但如果我们用Dinic算法有2*10^3个顶点,则全局复杂度为O(10^6*10^6)=O(10^12
如何确定流中对象的不同属性的最小值和最大值?我已经看到了关于如何得到同一变量的最小值和最大值的答案。我还看到了关于如何使用特定对象属性(例如)获取最小值或最大值的答案。但是我如何获得流中所有“x”属性的最小值和所有“y”属性的最大值呢? 假设我有一个Java
我想用最大流算法(Edmond Karp/Ford-Fulkerson算法)找到一个无向图的边连通性(即为了断开一个图而要去除的最小边数), 我知道我可以通过找到图的每两个节点之间的最小最大流来完成这个任务,但这将导致O(V^2)个流网络, 但我希望使用V个流网络(只运行O(V)次max flow算法)而不是O(V^2)个
主要内容:Min-Max算法的工作人工智能中的最小最大算法: Mini-max算法是一种递归或回溯算法,用于决策和博弈论。它为玩家提供了一个最佳的动作,假设对手也在玩最佳状态。 Mini-Max算法使用递归来搜索游戏树。 Min-Max算法主要用于AI中的游戏。如Chess,Checkers,tic-tac-toe,go和各种拖车玩家游戏。该算法计算当前状态的最小极大决策。 在该算法中,两个玩家玩游戏,一个叫做MAX,另一个叫做M
我偶然发现了这个问题上的CodurityLessons,这里是描述: 给出了一个由N个整数组成的非空零索引数组A。 一个三元组(X,Y,Z),使得≤ 十、 双切片(X,Y,Z)的和是A[x1]A[x2]的总和。。。A[Y]− 1] A[Y 1]A[Y 2]。。。A[Z]− 1]. 例如,数组A使得: 包含以下双切片示例: 双层(0,3,6),总和为2 6 4 5 = 17, 双层(0,3,7),和
参考资料: http://blog.csdn.net/zouxy09/article/details/8537620 http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html 我的数据挖掘算法代码实现: https://github.com/linyiqun/DataMiningAlgorithm 介绍 em算法是一种迭代算法