最大流应用实验

最大流应用问题

实验概述

论文评审问题

  1. 有m篇论文和n个评审,每篇论文需要安排a个评审,每个评审最多评b篇论文。请设计一个论文分配方案。
  2. 要求应用最大流解决上述问题,画出m=10,n=3的流网络图并解释说明流网络图与论文评审问题的关系。
  3. 编程实现所设计算法,计算a和b取不同值情况下的分配方案,如果没有可行方案则输出无解。

实验思路

最大流建图

论文-评委是一个二分图,讨论的是二分图的连接问题。以流量的角度来看,我们向每篇论文发放一个容量为a的流量。而评委方每个评委可以承载的流量为b。最后,我们需要将论文方的流量全部发送到评委方。如果流量没有全部发送完毕,就是一个无解的情况。为了使用最大流的算法,可以在论文方添加一个源点,评委方添加一个汇点。
origin
源点可以看作是发送站,要将a流量发至每一个论文结点。然后论文结点需要想办法将流量发至评委结点,而每个论文结点和评委结点之间都有一条路,其容量为1,既代表评审一篇论文。专家结点要想办法将流量发送到汇点,因为那样才能完成一篇论文的评审。每个专家与汇点的通路的容量为b,既每个专家最多评审b篇论文。b用完后,该专家无法到达汇点(无法完成论文评审)。

最大流求可行解

我们知道最大流问题是求源点到汇点送出的流的最大值。在本问题中,要想把所有论文评审完毕,最大流就必须是m*a。
remain
最后找到所有从评委到论文的边,这些边都是原来论文到评委的反向边,代表经过了这些路径。

画出的反向边就是最后的连线

如果最后发现最大流 < m*a,就没有解,因为源点送出去的流量没有全部传到。本质上是有论文没有被审批。造成这种现象的原因是论文必须要a个评委,而评委有上限为b篇论文。在网络中,体现为评委向汇点的路径不能承受所有传递过来的流量。
final
标出的红色边是未送达的流量,说明无解

直接判断有无解的方法就是看是否am < bn && a < n。如果是就一定有解,既评委向汇点的路径必能承受所有传递来的流量。
no-sol

最大流算法

现在,问题基本上就解决了,我们可以使用最大流算法来求解了。最大流算法五花八门,大家可以自行百度。其中《算法导论》中的例子是Ford Fulkson (DFS),更好的是EK (Edmons-Karp)算法 (BFS),但不是最好。最好的算法是Dinic,一种BFS分层DFS方法,因为我们的二分图具有明显的层次感。我们老师的要求是比较EK和Dinic,当然最好是多实现几种最大流算法啦。

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Stream的reduce方法求最大值的代码如下: ```java List<Integer> list = Arrays.asList(new Integer[]{1, 2, 3, 4, 5, 6, 78, 9}); int max = list.stream().reduce(Integer::max).get(); ``` 在这段代码中,我们先将要操作的数字集合转换成Stream,然后使用reduce方法结合Integer的max方法来求得最大值。最后通过get方法获取最终结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java中各种类型用Stream求最大值最小值](https://blog.csdn.net/weixin_43296313/article/details/122596555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [JAVA stream之reduce求最大值、最小值](https://blog.csdn.net/qq_41844287/article/details/126365266)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [generics:使用Go泛型进行实验](https://download.csdn.net/download/weixin_42131785/18395414)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值