我正在解决 Kleinberg 和 Tardos 的 Algorithm Design 书中的练习,遇到了这个不太容易(对我来说)的问题,即找到一条边永远不会属于图的 MST 的保证。问题是这样的:
给定一个图 G = (V, E),每条边 e 上的成本为 c_e。给定误差参数 epsilon 和 k(均 > 0),您想确定以下属性 (*) 在多项式时间内是否适用于特定边 e' = (u, v)。
(*) 即使每条边的成本最多改变 epsilon(增加或减少),并且除了 e' 之外的 k 个边的成本进一步更改为一些任意不同的值,边 e' 仍然会不属于 G 的任何 MST。
我知道 MST 的 cut 属性,但看不到如何将其应用于此问题。提前感谢您的想法!
最佳答案
由于 j_random_hacker 的评论,最终得到了答案。
答案基本上使用 MST 的循环属性 - 如果边是 G 中循环中最昂贵的边,则它不能属于 G 的任何 MST。
将 k 条边的成本更改为任意值的规定意味着我们必须证明 e' 是至少 k+1 个循环中最昂贵的边,除了 e' 本身之外,所有边都不相交。这样,即使 k 个边的任意变化导致 e' 在 k 个循环中不是最昂贵的,它仍然是最后一个循环中最昂贵的。
给定图 G、边 e' 和参数 k 和 epsilon(均 > 0):
如果 epsilon 是整数,我有办法处理它。在步骤 1 中,删除所有比 cost(e) + 2*epsilon 更昂贵的边。
关于algorithm - 保证边不是最小生成树的一部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19547515/