我一直坚持这个问题一段时间试图找出以下问题的重复关系。
问题描述:
假设市场上有以下交易选择:
确定是否可以通过交易在某个项目上获利。
例如,在上述情景中,我们可以通过以下方式在金属上获利:
1金属 - > 2木 - > 0.8火 - > 2.4金属
我坚持的部分是如何分解子问题。这个问题在括号乘法问题中似乎很常见,我们试图通过一系列乘法来最大化最终结果,但有更多限制。
我不想要完整的答案,但是能够推动我走向正确方向的提示将非常感激!
谢谢!
答案 0 :(得分:1)
提示:您可以通过“玩”权重并将其减少到已知的加权最短路径问题来解决此问题。
剧透:详细解释
这可以通过在图表上找到负的怀疑周期来很好地解决,权重:
让w'(u,v)
为将u
的一个单位转换为v
的费用。
定义:
w(u,v) = -log(w'(u,v))
这个想法是路径v1->v2->...->vk
的成本
COST = w(v1,v2) + w(v2,v3) + ... + w(vk-1,vk) =
= -log(w'(v1,v2)) + -log(w'(v2,v3)) + ... + -log(w'(vk-1,vk)) =
= -log (w'(v1,v2)*w'(v2,v3)*...*w'(vk-1,vk))
现在,很容易看到w'(v1,v2)*w'(v2,v3)*...*w'(vk-1,vk)
的值恰好是vk
的一个单位产生的v1
的数量。
同样,对于从某些u
到自身u->v1->v2->v3->...vk->v
的任何周期,w'(u,v1)*w'(v1,v2),...,w'(vk,u)
的值是您可以通过这种方式生成的单位数,如果此值大于1,则此值大于1并且只有-log(w'(u,v1)*w'(v1,v2),...,w'(vk,u) < 0
因此,这个问题可以很容易地简化为一个已知的算法 - Bellman-Ford,它可以很容易地检测出负循环的存在。