双调旅行商问题 (Bitonic TSP)

问题描写叙述:

上述问题能够使用动态规划的方法来解决。

以下是解决思路的详细介绍:

1. 最优子结构:

如果d[i][j]表示从起点1出发到达i及j两个顶点的最短路程之和。

为此能够如果K为此段路程上与j相加的节点。则d[i][j] = d[i][k] + len[k][j]。

证明:若存在一个更短的路径d[i][k],则就应该存在更短的路径d[i][j]。这与如果矛盾,因此得证。
以下来寻找j相邻的节点,当中若i<j-1,则显然k=j-1,若i=j-1。则显然k属于(1,j-2)之间。为此得到例如以下的递推关系:
d[i][j] = d[i][j-1]+len(j,j-1) i<j-1;
d[i][j] = min(d[i][k] + len(k,j)),k属于(1,j-2)。
终于输出的d[n-1][n]就可以。

对于路径的输出,仅仅须要记录每次与j相邻的节点就可以,也即记录k的值。

详细实现稍后补充!!
时间: 2024-08-27 03:47:37

双调旅行商问题 (Bitonic TSP)的相关文章

百度之星资格赛——Disk Schedule(双调旅行商问题)

Disk Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2368    Accepted Submission(s): 333 Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取.然而.在现实中,这样的做法非常复杂. 我们考虑一个相对简单的

HDU 4824 双调旅行商问题

由于跳转一次需要400,大于在扇道内转一圈,所以应尽可能少的跳转扇道,就转换成了双调旅行商问题, 即从0区开始访问到最大的区域,再返回0区,所有中间点需走到一次 #include "stdio.h" #include "string.h" #include "math.h" #include "algorithm" using namespace std; struct node { int x,y; }a[1010]; in

POJ 2677(双调旅行商问题&lt;bictonicTSP&gt;

Tour Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3470 Accepted: 1545 Description John Doe, a skilled pilot, enjoys traveling. While on vacation, he rents a small plane and starts visiting beautiful places. To save money, John must dete

基于分支限界法的旅行商问题(TSP)

旅行推销员问题(英语:Travelling salesman problem, TSP)是这样一个问题:给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路.它是组合优化中的一个NP困难问题,在运筹学和理论计算机科学中非常重要. 分支限界法在上一篇Blog中我有简单说明,并给出了基于分支界限法的Dijkstra ,这篇文章里介绍一下基于分支限界法的TSP算法. 对于TSP,我们需要利用上界和下界来对BFS进行剪枝,通过不断更新上界和下界,尽可能的排除不符合需求的ch

旅行商问题(TSP)、最长路径问题与哈密尔顿回路之间的联系(归约)

一,旅行商问题与H回路的联系(H回路 定义为 哈密尔顿回路) 旅行商问题是希望售货员恰好访问每个城市一次,最终回到起始城市所用的费用最低,也即判断图中是否存在一个费用至多为K的回路.(K相当于图中顶点的个数) 由于售货员可以从某个城市到其他任何一个城市.因此,该问题对应的是一个完全图(设为G′).而关于判断哈密尔顿回路的图(设为G)并不一定为完全图,因此,在将哈密尔顿回路问题归约到旅行商问题时,定义一个费用函数(详情参考<算法导论第二版中文版>第626页. 通过这个费用函数,将判断G′是否存在

HDU2224&amp;POJ2677 双调旅行商问题

给出n个点,按X坐标升序给出,从1号点走到N号点再返回1号点所需的最小距离,要求所有点至少被走到一次 要求1->n的路上所经过的点X坐标升序 n->1路上所经过的点X坐标降序 具体详解参考:http://blog.csdn.net/xiajun07061225/article/details/8092247 #include "stdio.h" #include "string.h" #include "math.h" const d

基于分支限界法的旅行商问题(TSP)二

和上篇一样,考前写写伪代码,考完了补上具体的解释和代码. 状态{矩阵,结果集,下界} 全局结果集列表,全局上界初始为Infinite 建立一个heap,存储状态,出堆规则为拥有最小的下界. 利用reduced cost matrix 来把矩阵进行化简,把化简消耗作为下界,将初始状态加入heap 当heap不为空时 { 从heap中弹出一个状态,赋值给两个临时状态. 若该状态的下界大于等于全局上界,则return 遍历所有弧,选择删除则引起下界上升最大的弧 若使用该弧 { 更新下界 若已经遍历所有

POJ2677 Tour(DP+双调欧几里得旅行商问题)

Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3929   Accepted: 1761 Description John Doe, a skilled pilot, enjoys traveling. While on vacation, he rents a small plane and starts visiting beautiful places. To save money, John must

《算法导论》思考题15-1 双调欧几里得旅行商问题(动态规划)

欧几里得旅行商问题 是对平面上给定的n个点确定一条连接各点的最短闭合旅程的问题.图a给出了7个点问题的解,这个问题的一般形式是NP完全的,故其解需要多于多项式的时间. J.K.Bentley建议通过只考虑双调旅程来简化问题,这种旅程即为从最左点开始,严格从左到最右点,再严格地从最右点回到最左点.图b显示了同样的7个点的问题的最短双调路线,在这种情况下,多项式的时间的算法是有可能的. 描述一个确定最优双调路线的O(n^2)时间的算法.可以假设任何两点的x坐标都不相同. 解法: 读了很多遍这个题,也