最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 最短路径问题是组合优化领域的经典问题之一,它广泛应用于计算机科学、交通工程、通信工程、系统工程、运筹学、信息论、控制理论等众多领域。Dijkstra算法是经典的最短路径算法。
算法具体的形式包括:(推荐学习:PHP视频教程)
确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。
确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。
确定起点终点的最短路径问题 - 即已知起点和终点,求两结点之间的最短路径。
全局最短路径问题 - 求图中所有的最短路径。
Dijkstra算法
Dijkstra算法是经典的最短路径算法,其基本思想是:设置一个集合S存放已经找到最短路径的顶点,S的初始状态只包含源点v,对vi∈V-S,假设从源点v到vi的有向边为最短路径。以后每求得一条最短路径v, …, vk,就将vk加入集合S中,并将路径v, …, vk , vi与原来的假设相比较,取路径长度较小者为最短路径,重复上述过程,直到集合V中全部顶点加入到集合S中。使用该算法找到的是全局最优的最短路径,在网络节点数量大、网络边数较多时,存在内存占用大、时间复杂度高等不足,并且Dijkstra算法不能很好地解决含必经点约束的最短路径问题。
蚁群算法
蚁群算法是由Dorigo、Maniezzo和Colorni等于1991 年首先提出来的,它来源于蚂蚁寻食的行为。通过研究发现,蚂蚁个体之间是通过一种叫做信息素的外激素进行信息传递的。蚂蚁在行走过程中能感知周围信息素的强度, 并朝着信息素浓度高的方向移动,当某只蚂蚁发现食物时,它在回巢的过程当中,会在返回的路上释放信息素作为标记,同伴发现后会沿着此路寻找到食物。当同伴中多只蚂蚁都发现了食物但路径长短不同时,因为蚂蚁在短的路径上往返所需要的时间相对较小,所以单位时间内走过的蚂蚁越来越多,在这条路径上的信息素浓度就会越强,因此,该路径上的蚂蚁就会越来越多,逐渐选出一条最优的道路。
分类
可分成两个子问题,即单源最短路径问题和所有顶点对之间的最短路径问题。前者是找出从某一顶点出发到图中所有其他顶点的最短路径,主要算法有迪克斯彻算法等;后者是求图中每一对顶点之间的最短路径,主要算法有弗洛伊德算法等。
更多PHP相关技术文章,请访问PHP图文教程栏目进行学习!
以上是最短路径问题的详细内容。更多信息请关注PHP中文网其他相关文章!