图源: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了吗?

近期开班情况

课程详情请扫码咨询

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

  1. [国密算法]一文了解国密算法

    国密算法 概述 1 SM1对称密码 2 SM2椭圆曲线公钥密码算法 3 SM3杂凑算法 4 SM4对称算法 5 SM7对称密码 6 SM9标识密码算法 7 ZUC祖冲之算法 总结 算法名称 算法类别 ...

  2. c语言常用滤波算法,10种常用滤波算法C实现.c

    /* 10种简单的数字滤波C语言源程序算法 假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad(); 1.限副滤波 */ /*  A值可根据实际情况调整 val ...

  3. 判别两棵树是否相等 设计算法_一文看懂生成对抗网络 - GANs?(附:10种典型算法+13种应用)...

    生成对抗网络 – GANs 是最近2年很热门的一种无监督算法,他能生成出非常逼真的照片,图像甚至视频.我们手机里的照片处理软件中就会使用到它. 本文将详细介绍生成对抗网络 – GANs 的设计初衷.基 ...

  4. 一文看懂「生成对抗网络 - GAN」基本原理+10种典型算法+13种应用

    生成对抗网络 – Generative Adversarial Networks | GAN 文章目录 GAN的设计初衷 生成对抗网络 GAN 的基本原理 GAN的优缺点 10大典型的GAN算法 GA ...

  5. Python 实操案例:一文详解10种聚类算法

    聚类或聚类分析是无监督学习问题.它通常被用作数据分析技术,用于发现数据中的有趣模式,例如基于其行为的客户群.有许多聚类算法可供选择,对于所有情况,没有单一的最佳聚类算法.相反,最好探索一系列聚类算法以 ...

  6. 数据科学家最常用的10种算法

    最新的KDnuggets调查统计了数据科学家们实际工作中最常使用的算法,在大多数学术和产业界,都有惊人发现哦! 根据Gregory Piatetsky, KDnuggets,最新的调查问题是:在最近的 ...

  7. tensorflow玻尔兹曼机_资源 | 10种深度学习算法的TensorFlow实现

    原标题:资源 | 10种深度学习算法的TensorFlow实现 选自 Github 作者:blackecho 机器之心编译 参与:吴攀 这个 repository 是使用 TensorFlow 库实现 ...

  8. 10种Python聚类算法完整操作示例(建议收藏

    来源:海豚数据科学实验室 著作权归作者所有,本文仅作学术分享,若侵权,请联系后台删文处理 !!文末附每日小知识点哦!! 聚类或聚类分析是无监督学习问题.它通常被用作数据分析技术,用于发现数据中的有趣模 ...

  9. python 散点图聚类,【聚类算法】10种Python聚类算法完整操作示例(建议收藏

    点击上方,选择星标,每天给你送干货! 来源:海豚数据科学实验室著作权归作者所有,本文仅作学术分享,若侵权,请联系后台删文处理 聚类或聚类分析是无监督学习问题.它通常被用作数据分析技术,用于发现数据中的 ...

最新文章

  1. 【ACM】杭电OJ 1003。
  2. 使用OkHttp3之Websocket实现长连接
  3. 03-JDBC学习手册:JDBC中几个重要接口和异常处理
  4. mysql将系统权限授予用户_mysql创建用户并授予权限
  5. appium python unittest_appium+python+unittest自动化测试
  6. 【Leetcode】Python实现字符串转整数 (atoi) - 详细备注,保证小白看懂
  7. 字节跳动第三轮技术面,Java篇
  8. qt 进度栏_HTML5进度栏
  9. 实验报告四 201521430002 张实
  10. JSOI2018冬令营游记总结(迁移自洛谷博客)
  11. C#抓取网页数据、分析并且去除HTML标签(转载)
  12. python绘制密度散点图
  13. pycharm的安装,简单使用
  14. 2022茶艺师(中级)考试模拟100题及模拟考试
  15. 软件设计模式与体系结构实验——2.1-1(2)(抽象)工厂模式的应用
  16. 基于C语言实现的足球信息查询系统 课程报告+项目源码+演示PPT+项目截图
  17. SAP BP最佳业务实践
  18. linux强大的convert命令(可以对图像做各种处理!)
  19. php查询数据库表中的id个数,GitHub - xindong/easy-total: 一个可以对预先设定的sql语句进行实时数据统计并输出结果的服务...
  20. win7提权system与后门

热门文章

  1. fgets()和gets()函数的区别
  2. NOI2016酱油记
  3. 无线通信模块定点传输-点对点的具体传输应用
  4. Android 基于Zxing二维码扫描的光速实现
  5. MFC实现弹出模态对话框和非模态对话框(基于对话框)
  6. devops之gcp core infrastructure fundamental, 存储
  7. memsql 基本完全免费了
  8. LS1021ATWR开发板启动日志分析
  9. 东软睿驰标准化域控制器产品正式发布
  10. The Lion and the Unicorn: Socialism and the English Genius--PartⅠ