TSP(Traveling Salesman Problem)-----浅谈旅行商问题(动态规划,回溯实现)
1.什么是TSP问题
一个售货员必须访问n个城市,这n个城市是一个完全图,售货员需要恰好访问所有城市的一次,并且回到最终的城市。
城市于城市之间有一个旅行费用,售货员希望旅行费用之和最少。
完全图:完全图是一个简单的无向图,其中每对不同的顶点之间都恰连有一条边相连。

2.TSP问题前提
回朔法:把所有的解列出来,形成一棵树,利用剪枝深度优先进行遍历,遍历的过程记录和寻找最优解。(剪枝就是把一条再深搜下去也不是最优解的分支剪去)。
动态规划:把一个大问题拆分成小问题,把小问题的最优结果通过表保留,在新问题需要用到的时候可以直接获取。
PS:下面的图,文字中出现1,2,3,4分别表示城市1,城市2,城市3,城市4
3.回朔法实现TSP问题
上面提到回朔法就是把所有的解列出来,形成一棵树,上面的例子形成的树如下:我们假设城市1为起点

上面介绍回溯法就是把所有解列出来,然后剪枝深搜。那么我们需要解决的就是剪枝深搜了。剪枝深搜中最麻烦的就是找到何时剪枝的条件了。
首先我们假设不知道剪枝条件,先模拟深搜跑一遍。

从1深搜到4回到1,花费11,记录这个数值。接下来回溯,继续深搜。一步一步深搜的时候,遇到了一个特殊的时候:

还记得我们之前记录的最短花费为11吗,1->2->4->3 花费已经11了,3回到1,还需要进行花费,不管花费多少,反正已经比我之前找出来的要大了,那这个时候我再深搜下去就没什么意义了,所以可以进行剪枝。我不继续找了,直接回溯。
所以剪枝条件出来了: 走下一步的距离 + 之前已经走过的距离的总和 >之前算出的最短路径 。
4.动态规划实现TSP
上面介绍了动态规划就是把大问题分解成小问题。我们现在的大问题是从1 经过2,3,4 回到1花费最少,那么我们把他分解一下。
我们从1出发有三种方案



1、 从1出发,到2,然后再从2出发,经过[3,4]这几个城市,然后回到1,使得花费最少。
2、 从1出发,到3,然后再从3出发,经过[2,4]这几个城市,然后回到1,使得花费最少。
3、 从1出发,到4,然后再从4出发,经过[2,3]这几个城市,然后回到1,使得花费最少。
上面也提到了最优结果通过表来保留:设置一个二维的动态规划表dp , dp[1]{2,3,4}表示从1号城市出发,经过2,3,4 回到1花费最少。
要求上面三个方案的最小值意味:(D12表示1到2的距离,其他同理)
dp[1] [{2,3,4}] = min{ D12+dp[2]{3,4} ,D13+dp[3]{2,4} , D14+dp[4]{2,3}}
由于D12,D13,D14是已知的,那么我们现在的目的就是求dp[2]{3,4},dp[3]{2,4},dp[4]{2,3},
照猫画虎,我们可以列出:(这里只列出dp[2]{3,4} ,其他两个类似)
dp[2]{3,4} = min{ D23+dp[3]{4} ,D24+dp[4][3}}
dp[3]{4}]= D43+dp[4]{}
dp[4]{}=D41
那么经过慢慢的分解,我们知道了我们已知了从4到1的最小花费,那么就可以推出从3出发经过4回到1的花费。。。。。。。从而推出我们所要求的最优解。
5.时间复杂度分析
回溯法:
动态规划法:
TSP(Traveling Salesman Problem)-----浅谈旅行商问题(动态规划,回溯实现)的更多相关文章
- 【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 文章声明 此文章部分资料和代码整合自网上,来源太多已经无法查明出处,如侵犯您的权利,请联系我删除. 01 什么是旅行商问题(TS ...
- 多线程动态规划算法求解TSP(Traveling Salesman Problem) 并附C语言实现例程
TSP问题描述: 旅行商问题,即TSP问题(Travelling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须 ...
- 旅行商问题(Traveling Salesman Problem,TSP)的+Leapms线性规划模型及c++调用
知识点 旅行商问题的线性规划模型旅行商问题的+Leapms模型及CPLEX求解C++调用+Leapms 旅行商问题 旅行商问题是一个重要的NP-难问题.一个旅行商人目前在城市1,他必须对其余n-1个城 ...
- MIP经典问题:旅行商问题 (traveling salesman problem)
*本文主要记录和分享学习到的知识,算不上原创. *参考文献见链接. 旅行商问题.背包问题都是0-1规划问题中最为经典的问题. 通常来说,当我们学习并熟悉一种求解混合整数问题的技巧时,可以用这种技巧来求 ...
- Complexity and Tractability (3.44) - The Traveling Salesman Problem
Copied From:http://csfieldguide.org.nz/en/curriculum-guides/ncea/level-3/complexity-tractability-TSP ...
- 浅谈动态规划(Dynamic Programming)
利用Leetcode#198打劫家舍 浅谈动态规划 Origin:https://leetcode-cn.com/problems/house-robber/ 题目本身不难,就是一个动态规划的问题.在 ...
- Speeding Up The Traveling Salesman Using Dynamic Programming
Copied From:https://medium.com/basecs/speeding-up-the-traveling-salesman-using-dynamic-programming-b ...
- 浅谈P/NP问题
克雷数学研究所(Clay Mathematics Institute,CMI)是在1998年由商人兰顿·克雷(Landon T. Clay)和哈佛大学数学家亚瑟·杰夫(Arthur Jaffe)创立, ...
- PAT-1150(Travelling Salesman Problem)旅行商问题简化+模拟图+简单回路判断
Travelling Salesman Problem PAT-1150 #include<iostream> #include<cstring> #include<st ...
随机推荐
- 神经网络_线性神经网络 2 (Nerual Network_Linear Nerual Network 2)
1 LMS 学习规则 1.1 LMS学习规则定义 MSE=(1/Q)*Σe2k=(1/Q)*Σ(tk-ak)2,k=1,2,...,Q 式中:Q是训练样本:t(k)是神经元的期望输出:a(k)是神经元 ...
- topic的leader显示为none的解决办法
1.查看kafka的topic详细信息 bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --topic test --describe 配置delete. ...
- 手机touch事件及参数【转】(自己懒得写了,找了一篇摘过来)
[html5构建触屏网站]之touch事件 前言 一个触屏网站到底和传统的pc端网站有什么区别呢,交互方式的改变首当其冲.例如我们常用的click事件,在触屏设备下是如此无力. 手机上的大部分交互都是 ...
- 如何利用GitHub搜索敏感信息
如何利用GitHub搜索敏感信息 背景: 最近总是能听到同事说在GitHub上搜到某个敏感信息,然后利用该信息成功的检测并发现某个漏洞,最后提交到对应的SRC(安全应急响应中心)换点money.顿时心 ...
- [Swift]LeetCode96. 不同的二叉搜索树 | Unique Binary Search Trees
Given n, how many structurally unique BST's (binary search trees) that store values 1 ... n? Example ...
- [Swift]LeetCode710. 黑名单中的随机数 | Random Pick with Blacklist
Given a blacklist B containing unique integers from [0, N), write a function to return a uniform ran ...
- 一文掌握 Linux 性能分析之网络篇(续)
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 这是 Linu ...
- 并发编程(六)——AbstractQueuedSynchronizer 之 Condition 源码分析
我们接着上一篇文章继续,本文讲讲解ReentrantLock 公平锁和非公平锁的区别,深入分析 AbstractQueuedSynchronizer 中的 ConditionObject 公平锁和非公 ...
- centos系统安装第三方源EPEL
epel没安装呗 相当于扩展型软件仓库,EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fedora小组维护的一个软件仓库项目,为 ...
- git版本控制工具的使用
目录 git版本管理工具使用 一丶Git的下载与安装 1.windows下的git的下载与安装 2.linux下的git安装 二丶常用命令 三丶Git仓库 1.配置仓库信息 2.仓库的创建于管理 四丶 ...