算法---图
Posted nxf-rabbit75
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法---图相关的知识,希望对你有一定的参考价值。
一、图的基础知识
1.连通图与非连通图
连通图(Connected Graphs)指图内任意两个节点间,总能找到一条路径连接它们,否则,为非连通图(Disconnected Graphs)。也就是说,如果图中包含岛(Island),则是非连通图。如果岛内的节点都是连通的,这些岛就被成为一个部件(Component,有时也叫 Cluster)。
有些图算法在非连通图上可能产生无法预见的错误。如果我们发现了未预见的结果,可以首先检查图的结构是否连通。
二、图算法
- 路径搜索算法
- DFS & BFS
- 最短路径
- 最小生成树
- 随机游走
- 中心性算法
- Degree Centrality
- Closeness Centrality
- Betweenness Centrality
- PageRank
- 社群发现算法
- Measuring Algorithm
- Components Algorithm
- Label Propagation Algorithm
- Louvain Modularity Algorithm
1.路径搜索算法
(1)BFS和DFS
BFS 从选定的节点出发,优先访问所有一度关系的节点之后再继续访问二度关系节点,以此类推。DFS 从选定的节点出发,选择任一邻居之后,尽可能的沿着边遍历下去,知道不能前进之后再回溯。
(2)最短路径
计算给定的两个节点之间最短(最小权重和)的路径。算法能够实时地交互和给出结果,可以给出关系传播的度数(degree),可以快速给出两点之间的最短距离,可以计算两点之间成本最低的路线等等。
应用场景:
- 导航:谷歌、百度、高德地图均提供了导航功能,它们就使用了最短路径算法(或者非常接近的变种);
- 社交网络关系:当我们在 LinkedIn、人人(暴露年龄了)等社交平台上查看某人的简介时,平台会展示你们之间有多少共同好友,并列出你们之间的关系。
算法:
- 最常见的最短路径算法来自于 1956 年的 Edsger Dijkstra。Dijkstra 的算法首先选择与起点相连的最小权重的节点,也就是 “最临近的” 节点,然后比较起点到第二临近的节点的权重 与 最临近节点的下一个最临近节点的累计权重和从而决定下一步该如何行走。可以想象,算法记录的
累计权重和
如同地理的 “等高线” 一样,在图上以 “波” 的形式传播,直到到达目的地节点。 - 最短路径算法有两个常用的变种:
- A (可以念作 A Star)algorithm和 Yen’s K-Shortest Paths。A algorithm 通过提供的额外信息,优化算法下一步探索的方向。
- Yen’s K-Shortest Paths 不但给出最短路径结果,同时给出了最好的 K 条路径。
(3)最小生成树
从一个给定的节点开始,查找其所有可到达的节点,以及将节点与最小可能权重连接在一起,形成的一组关系。它以最小的权重从访问过的节点遍历到下一个未访问的节点,避免了循环。
算法可以用于优化连接系统(如水管和电路设计)的路径。它还用于近似一些计算时间未知的问题,如旅行商问题。虽然该算法不一定总能找到绝对最优解,但它使得复杂度极高和计算密集度极大的分析变得更加可能。
应用场景:
-
旅行计划:尽可能降低探索一个国家的旅行成本;
-
追踪流感传播的历史:有人使用最小生成树模型对丙型肝炎病毒感染的医院暴发进行分子流行病学调查
算法:
- 最常用的最小生成树算法来自于 1957 年的 Prim 算法。Prim 算法与Dijkstra 的最短路径类似,所不同的是, Prim 算法每次寻找最小权重访问到下一个节点,而不是累计权重和。并且,Prim 算法允许边的权重为负。
(4)随机游走
参考文献:
【2】https://www.oreilly.com/library/view/graph-algorithms/9781492047674/
以上是关于算法---图的主要内容,如果未能解决你的问题,请参考以下文章
算法导论时间复杂度—排序算法图算法动态规划字符串匹配等时间复杂度小结
数据结构与算法图最短路径算法 ( Floyed 算法 | 图最短路径算法使用场景 | 求解图中任意两个点之间的最短路径 | 邻接矩阵存储图数据 | 弗洛伊德算法总结 )