最短路径搜索算法

 BFS与DFS

  • BFS:这是一种基于队列这种数据结构的搜索方式,它的特点是由每一个状态可以扩展出许多状态,然后再以此扩展,直到找到目标状态或者队列中头尾指针相遇,即队列中所有状态都已处理完毕。
  • DFS:基于递归的搜索方式,它的特点是由一个状态拓展一个状态,然后不停拓展,直到找到目标或者无法继续拓展结束一个状态的递归。

广度优先搜索-BFS

  它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域。

  适用于迷宫类问题。

  链接:http://blog.csdn.net/raphealguo/article/details/7523411

深度优先搜索-DFS

  http://blog.csdn.net/ns_code/article/details/19617187

Floyd-Warshall算法

  任意两个点之间最短路径。它的时间复杂度是O(N3)。求指定两点之间的最短路或者指定一个点到其余各个顶点的最短路径也是可行的。

  对于每一个节点k,我们检查Dis(i,k) + Dis(k,j) < Dis(i,j)是否成立。

  链接:http://developer.51cto.com/art/201403/433874.htm

Dijkstra(迪杰斯特拉)算法

  是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。

  Dijksra的算法是一个贪婪算法,时间复杂度是O(VLogV)(使用最小堆)。

  链接:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html

Bellman-Ford  在网络路由中,该算法会被用作距离向量路由算法。

  Bellman-Ford也比迪杰斯特拉算法更简单和同时也适用于分布式系统。但Bellman-Ford的时间复杂度是O(VE),E为边的个数,这要比迪杰斯特拉算法慢。

spfa算法

  时间复杂度为O(ke),k为所以顶点进队的平均次数,k一般小于等于2

  链接:http://www.360doc.com/content/13/1208/22/14357424_335569176.shtml

 

最小生成树问题

  Kruskal算法,贪心算法;

  Prim算法,其从某一源点出发,维持一个集合A(A内结点构成一棵树),算法每次选择从A出发到A外的结点中的一条权重最小的边,然后将这条边加入集合A中。 

 

http://blog.csdn.net/tostq/article/details/52733071

 

A*算法

  A*算法与BFS:可以这样说,BFS是A*算法的一个特例。对于一个BFS算法,从当前节点扩展出来的每一个节点(如果没有被访问过的话)都要放进队列进行进一步扩展。也就是说BFS的估计函数h永远等于0,没有一点启发式的信息,可以认为BFS是“最烂的”A*算法。

  链接:http://www.cppblog.com/mythit/archive/2009/04/19/80492.aspx

posted @ 2017-05-04 21:06  a梦想去柬埔寨  阅读(2407)  评论(0编辑  收藏  举报