最短汉密尔顿回路算法c语言,【算法】浅谈最短哈密尔顿回路类问题的两种近似算法...

// 标题是糊弄人的

1. 问题引入

给出一张图,求其最短哈密尔顿回路,也就是 “旅行商问题”(Traveling Saleman Problem,TSP)

假设有一个旅行商人要拜访 $n$个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。

路径的选择目标是要求得的路径路程为所有路径之中的最小值。

这是一个著名的 NP-C(NP 完全)问题,也就是说——爆搜不可避

爆搜很简单,枚举一个排列表示第 $1, 2, 3, …, n$个经过的点,再判断距离就行了,取最小值

但是这样复杂度是 $O(n!)$级别的,即使 $n \leq 20$都是不可接受的

对于 $n \leq 20$左右的数据,可以用状态压缩动态规划求解,复杂度 $n ^ 2 2 ^ n$,可能需要常数上的优化

2. 模拟退火

模拟退火将热力学的理论应用到统计学中,一开始温度高,分子能量大,移动范围广,可以防止停留在局部最优解

到后面一步步降温,移动范围逐渐收敛,最终获取到的解一般较优

模拟退火解决 TSP 问题大概分为如下几部:

根据当前路径,随机生成一个新路径

比较当前路径与新路径,若新路径较优,则接受新路径,把当前路径替换成新路径

否则以 $e ^ {\Delta / T}$的概率接受新路径,其中 $\Delta$表示新路径长度与当前路径长度的差(为负数),$T$表示当前温度

若温度低于设定的最低温度,则退出算法

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值