我正在阅读Introduction to design and analysis of algorithms中的排列生成以及与旅行商问题的关系。
这里作者提到如下
我们可以在左边的先前生成的排列中插入n 向右或从右到左。事实证明,开始是有益的 将n插入12。 。 。 (n - 1)从右到左移动 然后每次{1,...的新排列时切换方向。 。 。 ,n - 1}需要处理。这种生成顺序的优点 排列源于它满足最小变化的事实 要求:每个排列都可以从它的直接获得 前身只交换了两个元素。
如果通过最小变化算法生成这样的排列,我们 可以从其长度计算新游览的长度 前身是恒定的而不是线性的。
我对上面的文字的问题:如果我们使用最小变化算法,我们如何在恒定时间内计算长度形式的前身?如果可能,请举例n=3
。
答案 0 :(得分:1)
假设您将元素b与元素e交换,奇怪的选择字母,因为我们假设b是路径的中间元素a-> b-> c并且e是路径的中间元素d-> e - >˚F
4条边消失,它们被4条新边取代。消失的是那些将b和e连接到他们的旧邻居的人。新的是a-> e,e-> c,d-> b和b-> f。
所以新的总长度是
old - d(a, b) - d(b, c) - d(d, e) - d(e, f) + d(a, e) + d(e, c) + d(d, b) + d(b, f)