旅行商问题

本文介绍了旅行商问题(TSP),包括其定义、问题抽象及两种求解方法:枚举法和动态规划法。TSP问题的目标是寻找一条路径,使得旅行商从起点出发访问每个城市恰好一次后返回起点,且总路径长度最短。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     旅行商问题(Traveling Saleman Problem,TSP)又译为旅行推销员问题、货郎担问题,简称为TSP问题,是最基本的路线问题,该问题是在寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。最早的旅行商问题的数学规划是由Dantzig(1959)等人提出。

  • 问题描述

由n个城市组成的网络,编号为V1,V2,....,Vn, Dij 表示Vi到Vj的距离(或时间,费用等),一般Dij ≠ Dji,一个推销员从V1开始,访问每个城市一次且仅一次,然后返回V1。这个推销员如何选择线路,才能使行程最短?

  • 问题抽象

一个有向图G(V,E),从某个顶点出发,经过每个结点一次且仅一次,返回出发结点。对于任意Vi,Vj ∈ V , 存在Eij和Eji,0 < Eij < ∞ ,0 < Eji < ∞,如果没有此条件,问题有可能无解,也就是说,此图是一个有向完全图。

  • 问题求解

(1)枚举法

相当于对V1,V2,V3,....,Vn做圆周排列,圆周排列为n!/n = (n-1)!,也即有(n-1)!条路径,需要(n-1)(n-1)!次加法,(n-1)!-1次比较。

(2)动态规划

令f(Vi ; V)表示结点从结点Vi出发,遍历V中的点一次且仅一次,然后返回V1的最短距离,其中V是某些结点构成的集合,且V1,Vi \notin V。

多段判决公式: f(Vi ; V ) = min { Dij + f(Vj ; V\{Vj} }  (Vj ∈ V)

因此问题就成了求 f(V1 ; { V2,V3,V4,...,Vn} } 的最小值


本文转自nxlhero 51CTO博客,原文链接:http://blog.51cto.com/nxlhero/696905,如需转载请自行联系原作者

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值