旅行商问题(回溯算法)
回溯问题适合于解由向量的形式来构成的,这个向量空间中使用搜索的方法进行搜索,搜索使用宽度优先的方法。货郎问题又名旅行商问题,但其实更多教科书中更通用的叫法叫旅行商问题,下面来对旅行商问题使用回溯算法证明。
文章目录
- 一、问题描述
- 二、数学建模
- 三、实例
- 1、传统经典做法
- 2、回溯算法
- 四、总结
一、问题描述
有n个城市,已知任两个城市之间的距离,求一条每个城市恰好经过一次的回路,使得总长度最小 。
分析:
有n个城市,城市与城市之前有距离的,任意两个城市之间的距离是已知的,现在需要找一条回路,经过每一个城市1次,使得总长度最小,就相当于这个货郎在路途,或者旅行商的行路,遍历所有的城市去各个城市走一趟,但是城市不能重复,所以怎么走下来才能够使得总长度达到最小。
其实相当于把这些城市做一个排列,第一个城市指向k1所指向的城市,由城市k1走向城市k2,一直往下走,走到kn以后再回到k1形成一个闭环
二、数学建模
数学表达式中的C k1到C k2,这两个城市的距离用d来表示,走到最后一个城市再倒回来(从C kn到C k1),这个距离达到最小,就是我们要做的事情。
这个问题是有选择的,一定程度上讲,TSP也是优化问题,只要是涉及到有选择,选择的不同导致结果的不同,结果的不同要想法设法找出最好的选择,不管是调度问题、背包的装法问题还是这个城市排列的问题,现代的智能优化算法不再使用精确的解,而是找到一个近似最精确的解就可以了。
三、实例
1、传统经典做法
从第1个城市走到第2个城市,从第2个城市走到第4个城市,从第4个城市到第3个城市然后再回来。
C={1,2,3,4}
d(1,2)=5, d(1,3)=9,
d(1,4)=4, d(2,3)=13,
d(2,4)=2, d(3,4)=7
解:< 1,2,4,3 > ,
长度= 5 + 2 + 7 + 9 = 23
这是其中一个解,最后的解得到的是城市的排列向量,上面原始的数据每两个城市之间的距离都是给出的。
2、回溯算法
假定每个城市都有连接,回溯算法的实现也是一种搜索,首先对于第一个城市出发,第1个城市和2,3,4城市相连,这个时候做选择,选择任何一条路径往下走,走到第2个城市,又有两种选择:到第4个城市,或者到第3个城市。每走到一个城市就选相当于前面已经走过的城市就不用再选择了,就从剩下的城市中去选。
一开始选定任何一个出发点出发,接下来又n-1个城市可以去选择,当你走到任何一个点之后,接下来又有n-2个城市可以去选择,……一直到最后只有1种选择,就是唯一的选择:回去。所以总的路径有(n-1)!
种,每到叶结点的路径就是城市间的路径。
表示为树,称之为排列树,有(n-1)!片树叶
其实我们要找的就是在所有的排列树叶结点中去找最小的那个,所以搜索空间是相当大的。
四、总结
- 解:向量
- 搜索空间:树,可能是n叉树、子集树、排列树等等,树的结点对应于部分向量,可行解在叶结点
- 搜索方法:深度优先, 宽度优先, …
跳越式遍历搜索树,找到解
旅行商问题(回溯算法)相关推荐
- 【回溯算法】旅行商问题--TSP问题
[问题描述] 一销售商从n个城市中的某一城市出发,不重复地走完其余n-1个城市并回到原出发点,在所有可能的路径中求出路径长度最短的一条.本题假定该旅行商从第1个城市出发. 输入 对每个测试例,第1行有 ...
- 【数据结构与算法】【算法思想】回溯算法
贪心算法 回溯算法 分治算法 动态规划 回溯算法思想应用广泛,除了用来指导深度优先搜索这种经典算法设计之外,还可以用在如正则表达式匹配,编译原理中的语法分析等. 除此之外,很多经典的数学问题都可以用回 ...
- 回溯算法:从电影蝴蝶效应中学习回溯算法的核心思想
回溯算法:从电影<蝴蝶效应>中学习回溯算法的核心思想 数独.八皇后.0-1背包.图的着色.旅行商问题.全排列问题都能用到 理解"回溯算法" 回溯的思想,类似枚举搜索,枚 ...
- 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想
------ 本文是学习算法的笔记,<数据结构与算法之美>,极客时间的课程 ------ 我们在深度和广度优先算法提到,深度优先搜索算法利用的是回溯算法思想.这个算法思想非常简单,但是应用 ...
- 极客时间——数据结构与算法(39) 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想
转载地址:https://time.geekbang.org/column/article/74287 我们在第 31 节提到,深度优先搜索算法利用的是回溯算法思想.这个算法思想非常简单,但是应用却非 ...
- 数据结构与算法_04_回头是岸依好汉(回溯算法)
数据结构与算法,系列文章传送地址,请点击本链接. 目录 一.怎么理解回溯算法 二.经典应用 1.0-1 背包问题 2.正则表达式 3.八皇后问题 一.怎么理解回溯算法 回溯算法的理解:回溯算法,顾名思 ...
- python回溯算法_回溯算法经典问题及python代码实现
2. 0-1背包问题 # 0-1 bag problem import sys def f(no, cur_mass, things, num): global cur_max if no == nu ...
- 回溯算法,模板,拔河,旅行商,连续邮资问题题解
文章目录 回溯算法模板 递归回溯 迭代回溯 子集树 排列树 题目 拔河问题 旅行商问题 连续邮资问题 回溯算法模板 递归回溯 回溯法对解空间做深度有限搜索,因此在一般情况下可用递归函数来实现回溯法如下 ...
- 算法整理八——回溯算法
目录 一.概述 二.素数环问题 三.n个数中取出任意r个数进行排列 四.整数划分问题/自然数拆分(递归方法也可以实现,见递归部分) 五.装载问题(最大装载量) 六.0-1背包问题 七.n皇后问题 八. ...
- 39.回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想
文章目录 1. 如何理解"回溯算法"? 2. 两个回溯算法的经典应用 2.1 0-1背包 2.2 正则表达式 回溯算法解决,比如数独.八皇后.0-1背包.图的着色.旅行商问题.全排 ...
最新文章
- 算法------二叉树的层序遍历
- IE6-IE9不支持table.innerHTML的解决方法分享
- 五、畸变矫正—让世界不在扭曲
- windows远程连接linux-安装xfce界面,ubuntn添加新用户
- 也来谈谈这致命的手机充电器
- 动态代理的两种方式_一文帮你掌握Java中的动态代理
- 手机没信号突然无服务器,OPPO手机没信号怎么办?解决OPPO手机突然没信号的方法...
- 12星座哪些人会重友轻爱?
- 使用Cisco思科模拟器进行三层交换机配置
- MongoDB应用记录
- Win10安装应用或打开应用时提示“用户账户控制 为了对电脑进行保护,已经阻止此应用”
- php小红针有副作用吗,hph小红针精华液怎么样?hph小红针精华液测评
- Premiere Pro CS4\CS5\CS6\CC2015\CC2017\CC2018\CC2019软件安装教程
- 烟台大学计算机学院王文学,杨玉军-烟台大学 数学与信息科学学院
- Photoshop文字特效——炫彩效果文字
- 什么是磁盘阵列 磁盘阵列
- 产业安全专家谈 | 数字化转型过程中,企业如何建立顶级反欺诈能力?
- JZOJ3238. 超空间旅行
- F2FS nat entry涉及的数据结构(linux 5.18.11)
- IT十年人生过客2-毕业季