从一道题目的解法试谈网络流的构造与算法
数学建模中的网络流问题与算法

数学建模中的网络流问题与算法数学建模是一种将实际问题转化为数学模型,并通过数学方法求解的过程。
在实际问题中,常常需要解决网络流问题,即在网络中如何最大化或最小化流量的分配问题。
网络流算法是解决网络流问题的重要工具。
本文将分析网络流问题的基本概念和应用,并介绍常用的网络流算法。
一、网络流问题的基本概念1.网络流模型网络流模型是指将实际问题转化为图中节点和边的组合,并进行流量分配的问题。
其中,节点表示供给和需求单位,边表示可以流动的路径。
网络流模型常用于物流、运输、通信等领域的问题求解。
2.流量网络流问题中的流量表示在网络中通过路径的物理量。
流量可以是货物的数量、电信系统中数据的传输速率等。
流量可以是有向的或无向的,有时还会带有容量的限制。
3.割在网络中,将节点集划分为两个互不相交的子集,这个划分称为割。
割可以用来描述流量限制或流量约束。
在最小割问题中,割的容量描述了限制在网络中流量的最小边数。
二、网络流问题的应用1.最大流问题最大流问题是网络流问题中的一种,目标是在网络中从源节点到汇节点找到可行的最大流量。
最大流算法可以用于求解交通流优化问题、工作调度等。
2.最小割问题最小割问题是网络流问题中的另一种形式,目标是在网络中找到一个割,使得割的边数最小。
最小割算法可以用于求解电力系统分析、路网规划等问题。
3.多组源汇问题多组源汇问题是一种特殊的网络流问题,可以有多个源节点和汇节点,并且在每个节点之间还有容量限制。
多组源汇问题在物流调度、通信网络优化等领域有广泛应用。
三、常用的网络流算法1.最大流算法常用的最大流算法有Ford-Fulkerson算法、Edmonds-Karp算法和Dinic算法等。
这些算法利用增广路径或增广路进行迭代,直到无法找到增广路径为止。
2.最小割算法最小割算法有Ford-Fulkerson算法和推进-重贴算法等。
这些算法通过不断削减割的容量来求解最小割问题。
3.二部图匹配算法二部图匹配算法可以看做是一种特殊的网络流算法。
NOI国家集训队论文分类(至2008)(摘抄自C博客)

摘抄自C博客组合数学计数与统计2001 - 符文杰:《Pólya原理及其应用》2003 - 许智磊:《浅谈补集转化思想在统计问题中的应用》2007 - 周冬:《生成树的计数及其应用》2008 - 陈瑜希《Pólya计数法的应用》数位问题2009 - 高逸涵《数位计数问题解法研究》2009 - 刘聪《浅谈数位类统计问题》动态统计2004 - 薛矛:《解决动态统计问题的两把利刃》2007 - 余江伟:《如何解决动态统计问题》博弈2002 - 张一飞:《由感性认识到理性认识——透析一类搏弈游戏的解答过程》2007 - 王晓珂:《解析一类组合游戏》2009 - 曹钦翔《从“k倍动态减法游戏”出发探究一类组合游戏问题》2009 - 方展鹏《浅谈如何解决不平等博弈问题》2009 - 贾志豪《组合游戏略述——浅谈SG游戏的若干拓展及变形》母函数2009 - 毛杰明《母函数的性质及应用》拟阵2007 - 刘雨辰:《对拟阵的初步研究》线性规划2007 - 李宇骞:《浅谈信息学竞赛中的线性规划——简洁高效的单纯形法实现与应用》置换群2005 - 潘震皓:《置换群快速幂运算研究与探讨》问答交互2003 - 高正宇:《答案只有一个——浅谈问答式交互问题》猜数问题2003 - 张宁:《猜数问题的研究:<聪明的学生>一题的推广》2006 - 龙凡:《一类猜数问题的研究》数据结构数据结构2005 - 何林:《数据关系的简化》2006 - 朱晨光:《基本数据结构在信息学竞赛中的应用》2007 - 何森:《浅谈数据的合理组织》2008 - 曹钦翔《数据结构的提炼与压缩》结构联合2001 - 高寒蕊:《从圆桌问题谈数据结构的综合运用》2005 - 黄刚:《数据结构的联合》块状链表2005 - 蒋炎岩:《数据结构的联合——块状链表》2008 - 苏煜《对块状链表的一点研究》动态树2006 - 陈首元:《维护森林连通性——动态树》2007 - 袁昕颢:《动态树及其应用》左偏树2005 - 黄源河:《左偏树的特点及其应用》跳表2005 - 魏冉:《让算法的效率“跳起来”!——浅谈“跳跃表”的相关操作及其应用》2009 - 李骥扬《线段跳表——跳表的一个拓展》SBT2007 - 陈启峰:《Size Balance Tree》线段树2004 - 林涛:《线段树的应用》单调队列2006 - 汤泽:《浅析队列在一类单调性问题中的应用》哈希表2005 - 李羽修:《Hash函数的设计优化》2007 - 杨弋:《Hash在信息学竞赛中的一类应用》Splay2004 - 杨思雨:《伸展树的基本操作与应用》图论图论2005 - 任恺:《图论的基本思想及方法》模型建立2004 - 黄源河:《浅谈图论模型的建立与应用》2004 - 肖天:《“分层图思想”及其在信息学竞赛中的应用》网络流2001 - 江鹏:《从一道题目的解法试谈网络流的构造与算法》2002 - 金恺:《浅谈网络流算法的应用》2007 - 胡伯涛:《最小割模型在信息学竞赛中的应用》2007 - 王欣上:《浅谈基于分层思想的网络流算法》2008 - 周冬《两极相通——浅析最大—最小定理在信息学竞赛中的应用》最短路2006 - 余远铭:《最短路算法及其应用》2008 - 吕子鉷《浅谈最短径路问题中的分层思想》2009 - 姜碧野《SPFA算法的优化及应用》欧拉路2007 - 仇荣琦:《欧拉回路性质与应用探究》差分约束系统2006 - 冯威:《数与图的完美结合——浅析差分约束系统》平面图2003 - 刘才良:《平面图在信息学中的应用》2007 - 古楠:《平面嵌入》2-SAT2003 - 伍昱:《由对称性解2-SAT问题》最小生成树2004 - 吴景岳:《最小生成树算法及其应用》2004 - 汪汀:《最小生成树问题的拓展》二分图2005 - 王俊:《浅析二分图匹配在信息学竞赛中的应用》Voronoi图2006 - 王栋:《浅析平面Voronoi图的构造及应用》偶图2002 - 孙方成:《偶图的算法及应用》树树2002 - 周文超:《树结构在程序设计中的运用》2005 - 栗师:《树的乐园——一些与树有关的题目》路径问题2009 - 漆子超《分治算法在树的路径问题中的应用》最近公共祖先2007 - 郭华阳:《RMQ与LCA问题》划分问题2004 - 贝小辉:《浅析树的划分问题》数论欧几里得算法2009 - 金斌《欧几里得算法的应用》同余方程2003 - 姜尚仆:《模线性方程的应用——用数论方法解决整数问题》搜索搜索2001 - 骆骥:《由“汽车问题”浅谈深度搜索的一个方面——搜索对象与策略的重要性》2002 - 王知昆:《搜索顺序的选择》2005 - 汪汀:《参数搜索的应用》启发式2009 - 周而进《浅谈估价函数在信息学竞赛中的应用》优化2003 - 金恺:《探寻深度优先搜索中的优化技巧——从正方形剖分问题谈起》2003 - 刘一鸣:《一类搜索的优化思想——数据有序化》2006 - 黄晓愉:《深度优先搜索问题的优化技巧》背包问题2009 - 徐持衡《浅谈几类背包题》匹配2004 - 楼天城:《匹配算法在搜索问题中的巧用》概率概率2009 - 梅诗珂《信息学竞赛中概率问题求解初探》数学期望2009 - 汤可因《浅析竞赛中一类数学期望问题的解决方法》字符串字符串2003 - 周源:《浅析“最小表示法”思想在字符串循环同构问题中的应用》多串匹配2004 - 朱泽园:《多串匹配算法及其启示》2006 - 王赟:《Trie图的构建、活用与改进》2009 - 董华星《浅析字母树在信息学竞赛中的应用》后缀数组2004 - 许智磊:《后缀数组》2009 - 罗穗骞《后缀数组——处理字符串的有力工具》字符串匹配2003 - 饶向荣:《病毒的DNA———剖析一道字符匹配问题解析过程》2003 - 林希德:《求最大重复子串》动态规划动态规划2001 - 俞玮:《基本动态规划问题的扩展》2006 - 黄劲松:《贪婪的动态规划》2009 - 徐源盛《对一类动态规划问题的研究》状态压缩2008 - 陈丹琦《基于连通性状态压缩的动态规划问题》状态设计2008 - 刘弈《浅谈信息学中状态的合理设计与应用》树形DP2007 - 陈瑜希:《多角度思考创造性思维——运用树型动态规划解题的思路和方法探析》优化2001 - 毛子青:《动态规划算法的优化技巧》2003 - 项荣璟:《充分利用问题性质——例析动态规划的“个性化”优化》2004 - 朱晨光:《优化,再优化!——从《鹰蛋》一题浅析对动态规划算法的优化》2007 - 杨哲:《凸完全单调性的加强与应用》计算几何立体几何2003 - 陆可昱:《长方体体积并》2008 - 高亦陶《从立体几何问题看降低编程复杂度》计算几何思想2004 - 金恺:《极限法——解决几何最优化问题的捷径》2008 - 程芃祺《计算几何中的二分思想》2008 - 顾研《浅谈随机化思想在几何问题中的应用》圆2007 - 高逸涵:《与圆有关的离散化》半平面交2002 - 李澎煦:《半平面交的算法及其应用》2006 - 朱泽园:《半平面交的新算法及其实用价值》矩阵矩阵2008 - 俞华程《矩阵乘法在信息学中的应用》高斯消元2002 - 何江舟:《用高斯消元法解线性方程组》数学方法数学思想2002 - 何林:《猜想及其应用》2003 - 邵烜程:《数学思想助你一臂之力》数学归纳法2009 - 张昆玮《数学归纳法与解题之道》多项式2002 - 张家琳:《多项式乘法》数形结合2004 - 周源:《浅谈数形结合思想在信息学竞赛中的应用》黄金分割2005 - 杨思雨:《美,无处不在——浅谈“黄金分割”和信息学的联系》其他算法遗传算法2002 - 张宁:《遗传算法的特点及其应用》2005 - 钱自强:《关于遗传算法应用的分析与研究》信息论2003 - 侯启明:《信息论在信息学竞赛中的简单应用》染色与构造2002 - 杨旻旻:《构造法——解题的最短路径》2003 - 方奇:《染色法和构造法在棋盘上的应用》一类问题区间2008 - 周小博《浅谈信息学竞赛中的区间问题》序2005 - 龙凡:《序的应用》系2006 - 汪晔:《信息学中的参考系与坐标系》物理问题2008 - 方戈《浅析信息学竞赛中一类与物理有关的问题》编码与译码2008 - 周梦宇《码之道—浅谈信息学竞赛中的编码与译码问题》对策问题2002 - 骆骥:《浅析解“对策问题”的两种思路》优化算法优化2002 - 孙林春:《让我们做得更好——从解法谈程序优化》2004 - 胡伟栋:《减少冗余与算法优化》2005 - 杨弋:《从<小H的小屋>的解法谈算法的优化》2006 - 贾由:《由图论算法浅析算法优化》程序优化2006 - 周以苏:《论反汇编在时间常数优化中的应用》2009 - 骆可强《论程序底层优化的一些方法与技巧》语言C++2004 - 韩文弢:《论C++语言在信息学竞赛中的应用》策略策略2004 - 李锐喆:《细节——不可忽视的要素》2005 - 朱泽园:《回到起点——一种突破性思维》2006 - 陈启峰:《“约制、放宽”方法在解题中的应用》2006 - 李天翼:《从特殊情况考虑》2007 - 陈雪:《问题中的变与不变》2008 - 肖汉骏《例谈信息学竞赛分析中的“深”与“广”》倍增2005 - 朱晨光:《浅析倍增思想在信息学竞赛中的应用》二分2002 - 李睿:《二分法与统计问题》2002 - 许智磊:《二分,再二分!——从Mobiles(IOI2001)一题看多重二分》2005 - 杨俊:《二分策略在信息学竞赛中的应用》调整2006 - 唐文斌:《“调整”思想在信息学中的应用》随机化2007 - 刘家骅:《浅谈随机化在信息学竞赛中的应用》非完美算法2005 - 胡伟栋:《浅析非完美算法在信息学竞赛中的应用》2008 - 任一恒《非完美算法初探》提交答案题2003 - 雷环中:《结果提交类问题》守恒思想2004 - 何林:《信息学中守恒法的应用》极限法2003 - 王知昆:《浅谈用极大化思想解决最大子矩形问题》贪心2008 - 高逸涵《部分贪心思想在信息学竞赛中的应用》压缩法2005 - 周源:《压去冗余缩得精华——浅谈信息学竞赛中的“压缩法”》逆向思维2005 - 唐文斌:《正难则反——浅谈逆向思维在解题中的应用》穷举2004 - 鬲融:《浅谈特殊穷举思想的应用》目标转换2002 - 戴德承:《退一步海阔天空——“目标转化思想”的若干应用》2004 - 栗师:《转化目标在解题中的应用》类比2006 - 周戈林:《浅谈类比思想》分割与合并2006 - 俞鑫:《棋盘中的棋盘——浅谈棋盘的分割思想》2007 - 杨沐:《浅析信息学中的“分”与“合”》平衡思想2008 - 郑暾《平衡规划——浅析一类平衡思想的应用》。
论中的网络流问题

论中的网络流问题网络流问题是图论中研究的一个重要问题,它在许多实际应用中有着广泛的应用。
本文将以网络流问题为核心,探讨其在图论中的作用及应用,并对相关概念和算法进行介绍。
一、网络流问题的定义和表示网络流问题是指在一个有向图中,给定一个源点s和一个汇点t,每条边都有一个容量限制,要求从源点s到汇点t的最大流量。
可以用图的形式来表示网络流问题,其中节点表示图中的点,边表示两点之间的连接关系,边上的数字表示该边的容量限制。
二、网络流问题的模型网络流问题可以用图模型来描述,其中节点表示图中的点,边表示两点之间的连接关系,边上的数字表示该边的容量限制。
图中的边分为正向边和反向边,正向边表示从源点s到汇点t的流量,反向边表示从汇点t到源点s的流量。
三、网络流问题的求解方法网络流问题可以采用多种求解方法,常用的有增广路径算法和最小割算法。
1. 增广路径算法增广路径算法是一种常用的解决网络流问题的方法。
它通过不断寻找从源点s到汇点t的增广路径,并在路径上增加或减少流量来求解最大流量。
2. 最小割算法最小割算法是另一种常用的解决网络流问题的方法。
它通过将图划分为两个部分,使得源点s在一部分,汇点t在另一部分,并使得割边的容量最小,从而求解最大流量。
四、网络流问题的应用网络流问题在实际应用中有着广泛的应用,下面介绍几个典型的应用场景。
1. 传输网络规划网络流问题在传输网络规划中有着重要的应用,可以用来优化数据传输的路径,提高传输效率。
2. 任务分配问题网络流问题可以用来解决任务分配问题,将任务分配给不同的处理器,使得总任务处理时间最小。
3. 最大匹配问题网络流问题可以用来解决最大匹配问题,即在一个二分图中找到最大的匹配数。
5. 最小费用流问题网络流问题还可以用来解决最小费用流问题,即在满足流量约束的情况下,使得总费用最小。
六、总结网络流问题作为图论中的一个重要问题,有着广泛的应用。
本文介绍了网络流问题的定义和表示、模型和求解方法,并介绍了其在实际应用中的几个典型场景。
算法设计与分析中的算法与网络流

算法设计与分析中的算法与网络流算法在计算机科学中扮演着重要的角色。
它们是解决问题的步骤和规则的有序集合,可以在计算机上自动执行。
在算法设计与分析的学习中,算法与网络流成为了一个重要的领域。
本文将探讨算法与网络流的关系以及在算法设计与分析中的应用。
一、算法与网络流的关系算法是解决问题的有序步骤,而网络流是一种用来描述物体、信息或能量在网络中传输的模型。
算法可以通过网络流来解决一系列相关问题,例如最短路径、最大流、最小割等。
网络流算法通过建立图模型,将问题转化为图中物体、信息或能量的流动问题,并使用各种技术和策略来解决。
二、网络流算法的应用1. 最短路径问题在网络中,最短路径算法可以用来找到两个节点之间最短路径的长度。
其中一个经典的算法是Dijkstra算法,它通过不断更新起始节点到其他节点的最短路径长度来求解。
另一个常用的算法是Floyd-Warshall算法,它通过动态规划的方式计算任意两个节点之间的最短路径长度。
2. 最大流问题最大流算法可以用来计算网络中从源节点到汇节点的最大流量。
其中最著名的算法是Ford-Fulkerson算法,它通过反复寻找增广路径来不断增加流量,直到达到最优解。
另一个常用的算法是Edmonds-Karp算法,它使用广度优先搜索来寻找增广路径。
3. 最小割问题最小割算法可以用来找到将图划分成两个部分的最小代价。
其中一个著名的算法是stoer-wagner算法,它通过不断合并最小割集合中的节点来计算最小割的大小。
4. 匹配问题匹配算法可以用来找到图中的最大匹配或完美匹配。
其中著名的算法是匈牙利算法,它通过构建交错树来寻找增广路径,从而不断增加匹配的大小。
三、算法设计与分析中的挑战在算法设计与分析中,我们需要考虑如何设计出高效的算法来解决问题。
然而,算法设计中的挑战在于如何权衡时间复杂度和空间复杂度。
某些算法可能会在时间上更高效,但却需要占用大量的空间。
相反,有些算法可能在空间上更高效,但却需要牺牲一些时间。
信息学奥赛网络流算法介绍与分析

信息学奥赛网络流算法介绍与分析网络流算法是指一类用于解决网络中最大流、最小割等问题的算法。
最大流问题是指在网络中找到从源节点到汇节点的最大流量,而最小割问题则是指在网络中找到一个割,使得源节点和汇节点之间的最小边权和。
网络流算法的核心思想是建立一个虚拟的可行流网络,然后通过不断调整网络中各个边的流量来达到最优解。
以下是三种常见的网络流算法介绍与分析。
1. Ford-Fulkerson算法Ford-Fulkerson算法是最经典的网络流算法之一,也是很多网络流算法的基础。
它通过不断寻找增广路径来求解最大流问题。
增广路径是指在残余网络中存在的一条从源节点到汇节点的路径,其各边的残余容量大于0。
通过不断增加该路径上的流量,直到找不到增广路径为止,就可以得到最大流量。
Ford-Fulkerson算法的时间复杂度取决于增广路径的寻找方式,一般情况下为O(fE),其中f为最大流量,E为网络中的边数。
2. Edmonds-Karp算法Edmonds-Karp算法是基于Ford-Fulkerson算法的改进算法,它使用广度优先来寻找增广路径。
在每次寻找增广路径时,Edmonds-Karp算法总是选择路径上经过的边权最小的边作为增广路径中的瓶颈边。
这种选择策略保证了每次增加的流量都是最小的,从而使得算法的收敛速度更快。
Edmonds-Karp算法的时间复杂度为O(VE^2),其中V为网络中的节点数,E为网络中的边数。
3. Dinic算法Dinic算法是一种快速求解最大流问题的算法,它基于分层残余网络的概念。
分层残余网络是指在残余网络上按照路径长度构建的一种分层结构。
Dinic算法首先通过BFS构建分层残余网络,然后使用DFS在分层残余网络上增广路径。
与Ford-Fulkerson算法和Edmonds-Karp算法相比,Dinic算法避免了重复增广路径的情况,从而大大减少了算法的时间复杂度。
Dinic算法的时间复杂度为O(V^2E),其中V为网络中的节点数,E 为网络中的边数。
网络流问题及其求解方法

网络流问题及其求解方法网络流问题是指在一个有向图中,给定网络的容量限制,找到从源点到汇点的最大流量。
这个问题在实际生活中有着广泛的应用,比如在运输、通信、电力等领域。
本文将介绍网络流问题以及几种常见的求解方法。
1. 网络流问题的定义网络流问题可以用有向图来表示。
图中的每条边具有一个容量,表示该边能够通过的最大流量。
同时,图中有一个源点,表示流量的起点,以及一个汇点,表示流量的终点。
问题的目标是找到从源点到汇点的最大流量。
2. 求解方法一:最短增广路径算法最短增广路径算法是一种基于广度优先搜索的方法。
算法的思想是在图中不断寻找增广路径,即从源点到汇点且每条边的流量都满足容量限制的路径。
然后通过增加路径上的流量来更新网络的流量,并继续寻找下一个增广路径。
直到找不到增广路径为止,即可得到最大流量。
3. 求解方法二:最大流-最小割定理最大流-最小割定理是网络流问题的一个重要性质。
该定理指出,网络的最大流量等于它的最小割。
最小割是指将网络分成两个部分,一部分包含源点,另一部分包含汇点,并且割边的总容量最小。
根据该定理,可以通过寻找最小割来求解网络流问题。
4. 求解方法三:Ford-Fulkerson算法Ford-Fulkerson算法是一种经典的求解网络流问题的方法。
该算法通过不断寻找增广路径来更新网络的流量,直到无法再找到增广路径为止。
算法的关键在于如何选择增广路径,一种常见的选择策略是使用深度优先搜索。
Ford-Fulkerson算法的时间复杂度与最大流的大小有关,一般情况下为O(fE),其中f为最大流量,E为图中边的数量。
总结:网络流问题是一个重要的优化问题,在实际应用中具有广泛的应用。
本文介绍了网络流问题的定义以及几种常见的求解方法,包括最短增广路径算法、最大流-最小割定理和Ford-Fulkerson算法。
这些算法都可以有效地求解网络流问题,并在实践中得到广泛应用。
通过研究网络流问题及其求解方法,可以为实际问题的建模和解决提供有力的工具。
网络流算法介绍与分析

割的定义
一个割(S,T)由两个点集S,T组成. S+T = V s 属于 S. t 属于 T. 提出割的定义,是为后面的证明作铺垫.
结论2(点集总流量为零)
不包含s和t的点集,于它相关联的边上的流量之 和为0. 证明: f(X,V) = [ f ( x , y ) ]
x X y Y
=
x X y Y
即:X中的任意一点与Y中的任意一点组成的所 有边上的流量之和.(边的方向为从X中的结点到 Y中的结点) c,r等函数都有类似的定义.(点集间的容量和、 点集间的残量网络容量和)
结论1
1.f(X,X) = 0 (由流量反对称性) 2. f(X,Y) = -f(Y,X) (有流量反对称性) 3.f(X ∪ Y,Z) = f(X,Z) + f(Y,Z) (显然) 4.f(X,Y ∪ Z) = f(X,Y) + f(X,Z) (显然)
(0,4)
t
(0,2)
大致的思路:从源点出发, 逐步推进。 称当前状态下不满足流量 平衡的结点为“溢出的结 点”.(对于结点u,f(V,u) > 0) 令e(u) = f(V,u),称为u点的 赢余,直观地描述,就是 “流入的比流出的多多 少”。e(v1)=4,e(v2)=3。 不断将溢出的结点中的赢 余往后继点推进,直到赢余 都聚集在t.
s
(4,4) (0,3)
(2,2) v1 v2
(2,4) (2,2) t
一个简单的 例子.网络可 以被想象成 一些输水的 管道.括号内 右边的数字 表示管道的 容量,左边的 数字表示这 条管道的当 前流量.
网络流的三个性质
1、容量限制: f[u,v]<=c[u,v] 2、反对称性:f[u,v] = - f[v,u] 3、流量平衡: 对于不是源点也不是汇点的 任意结点,流入该结点的流量和等于流出该 结点的流量和。 结合反对称性,流量平衡也可以写成:
从一道题目的解法试谈网络流的构造与算法

从一道题目的解法试谈网络流的构造与算法福建师大附中江鹏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●输入输出范例【分析解答】1.抽象原题(图论模型)给定包含N个顶点的有向图G =(V, E),每个顶点代表一个项目,顶点有一权值Ci表示项目的预算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
从一道题目的解法试谈网络流的构造与算法
福建师大附中江鹏
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
●输入输出范例
【分析解答】
1.抽象原题(图论模型)
给定包含N个顶点的有向图G =(V, E),每个顶点代表一个项目,顶点有一权值Ci表示项目的预算。
用有向边来表示项目间的依赖关系,从u指向v的有向边表示项目u依赖于项目v。
问题:求顶点集的一个子集V’,满足对任意有向边〈u,v〉∈E,若u∈V’,则v∈V’,使得V’中所有顶点的权值之和最大。
-4 2 -3
2.搜索
枚举V的所有符合条件的子集,时间复杂度O(2n),指数级。
无论如何剪枝优化,也摆脱不了非多项式。
3.动态规划
本题的结构是有向无环图,而非树形结构,不适合动态规划。
如果一定要做,实质类似于搜索,由于状态数量众多,仍是指数级的时间复杂度。
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中的顶点就表示最优方案所选择的项目。
最小割: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的原因有:
1.未选取盈利项目i,即顶点i包含在T中,那么存在一条从源s至顶点i的容量为Ci的弧2.选取投资项目i,即顶点i包含在S中,那么存在一条从顶点i至汇的容量为-Ci的弧C(S,T)就是上述两种弧的容量之和。
综上所述,割的容量越小,方案的净利润就越大。
●最小割的求法:
根据最大流最小割定理,网络的最小割可以通过最大流的方法求得。
本题解题的关键在于流网络数学模型的建立。
本题建模的独到之处在于:以前的网络流问题通常使用流量表示解答方案,而本题使用割表示解答方案,并充分利用了割的性质,流只是求得最小割的手段。
这为我们开辟了一条构造网络流解决问题的新思路。
初看这个问题,要把它和网络流联系起来,有相当的难度。
必须熟练地掌握流网络的各种性质,经过反复的类比尝试,才能发现它们之间的共性。
【联想思考】
作为本题的一个衍生,给每个项目估计一个完成时间,并假设公司同时只能进行一个项目。
现在的问题是:如何选择一些能在给定时间内完成的项目,使得公司得到最大收益。
这个问题我至今还没有找到有效算法,希望有兴趣的同学来共同研究。
3. 编程技巧
◆数据结构:邻接表
◆直接表示原问题
优点:节省空间
缺点:编程复杂度大,不具有通用性。