最小平均重量循环 - 直观解释

时间:2015-02-17 22:27:08

标签: c++ graph-theory cycle backtracking pruning

在有向图中,我们正在寻找具有最低平均边权重的周期。例如,具有节点1和2的图表,其长度为2的1到2以及长度为4的2到1的最小平均周期为3。

不是寻找复杂的方法(Karp),而是通过修剪解决方案进行简单的回溯。当当前运行平均值大于最佳找到的平均重量周期成本时,给出一个解释为“可解决带有重要修剪的回溯。”

但是,为什么这种方法有效?如果我们处于一个循环的中途并且重量超过最佳找到的平均值,那么在重量较小的情况下,我们是否可能达到当前周期可能低于最佳平均值的情况?

编辑:以下是一个示例问题:http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=2031

1 个答案:

答案 0 :(得分:2)

让给定图形的最优解是具有平均边权重X的循环。

边缘e_1e_2 ... e_n有一些最佳周期,avg(e_i) = X

对于我的证明,我假设所有索引都是模n,因此e_(n + 1)e_1

让我们说我们的启发式无法找到这个解决方案,这意味着:对于每个i(我们首先采取的任何边缘)都存在j(我们跟随i的所有边缘至目前为止je_i ... e_j序列中的平均边权重大于X(启发式修剪此解决方案)。

然后我们可以证明平均边缘权重不能等于X.让我们采用最长的连续性子序列,这个子序列不是由启发式修剪的(每个元素的平均边缘权重不大于X)。至少有一个e_i <= X,因此存在这样的子序列。对于此类子序列的第一个元素e_kpavg(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_pe_k'...e_p'等覆盖,每个子序列的平均边权重大于X.所以我们与avg(e_i) = X

相矛盾

关于你的问题:

  

如果我们在一个周期的中途,重量超过最佳   找到了意思,我们可以用较小的重量边缘   达到我们当前周期可能低于最佳周期的情况   找到了意思?

当然是。但我们可以安全地修剪这个解决方案,因为稍后我们将发现从另一个边缘开始的相同循环,这将不会被修剪。我的证明表明,如果我们考虑图中的每个可能的周期,我们迟早会找到一个最佳周期。