- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
教学课件讲义PPT教学教案培训资料医学中小学上课资料
8.2.3 预流推进算法 1 算法基本思想 增广路算法的特点是找到增广路后,立即沿增广路对网络流进行增广。 每一次增广可能需要对最多n-1条边进行操作。 最坏情况下,每一次增广需要O(n)计算时间。 有些情况下,这个代价是很高的。下面是一个极端的例子。 无论用哪种增广路算法,都会找到10条增广路,每条路长为10,容量为1。 共需要10次增广,每次增广需要对10条边进行操作,每条边增广1个单位流量。 10条增广路中的前9个顶点(前8条边)是完全一样的。 如果直接将前8条边的流量增广10个单位,而只对后面长为2的不同的有向路单独操作,就可以节省许多计算时间。 这就是预流推进(preflow push )算法的基本思想。 预流推进算法注重对每一条边的增流,而不必每次一定对一条增广路增流。 通常将沿一条边增流的运算称为一次推进(push)。 在算法的推进过程中,网络流满足容量约束,但一般不满足流量平衡约束。 从每个顶点(除s和t外)流出的流量之和总是小于等于流入该顶点的流量之和。 这种流称为预流(preflow)。这也是这类算法被称为预流推进算法的原因。 下面先给出预流的严格定义。 给定网络G=(V,E)一个预流是定义在G的边集E上的一个正边流函数。 该函数满足容量约束,即对G的每一条边(v,w)∈E,满足0≤flow(v,w)≤cap(v,w)。 G的每一中间顶点满足流出量小于或等于流入量。 即对每个v∈V(v≠s,t)有 满足条件 的中间顶点v称为活顶点。 量 称为顶点v的存流。 按此定义,源s和汇t不可能成为活顶点。 对网络G上的一个预流,如果存在活顶点,则说明该预流不是可行流。 预流推进算法就是要选择活顶点,并通过把一定的流量推进到它的邻点,尽可能地将当前活顶点处正的存流减少为0,直至网络中不再有活顶点,从而使预流成为可行流。 如果当前活顶点有多个邻点,那么首先推进到哪个邻点呢? 由于算法最后的目的是尽可能将流推进到汇点t,因此算法应寻求把流量推进到它的邻点中距顶点t最近的顶点。 预流推进算法中用到一个高度函数h来确定推流边。 对于给定网络G=(V,E)的一个流,其高度函数h是定义在G的顶点集V上的一个非负函数。该函数满足: (1)对于G的残流网络中的每一条边(u,v)有,h(u) ? h(v)+1; (2)h(t)=0。 G的残流网络中满足h(u) = h(v)+1的边(u,v)称为G的可推流边。 8.2.4 一般的预流推进算法 一般的预流推进算法的每次迭代是一次推进运算或者一次高度重新标号运算。 如果推进的流量等于推流边上的残留容量,则称为饱和推进,否则称为非饱和推进。 算法终止时,网络中不含有活顶点。此时只有顶点s和t的存流非零。此时的预流实际上已经是一个可行流。 算法预处理阶段已经令h(s)=n,而高度函数在计算过程中不会减少,因此算法在计算过程中可以保证网络中不存在增广路。 根据增广路定理,算法终止时的可行流是一个最大流。 步骤0:构造初始预流flow: 对源顶点s的每条出边(s,v)令flow(s,v)=cap(s,v); 对其余边(u,v)令flow(u,v)=0。构造一有效的高度函数h。 步骤1:如果残量网络中不存在活顶点,则计算结束,已经得到最大流; 否则转步骤2。 步骤2:在网络中选取活顶点v。 如果存在顶点v的出边为可推流边,则选取一条这样的可推流边,并沿此边推流。 否则令h(v) = min{h(w)+1 | (v,w)是当前残流网络中的边},并转步骤1。 * 算法设计与分析 山东师范大学信息科学与工程学院软件工程研究所 徐连诚 线性规划与网络流 学习要点 理解线性规划算法模型 掌握解线性规划问题的单纯形算法 理解网络与网络流的基本概念 掌握网络最大流的增广路算法 掌握网络最大流的预流推进算法 掌握网络最小费用流的消圈算法 掌握网络最小费用流的最小费用路算法 掌握网络最小费用流的网络单纯形算法 8.1 线性规划问题和单纯形算法 8.1.1 线性规划问题及其表示 线性规划问题可表示为如下形式: s.t. 变量满足约束条件(8.2)-(8.5)式的一组值称为线性规划问题的一个可行解。 所有可行解构成的集合称为线性规划问题的可行区域。 使目标函数取得极值的可行解称为最优解。 在最优解处目标函数的值称为最优值。 有些情况下可能不存在最优解。 通常有两种情况: (1)根本没有可行解,即给定的约束条件之间是相互排斥的,可行区域为空集; (2)目标函数没有极值,也就是说在n 维空间中的某个方向上,目标函数值可以无限增大,而仍满足约束条件,此时目标函数值无界。 这
文档评论(0)