10种算法一文打尽!基本图表算法的视觉化阐释


全文共2818字,预计学习时长8分钟

图源:unsplash

 

在社交媒体网络、网页和链接、GPS中位置和路线等真实场景中,图表已成为一种强大的建模和捕获数据手段,如果一组对象相互关联,则可以用图表来表示。

 

本文就将简要解释10个非常有助于分析和应用的基本图表算法。

 

首先,图表是什么?

 

图表由一组有限顶点或节点和一组连接这些顶点的边组成,如果两个顶点通过同一条边互相连接,则称之为邻接。下面是一些与图表相关的基本定义,可以参考图中示例。

 

·        顺序:图表中的顶点数

·        大小:图表中的边数

·        顶点度:入射到顶点的边数

·        孤立顶点:未连接到图中任何其它顶点的顶点

·        自循环:从顶点到自身的一条边

·        有向图:图中所有的边都有方向,来表示起点和终点

·        无向图:图的边无方向

·        加权图:图的边有权值

·        未加权图:图的边无权值

 

图1:图表术语的可视化

 

1.广度优先搜索

 

图2 :广度优先搜索(BFS)遍历动画

 

遍历或搜索是图表上执行的基本操作之一。在广度优先搜索(BFS)中,从特定某个顶点开始,在进入下一层的顶点前先探索它当前深度的所有相关信息。与树不同,图表可以包含循环(第一个和最后一个顶点是相同的路径)。因此,必须跟踪访问过的顶点。在实现BFS时,应使用队列数据结构。

 

图2是一个示例图的BFS遍历的动画,注意一下顶点如何被发现(黄色)和被访问(红色)。

 

应用:

 

·        用于社交网络搜索

·        用于确定最短路径和最小生成树

·        被搜索引擎爬网程序用于构建网页索引

·        用于查找对等网络(如BitTorrent)中的可用邻近节点

 

2.深度优先搜索

 

图3:为深度优先搜索(DFS)的遍历动画

 

在深度优先搜索(DFS)中,从某个特定顶点开始,回溯(backtracking)前,沿着每个分支尽可能搜索。DFS中,还需跟踪访问过的顶点。实现DFS时,使用堆栈数据结构来支持回溯。

 

图3对图2中使用的同一个示例图进行DFS遍历的动画,注意它如何遍历到深度和回溯。

 

应用:

 

·        用于查找两个顶点之间的路径

·        用于检测图中的循环

·        用于拓扑排序

·        用于解决只有一种解决方案的难题(例如迷宫)

 

3.最短路径

 

图4动画显示了从顶点1到顶点6的最短路径

 

从一个顶点到另一个顶点的最短路径是图形中的路径,因此应使移动边的权重之和最小。图4显示了一个动画,其中确定了图中顶点1到顶点6的最短路径。

 

算法:

 

·        Dijkstra的最短路径算法

·        贝尔曼福特(Bellman–Ford)算法

 

应用:

 

·        用于网络中最小延迟路径问题的解决。

·        用于在Google或Apple地图等软件中查找一个位置到另一位置的路线。

·        用于抽象机器中,通过不同状态之间的转换来确定达到某一目标状态的方法。例如,可以用来确定如何用最少走法赢得一场比赛。

4.循环检测

 

图5:一个循环

 

循环是指图中第一个顶点和最后一个顶点相同的路径。如果从一个顶点出发,沿着一条路径,最后到达起始点,那么这条路径就是一个循环。循环检测是检测这些循环的过程。图5展示了遍历一个循环的动画。

 

算法:

 

·        弗洛伊德循环检测算法

·        布伦特算法

 

应用:

 

·        用于基于消息的分布式算法

·        用于使用集群上的分布式处理系统处理大规模图表

·        用于检测并发系统中的僵局

·        在加密应用程序中用于确定能够将消息映射到相同加密值消息的密钥

 

5.最小生成树

 

图6.显示最小生成树的动画

 

最小生成树是图表边的子集,它连接所有边权值最小和的顶点,不包含任何循环。图6是一个获得最小生成树过程的动画。

 

算法:

 

·        普林演算法

·        克鲁斯卡尔算法

 

应用:

 

·        用于在计算机网络中构建广播树

·        用于基于图表的聚类分析

·        用于图像分割

·        用于社会地理领域的区域化,将区域划分为相邻区域。

 

6.强连通分量

 

图7:强连通分量

 

如果图表中的每个顶点都能通过其他顶点到达,那么这个图就是强连通的。图7包含三个强连接分量,顶点分别用红色、绿色和黄色表示。

 

算法:

 

·        Kosaraju算法

·        Tarjan强连通分量算法

 

应用:

 

·        用于计算Dulmage Mendelsohn分解,是二分图表边的一种分类。

·        用于社交网络中,根据共同爱好,发现并推荐具有密切联系的人。

 

7.拓扑排序

 

图8:图中顶点的拓扑排序

 

图表的拓扑排序是对其顶点进行线性排序,因此对于排序中的每条有向边(u, v),顶点u都在v之前。图8显示了顶点(1、2、3、5、4、6、7、8)的拓扑排序示例。可以看到,顶点5应在顶点2和3之后。同样,顶点6应该在顶点4和5之后。

 

算法:

 

·        卡恩算法

·        基于深度优先算法

 

应用:

 

·        用于指令调度

·        用于数据序列化

·        用于确定要在生成文件中执行的编译任务的顺序

·        用于解析链接器中的符号依赖关系

 

8.图着色

 

图9:顶点着色

 

图着色指的是在保证一定条件下给图的元素分配颜色,顶点着色是最常用的图形着色技术。在顶点着色中,我们尝试用k种颜色给图的顶点着色,任何两个相邻的顶点颜色都不相同。其他着色技术包括边缘着色和面部着色。图的色数是为图着色所需颜色的最小数目。图9显示了用4种颜色为顶点着色。

 

算法:

 

·        使用广度优先搜索或深度优先搜索的算法

·        贪婪着色

 

应用:

 

·        用于制定时间表

·        用于分配移动无线电频率

·        用于建模和求解数独游戏

·        用于检查图是否为二部图

·        用于在相邻国家或州的地图上用不同颜色着色

 

9.最大流量

 

图10:确定最大流量

 

可以将一个图建模为以边权值作为流量容量的流网络。在最大流量问题中,必须找到能获得最大可能流量速率的流动路径。图10是一个确定网络的最大流量和最终流量值的动画示例。

 

算法:

 

·        Ford-Fulkerson算法

·        Edmonds–Karp算法

·        Dinic算法

 

应用:

 

·        用于航空公司调度,安排航班机组人员。

·        用于图像分割,查找图像中的背景和前景。

·        用来淘汰那些无法赢得比赛、无法与当前队伍优秀者相匹敌的队员。

 

10.匹配

 

图11:二部图匹配

 

图表中的匹配是一组没有共同顶点的边(也就是说,任何两条都没有共同顶点)。如果一个匹配包含尽可能多顶点匹配的边的最大数量,那么这个匹配被称为最大匹配。图11显示了获得二部图的完全匹配动画,该二部图有两组顶点,分别用橙色和蓝色表示。

 

算法:

 

·        霍普克洛夫特-卡普(Hopcroft–Karp)算法

·        匈牙利(Hungarian)算法

·        开花算法

 

应用:

 

·        用于为新娘和新郎牵线搭桥(婚姻的稳定问题)

·        用于确定顶点覆盖率

·        用于交通理论中解决出行资源配置和优化问题

 

图源:unsplash

这10种基本图表算法应用广泛,你get了吗?

 


推荐阅读专题

留言点赞发个朋友圈

我们一起分享AI学习与发展的干货

编译组:齐鑫濛、李韵帷

相关链接:

https://towardsdatascience.com/10-graph-algorithms-visually-explained-e57faa1336f3

如转载,请后台留言,遵守转载规范

推荐文章阅读

ACL2018论文集50篇解读

EMNLP2017论文集28篇论文解读

2018年AI三大顶会中国学术成果全链接

ACL2017论文集:34篇解读干货全在这里

10篇AAAI2017经典论文回顾

长按识别二维码可添加关注

读芯君爱你

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值