算法读书笔记

《迷茫的旅行商》——一个无处不在的计算机算法问题

在图书馆遇到这本书的时候,我被它的标题吸引了。旅行商和算法之间有什么千丝万缕的关系呢?它们又会擦出什么样的火花呢?
其实,这本书是在研究一名旅行商如果要拜访一张城市列表中的所有城市,每座城市只去一次,最后回到出发地,怎么走才是最短路线的问题。这就是旅行商问题。通过这本书,William J. Cook将带领读者踏上一场数学之旅,跟随旅行商的脚步,从19世纪初爱尔兰数学家W. R. Hamilton最初定义该问题开始,一路奔向当今最前沿、最顶尖的解题尝试。
我在书中跟随作者回顾了旅行商问题的历史,探索了它的种种重要应用,比如基因组测序、设计计算机处理器、整理音乐等。书中分析了计算机如何抗衡规模宏大的旅行商问题,以及如何在不借助计算机的情况下独立破解难题。
这个问题就是求图的最短哈密尔顿回路问题,即令G=(V, E)是一个带权重的有向图,顶点集V=(v0, v1, …, vn-1)。从图中任一顶点vi出发,经图中所有其他顶点一次且只有一次,最后回到同一顶点vi的最短路径。
用动态规划的方式来解析,可以假设从顶点s出发,令d(i, V)表示从顶点i出发经过V(是一个点的集合)中各个顶点一次且仅一次,最后回到出发点s的最短路径长度。
那么:

  1. 当V为空集,那么,表示直接从i回到s了,此时d(i,V)=cis且 i不等于s。
  2. 如果V不为空,那么就是对子问题的最优求解。必须在V这个城市集合中,尝试每一个,并求出最优解,即d(i,V)=min(cik+d(k,V-k))。
    这样,我们就得到了动态规划的方程。

这里可以使用二维数组dp[N][M]来表示d(i,V),N表示城市的个数,M表示集合的数量。在最短路径顶点的计算中,先计算dp[N][M]数组,然后用dp数组来反向推出其路径。
这样的算法时间复杂度为O(2nn2)。
举个例子:
图
化为矩阵:
矩阵
那么:
过程
这里只画出了d(1,{2,3,4})的一部分,剩下的套路是一样的。
虽然这本书中作者讲述了很多轶事,将遍历路径求优算法发展的历史串联起来,而且提供了不少示意图帮助读者理解问题的实质,但是对于数学门外汉的我而言,学习曲线还是有点陡峭,有些关键知识点没有理解,仍然无法完全跟着作者的思路走一遍。读起来有点吃力。知其然,知道个大概思路和方向。如果让我自己建模,仍然会手足无措。但是跟着作者的思路并借助网络上的一些资料自己试着走一遍,那么对旅行商问题的理解就会更深一步。
《迷茫的旅行商》介绍了人类对于复杂性本质的理解与局限,将激励读者从此踏上求解这道迷人难题的漫漫征程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值