代理在n
生产者和m
个消费者之间起作用。 i
生产者,今年生成s_i
糖果和j
消费者消费b_j
糖果。对于销售的每个糖果,代理商获得1
美元的回报。对于某些问题,一个严格的规则被定义为生产者应该向任何生产者销售糖果,它们之间的距离不大于100
KM(公里)。如果我们有生产者 - 消费者对的列表,他们之间的距离低于100
KM,以下哪种算法最适合寻找最大收益? (假设s_i
和b_j
可能变得非常大。)
1) Maximal Matching
2) Dynamic Programming
3) Maximum Flow
4) 1 , 3
这是2013年 - DS课程期末考试的最后一个问题。任何提示或想法?
答案 0 :(得分:1)
根据我的理解,问题可以解决为Maximum Bipartite Matching,但建模要求图形与原始输入相比相对较大;对于每个可行边(s_i,b_j)
,为生成器分区引入s_i
个节点,为消费者分区引入b_j
,并将每个生成器节点连接到它们的每个使用者节点。
然而,问题可以在二分图上建模为Maximum Flow Problem;每个可行边缘(s_i,b_j)
上的流量受0
从下方和min{s_i,b_j}
从上方约束,因为流量必须是非负的,但可能既不超过生产者也不超过消费者& #39;容量。
关于通过Dynamic Prgramming的解决方案,请考虑以下最大二分匹配的递归关系草图。设n
和m
分别表示第一个和第二个分区中的节点数。修复第一个分区中的节点a
; a
与其中一个邻居不匹配或匹配;在任何一种情况下,评估每种可能性,递归地评估分区分别具有n-1
和m
或n-1
和m-1
节点的实例;这些选择中最好的是。
简而言之,显然所有提议的方法都能产生有效的解决方案;然而,网络流程的建模似乎是最自然的。