K-server问题:
给定一张图G, 某些点发出请求,此时需要一个server从一个点移动到请求点。(如果请求点本身就有server在,则不需要移动)
greedy:
令最近的那个server移动,但是效果并不好。考虑A,B,C三点,如果AB比较远,一个server在A, 另一个在C,如果请求都是B,C,则总是右边的server不断移动,而最优解是一个在B, 一个在C,不需要移动。
1维DC算法:
1.如果请求点在所有server同一侧,则令离其最近的server移动
2.如果请求点在两个server之间,则同时向请求点移动,直到一个server到达未知。
算法完成度: k
证明:势能函数为 Φ = k M + ∑ \Phi=kM+\sum Φ=kM+∑,计算一次势能的大小是OPT走一步,DC走一步势能之和。
M是OPT和DC算法server位置的最优匹配的cost。
∑ \sum ∑是DC算法任意两个server的距离之和,两个server只算一次距离。
如果证明以下两点:
1.OPT移动d, 势能函数最多增加kd
2.DC移动d, 势能函数最多减少d
则一次移动,势能函数先增加后减少,最后大于0,说明:
Φ n − Φ 0 = k O P T − D C > 0 \Phi_n-\Phi_0=kOPT-DC>0 Φn−Φ0=kOPT−DC>0,
整体来看,由于OPT的移动导致了整体势能增加了kOPT,由于DC的移动导致了整体势能减小了DC,而势能之差是正值,说明DC<kOPT
对于1,OPT移动导致匹配大小增加了d, 而 ∑ \sum ∑ 不变,因此势能增加kd
对于2,如果一个点移动,则M减小了d, 而 ∑ \sum ∑增加了(k-1)d,因此势能减小d
如果两个点同时移动,则一个点导致M减小了d, 另一个点导致M可能最多增加d,因此M至少是不变的。
两个点对于其他点的影响抵消了,只有两个点自己距离减小了2d,因此势能减小了2d, 满足条件。
由此可见,我们凑势能函数的时候:
1.前半部分的匹配不能动,修改的是后半部分的距离
2.距离:如果一个点运动,则距离可以增加,因为此时匹配是减小的,如果两个点同时运动,距离必须减小,因此此时匹配是不变的。