【问题标题】:A Dynamic Programming or Graph Algorithm, a Nice Questions一个动态规划或图算法,一个很好的问题
【发布时间】:2015-02-12 09:26:17
【问题描述】:

代理在n 生产者和m 消费者之间工作。 ith 生产者,在这一年产生s_i 糖果和jth 消费者消费b_j 糖果。对于销售的每一个糖果,代理获得1 美元的回报。对于某些问题,定义了一个严格的规则,即生产者应该向任何生产者销售糖果,它们之间的距离不大于100KM(公里)。如果我们有所有生产者-消费者对的列表,它们之间的距离小于100KM,那么以下哪个算法对于寻找最大收益是错误的? (假设s_ib_j 可能会变得很大)。

1) Maximal Matching

2) Dynamic Programming

3) Maximum Flow 

4) 1 , 3

这是 2013 年 DS 课程期末考试的最后一道题。任何提示或想法?

【问题讨论】:

    标签: algorithm math graph dynamic-programming graph-algorithm


    【解决方案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} 约束,因为流必须是非负的,但不能超过生产者和消费者的容量。

    关于通过Dynamic Prgramming 的解决方案,请考虑以下最大二分匹配的递归关系草图。让nm 分别表示第一和第二分区中的节点数。修复第一个分区中的一个节点aa 与其中一个邻居不匹配或不匹配;在任何一种情况下,都会评估每种可能性,递归地评估分区分别具有n-1mn-1m-1 节点的实例;这些选择中最好的。

    简而言之,显然所有提议的方法都产生了有效的解决方案;然而,建模为网络流似乎是最自然的。

    【讨论】:

    • sd 流必须是非负数是什么意思?
    • 其实可以通过使用更多的节点来使用最大二分匹配。对于拥有 s_i 糖果的生产者,创建 s_i 节点,并为消费者做同样的事情。
    • 感谢您的提示,我会澄清我的答案。
    • 这是一个错字;我的意思是分配给每条边的流必须是非负的。
    • 亲爱的@Codor,哪一个效率更高?
    猜你喜欢
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多