在有向图中,我们正在寻找具有最低平均边权重的周期。例如,具有节点1和2的图表,其长度为2的1到2以及长度为4的2到1的最小平均周期为3。
不是寻找复杂的方法(Karp),而是通过修剪解决方案进行简单的回溯。当当前运行平均值大于最佳找到的平均重量周期成本时,给出一个解释为“可解决带有重要修剪的回溯。”
但是,为什么这种方法有效?如果我们处于一个循环的中途并且重量超过最佳找到的平均值,那么在重量较小的情况下,我们是否可能达到当前周期可能低于最佳平均值的情况?
编辑:以下是一个示例问题:http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=2031
答案 0 :(得分:2)
让给定图形的最优解是具有平均边权重X的循环。
边缘e_1
,e_2
... e_n
有一些最佳周期,avg(e_i) = X
。
对于我的证明,我假设所有索引都是模n,因此e_(n + 1)
是e_1
。
让我们说我们的启发式无法找到这个解决方案,这意味着:对于每个i
(我们首先采取的任何边缘)都存在j
(我们跟随i
的所有边缘至目前为止j
,e_i
... e_j
序列中的平均边权重大于X(启发式修剪此解决方案)。
然后我们可以证明平均边缘权重不能等于X.让我们采用最长的连续性子序列,这个子序列不是由启发式修剪的(每个元素的平均边缘权重不大于X)。至少有一个e_i <= X
,因此存在这样的子序列。对于此类子序列的第一个元素e_k
,p
为avg(e_k ... e_p) > X
。我们首先考虑p
。现在让我们来k' = p + 1
并获得另一个p'
。我们将重复此过程,直到我们再次点击初始k
。最终p
可能无法超越初始k
,这意味着最终子序列包含初始[e_k, e_p - 1]
,这与我们e_k
的构造相矛盾。现在我们的序列e_1
... e_n
完全由非重叠子序列e_k ... e_p
,e_k'...e_p'
等覆盖,每个子序列的平均边权重大于X.所以我们与avg(e_i) = X
。
关于你的问题:
如果我们在一个周期的中途,重量超过最佳 找到了意思,我们可以用较小的重量边缘 达到我们当前周期可能低于最佳周期的情况 找到了意思?
当然是。但我们可以安全地修剪这个解决方案,因为稍后我们将发现从另一个边缘开始的相同循环,这将不会被修剪。我的证明表明,如果我们考虑图中的每个可能的周期,我们迟早会找到一个最佳周期。