图论专题小结:最大流算法之ISAP算法

ISAP(Improved Shortest Augmenting Path)算法是网络流问题中的一种高效方法,尤其适用于对效率要求高的场景。算法基于最短路径不会因增广而减小的原理,使用d[i]表示节点i到汇点的下界距离。增广过程沿着满足d[i]==d[j]+1的弧(i,j)进行。ISAP相比Dinic算法,额外维护了父边数组p和距离计数数组num,实现过程中包含‘前进’和‘撤退’操作,并利用gap优化来提高效率。" 123042383,11035224,利用羰基丙烯酸试剂修饰抗体的不可逆选择性策略,"['生物技术', '药物开发', '抗体工程', '生物偶联', '肿瘤学']
摘要由CSDN通过智能技术生成

ISAP算法

ISAP(Improved Shortest Augumenting Path)算法是改进版的SAP算法,如果对效率要求很高的时候,可以用该算法。

(1)概述:算法基于这样的一个事实:每次增广之后,任意结点到汇点(在残余网络中)的最短距离都不会减小。这样,我们可以利用d[i[表示结点i到汇点的距离的下界。然后再增广过程当中不断地修改这个下界。增广的时候和Dinic算法类似,只允许沿着d[i]==d[j]+1的弧(i,j)走。


不难证明,d[i[满足两个条件:(1)d[t]=0;(2)对任意的弧(i,j) d[i]≤d[j]+1。因为最坏的情况就是s到t是一条链,此时等号成立。因此,当d[s]≥n时,残余网络中不存在s-t路。


那么与Dinic算法类似,事先逆向bfs,找增广的过程就是沿着“允许弧”(即满足f<c且d[i]==d[j]+1的弧)往前走。(称为“前进”)。如果向前走不动了,那么就要考虑原路返回(称为“撤退”)。此时把d[i]修改为min{d[j]}+1即可。因为要满足d函数的条件(2)。修改后,原来的i值的个数就减少一个,而新i值的个数多一个。在程序中,用num数组来保存所有距离的个数,当把距离值从x修改为y时,num[x]--,num[y]++即可,然后检查num[x]是否为0,如果是0,那么s-t不连通,算法终止。原因显而易见:比如s-t的距离是3,如果距离为2的情况都已经没了ÿ

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值