常见图算法思想

1 最小生成树

生成树:图有n个结点,用n-1条边连接起来。
最小生成树:代价最小的生成树。

1.1 普里姆算法(Prim)

点扩展:有一个集合其他节点
刚开始,起点在这个集合中,找到到这个集合的最短距离的节点,将这个节点并入这个集合,以此类推直至将所有节点并入这个集合。此集合即最小生成树。例子如《大话数据结构》P250图7-6-6.
对稠密图有优势。

1.2 克鲁斯卡尔算法(Kruskal)

边扩展:有一个邻接矩阵,存储每条边的权值
按照边的权值顺序将各个节点连接(当形成环时跳过本次连接),以此类推直至将所有节点并入这个集合。此集合即最小生成树。例子如《大话数据结构》P254-P256.
对稀疏图有优势。

2 最短路径

最短路径:图中两个节点权值和最少的路径。

2.1 迪杰斯特拉算法(Dijkstra)

点扩展:有一个集合其他节点
通过不断选择距离起点最近的顶点,基于已求出的最短路径,求得更远的顶点的最短路径,直到覆盖图中所有顶点。有点像Prim算法,但不同之处在于Prim算法计算的是已访问集合到未访问集合中各点的距离;Dijkstra算法计算的是源点到未访问集合中各点的距离。

2.2 弗洛伊德算法(Floyd)

https://blog.csdn.net/Harington/article/details/81982299

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章