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

C++ 最小平均重量循环-直观解释,c++,graph-theory,cycle,backtracking,pruning,C++,Graph Theory,Cycle,Backtracking,Pruning,在有向图中,我们寻找平均边权重最低的循环。例如,具有节点1和节点2且路径为1到2的长度为2,路径为2到1的长度为4的图的最小平均循环为3 不是寻找一个复杂的方法(Karp),而是一个简单的回溯wtih修剪解决方案。解释为“当当前运行平均值大于最佳发现的平均重量周期成本时,可通过回溯和重要修剪解决。” 然而,为什么这种方法有效?如果我们在一个周期的中途,并且权重超过了最佳发现的平均值,那么在权重边缘较小的情况下,我们不可能达到当前周期低于最佳发现的平均值的情况吗 编辑:这里有一个示例问题:让给定图

在有向图中,我们寻找平均边权重最低的循环。例如,具有节点1和节点2且路径为1到2的长度为2,路径为2到1的长度为4的图的最小平均循环为3

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

然而,为什么这种方法有效?如果我们在一个周期的中途,并且权重超过了最佳发现的平均值,那么在权重边缘较小的情况下,我们不可能达到当前周期低于最佳发现的平均值的情况吗


编辑:这里有一个示例问题:

让给定图形的最佳解决方案是一个平均边权重为X的循环

有一些边
e_1
e_2
的最佳循环<代码>e_n,使得
平均值(e_i)=X

为了证明,我假设所有的索引都是模n,所以
e_(n+1)
e_1

假设我们的启发式算法找不到这个解决方案,这意味着:对于每个
i
(无论我们先取什么边)都存在这样的
j
(我们跟踪了从
i
j
的所有边)序列中的平均边权重
ei
e_j
大于X(启发式修剪此解决方案)

然后,我们可以证明平均边权重不能等于X。让我们取一个最长的连续子序列,该子序列不被启发式修剪(每个元素的平均边权重不大于X)。至少有一个
e_i X
。我们首先考虑这样的
p
。现在让我们取
k'=p+1
,再取一个
p'
。我们将重复此过程,直到再次达到初始的
k
。Final
p
可能不会超过initial
k
,这意味着Final子序列包含initial
[e_k,e_p-1]
,这与我们对
e_k
的构造相矛盾。现在,我们的序列
e_1
<代码>e_n完全被不重叠的子序列所覆盖
e_k。。。e_p
e_k'…e_p'
等,它们的平均边权重都大于X。因此我们有一个矛盾,即
avg(e_i)=X

关于你的问题:

如果我们在一个循环的中途,体重超过了最佳水平 我的意思是,有了小重量的边缘,我们不可能 达到当前周期低于最佳周期的情况 你的意思是什么


当然是。但是我们可以安全地删减这个解决方案,因为稍后我们将从另一个边缘发现相同的循环,而这个边缘不会被删减。我的证明表明,如果我们考虑图中的每个可能的循环,迟早我们会找到一个最佳循环。< /P> @非理性人如果需要使用C++的STL库来解释,我可以理解。你熟悉BFS/DFS吗?是的,熟悉BFS、DFS、递归、DP,这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的提问的地方。@jww如果图论不是编程,那么什么是编程