从一道题目的解法试谈网络流的构造与算法.doc

从一道题目的解法试谈网络流的构造与算法.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
从一道题目的解法试谈网络流的构造与算法 福建师大附中 江鹏 1. 引论 A. 对网络流算法的认识 网络流算法是一种高效实用的算法,相对于其它图论算法来说,模型更加复杂,编程复杂度也更高,但是它综合了图论中的其它一些算法(如最短路径),因而适用范围也更广,经常能够很好地解决一些搜索与动态规划无法解决的,看似NP的问题。 B. 具体问题的应用 网络流在具体问题中的应用,最具挑战性的部分是模型的构造。这没用现成的模式可以套用,需要对各种网络流的性质了如指掌(比如点有容量、容量有上下限、多重边等等),并且归纳总结一些经验,发挥我们的创造性。 2. 例题分析 【问题1】项目发展规划(Develop) Macrosoft? 公司准备制定一份未来的发展规划。公司各部门提出的发展项目汇总成了一张规划表,该表包含了许多项目。对于每个项目,规划表中都给出了它所需的投资或预计的盈利。由于某些项目的实施必须依赖于其它项目的开发成果,所以如果要实施这个项目的话,它所依赖的项目也是必不可少的。现在请你担任Macrosoft? 公司的总裁,从这些项目中挑选出一部分,使你的公司获得最大的净利润。 输入 输入文件包括项目的数量N,每个项目的预算Ci和它所依赖的项目集合Pi。格式如下: 第1行是N; 接下来的第i行每行表示第i个项目的信息。每行的第一个数是Ci,正数表示盈利,负数表示投资。剩下的数是项目i所依赖的项目的编号。 每行相邻的两个数之间用一个或多个空格隔开。 输出 第1行是公司的最大净利润。接着是获得最大净利润的项目选择方案。若有多个方案,则输出挑选项目最少的一个方案。每行一个数,表示选择的项目的编号,所有项目按从小到大的顺序输出。 数据限制 0≤N≤1000 -1000000≤Ci≤1000000 输入输出范例 Sample Input Sample Output 6 -4 1 2 2 -1 1 2 -3 3 5 3 4 3 1 2 3 4 6 【分析解答】 抽象原题(图论模型) 给定包含N个顶点的有向图G =(V, E),每个顶点代表一个项目,顶点有一权值Ci表示项目的预算。用有向边来表示项目间的依赖关系,从u指向v的有向边表示项目u依赖于项目v。 问题:求顶点集的一个子集V’,满足对任意有向边〈u,v〉∈E,若u∈V’,则v∈V’,使得V’中所有顶点的权值之和最大。 1 -1 5 -4 2 -3 搜索 枚举V的所有符合条件的子集,时间复杂度O(2n),指数级。无论如何剪枝优化,也摆脱不了非多项式。 动态规划 本题的结构是有向无环图,而非树形结构,不适合动态规划。如果一定要做,实质类似于搜索,由于状态数量众多,仍是指数级的时间复杂度。 网络流 流网络的构造方法: 建立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中的顶点就表示最优方案所选择的项目。 5 1 +∞ +∞ 1 +∞ +∞ 3 +∞ +∞ 2 4 最小割:S={s,1,2,3,4,6};T={5,t} C(S,T)=5 净利润R- C(S,T)=8-5=3 证明算法的正确性: 建立项目选择方案与流网络的割(S,T)的一一对应关系: 任意一个项目选择方案都可以对应网络中的一个割(S,T),S={s}+{所有选择的项目},T=V-S。 对于任意一个不满足依赖关系的项目选择方案,其对应的割有以下特点: 存在一条容量为+∞弧〈u,v〉,u属于S而v属于T。这时割的容量是无穷大,显然不可能是网络的最小割。 对于任意一个割(S,T),如果其对应一个符合条件的方案,它的净利润是R-C(S,T)。导致实际净利润小于上届R的

文档评论(0)

山丹丹 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档