最近和 Chao 导做的一个图上机器人运输问题。
考虑一个这样的问题:
考虑一个
点 边的图,边长随意,有 个物品,第 个需要从 移动到 ,有一个机器人来运输物品,拿起放下的时间不计,但每当拿起一个物品后,不能中途放下,最后需要回到初始节点,最小化移动距离。
其实可以发现这个问题和
首先可以考虑几种特殊的情况:链上和环上。这两个问题都在19xx年的时候就被证明可以规约到
先来讲讲原来的链做法,我们先只考虑所有的
我们考虑每一条边
注意一个点是,我们多走的这些边是一条一条的,但原来的链是不能断开的,即走起来不能中间停下。
可以发现我们要满足两个要求:1、每条边的
如果我们设
而且我们显然不会使得
那么我们加上这些一条条的边(或者说这些边边长都为1),这时候我们已经保证要求1,且此时的cost花费是最小的,那么我们只需要目前加了边之后的所有联通快联通起来,直接跑mst即可。
为什么mst是对的,而不是
复杂度显然不超过 MST 的复杂度,这就是链的做法。
接下来是环的做法。
我们考虑环和链有什么区别:
首先
我们发现这时候不是
那么一个显然的想法是直接枚举
为什么最小生成树可以?因为如果走一个环,那么显然就是在
但 Frederickson 的论文证明了,设
proof
所以我们只需要找到
对于图的情况,我们考虑cycle basis,即将整个图分解成
但这时候我们发现之前的证明在此处并不适用,两个环的时候的最优值的不等式就已经无法处理了。
从另外一个方式考虑。
上面我们加的边,其实和flow是完全一样的。
我们实际上可以将之前的看做flow,一个request就是(t->s)的上下界为1的流。
而我们跑一个最小费用可行流,问题就是仍然不连通,即第二步还没做。那就跑mst即可