资源描述:
《从一道题目的解法试谈网络流的构造与算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、从一道题目的解法试谈网络流的构造与算法福建师大附中江鹏1.引论A.对网络流算法的认识网络流算法是一种高效实用的算法,相对于其它图论算法来说,模型更加复杂,编程复杂度也更高,但是它综合了图论中的其它一些算法(如最短路径),因而适用范围也更广,经常能够很好地解决一些搜索与动态规划无法解决的,看似NP的问题。B.具体问题的应用网络流在具体问题中的应用,最具挑战性的部分是模型的构造。这没用现成的模式可以套用,需要对各种网络流的性质了如指掌(比如点有容量、容量有上下限、多重边等等),并且归纳总结一些经验,发挥我们的创造性。2.例题
2、分析【问题1】项目发展规划(Develop)Macrosoft®公司准备制定一份未来的发展规划。公司各部门提出的发展项目汇总成了一张规划表,该表包含了许多项目。对于每个项目,规划表中都给出了它所需的投资或预计的盈利。由于某些项目的实施必须依赖于其它项目的开发成果,所以如果要实施这个项目的话,它所依赖的项目也是必不可少的。现在请你担任Macrosoft®公司的总裁,从这些项目中挑选出一部分,使你的公司获得最大的净利润。l输入输入文件包括项目的数量N,每个项目的预算Ci和它所依赖的项目集合Pi。格式如下:第1行是N;接下来的
3、第i行每行表示第i个项目的信息。每行的第一个数是Ci,正数表示盈利,负数表示投资。剩下的数是项目i所依赖的项目的编号。每行相邻的两个数之间用一个或多个空格隔开。l输出第1行是公司的最大净利润。接着是获得最大净利润的项目选择方案。若有多个方案,则输出挑选项目最少的一个方案。每行一个数,表示选择的项目的编号,所有项目按从小到大的顺序输出。l数据限制0≤N≤1000-1000000≤Ci≤1000000l输入输出范例SampleInputSampleOutput6-4122-112-33534312346【分析解答】1.抽象原
4、题(图论模型)给定包含N个顶点的有向图G=(V,E),每个顶点代表一个项目,顶点有一权值Ci表示项目的预算。用有向边来表示项目间的依赖关系,从u指向v的有向边表示项目u依赖于项目v。问题:求顶点集的一个子集V’,满足对任意有向边〈u,v〉∈E,若u∈V’,则v∈V’,使得V’中所有顶点的权值之和最大。6421-15153-42-32.搜索枚举V的所有符合条件的子集,时间复杂度O(2n),指数级。无论如何剪枝优化,也摆脱不了非多项式。3.动态规划本题的结构是有向无环图,而非树形结构,不适合动态规划。如果一定要做,实质类似于
5、搜索,由于状态数量众多,仍是指数级的时间复杂度。4.网络流流网络的构造方法:建立N顶点代表N个项目,另外增加源s与汇t。若项目i必须依赖于项目j,则从顶点i向顶点j引一条容量为无穷大的弧。对于每个项目i,若它的预算C为正(盈利),则从源s向顶点i引一条容量为C的边;若它的预算C为负(投资),则从顶点i向汇t引一条容量为-C的边。求这个网络的最小割(S,T),设其容量C(S,T)=F。设R为所有盈利项目的预算之和(净利润上界),那么R-F就是最大净利润;S中的顶点就表示最优方案所选择的项目。51315264+∞+∞1st+
6、∞+∞3+∞+∞24最小割:S={s,1,2,3,4,6};T={5,t}C(S,T)=5净利润R-C(S,T)=8-5=3证明算法的正确性:l建立项目选择方案与流网络的割(S,T)的一一对应关系:任意一个项目选择方案都可以对应网络中的一个割(S,T),S={s}+{所有选择的项目},T=V-S。对于任意一个不满足依赖关系的项目选择方案,其对应的割有以下特点:存在一条容量为+∞弧〈u,v〉,u属于S而v属于T。这时割的容量是无穷大,显然不可能是网络的最小割。l对于任意一个割(S,T),如果其对应一个符合条件的方案,它的净
7、利润是R-C(S,T)。导致实际净利润小于上届R的原因有:1.未选取盈利项目i,即顶点i包含在T中,那么存在一条从源s至顶点i的容量为Ci的弧2.选取投资项目i,即顶点i包含在S中,那么存在一条从顶点i至汇的容量为-Ci的弧C(S,T)就是上述两种弧的容量之和。综上所述,割的容量越小,方案的净利润就越大。l最小割的求法:根据最大流最小割定理,网络的最小割可以通过最大流的方法求得。5,31,1315264+∞,0+∞,31,0st+∞,2+∞,03,0+∞,2+∞,02,24,4本题解题的关键在于流网络数学模型的建立。本题
8、建模的独到之处在于:以前的网络流问题通常使用流量表示解答方案,而本题使用割表示解答方案,并充分利用了割的性质,流只是求得最小割的手段。这为我们开辟了一条构造网络流解决问题的新思路。初看这个问题,要把它和网络流联系起来,有相当的难度。必须熟练地掌握流网络的各种性质,经过反复的类比尝试,才能发现它们之间的共性。【联想思考