当前位置: 首页 > news >正文

图算法 | 图算法的分类有哪些?(下)

图算法的分类有哪些?综合当前学术界和工业界图计算领域目前最新的发展情况,把图算法划分为了以下大类:
中心性(Centrality)算法:如节点出入度、全图出入度、接近中心性、中介中心性、图中心性、调和中心性等。
相似度(Similarity)算法:如杰卡德(Jaccard)相似度、余弦相似度、欧几里得距离等。
连通性和紧密度(Connectivity)算法:如强弱连通分量、三角形计算、二分图、MST、全图k邻等。
拓扑链接预测(Topology&Connectivity)算法:共同邻居、AA指标、优先连接等。
传播与分类(Propagation & Categorization)算法:如LPA、HANP算法、k均值、鲁汶识别等。
图嵌入(Graph Embedding)算法:如随机游走、FastRP、Node2Vec、Struc2Vec、GraphSAGE等。需要指出的是,分类有助于我们梳理知识,但也并非一成不变。

有一些算法可能会横跨在多个分类中,例如MST既属于连通性和紧密度算法又属于拓扑链接预测算法。算法本身也会不断演进,推陈出新。有一些算法在发明之时做了一些假设,但是随着时代的变化,那些假设已不再适合了。仍以MST算法为例,它的最初目标是从一个顶点出发,使用权重最小的边连通与之关联的所有节点,该算法假设全图是连通的(即只有一个连通分量)​。而很多真实的场景中存在大量的孤点以及多个连通分量,此时算法就需要去适配这些情况,在算法调用接口及参数上就需要支持多顶点ID、允许指定权重对应的属性字段,以及支持限定返回结果集数量等。

图算法的分类(6种分类维度)​​​​​​

书接上文:图算法 | 图算法的分类有哪些?(上)-CSDN博客

3)按复杂度分类。可分为以下5类:
❑恒定时间。复杂度O(1)就是典型的恒定时间。比如,无论数据集大小,通过数组或向量数据结构访问任一顶点所需的时间恒定为O(1)。
❑线性时间。访问时间与输入数据集大小成正比,例如遍历全部顶点所需时间与数据集大小呈线性。
❑对数时间。典型的是二叉树(或多叉树)搜索类算法,比如在常见的数据库索引数据结构中,定位任一叶子节点所需的时间与数据集大小呈对数关系。显然,在数据集相同的情况下,对数时间要比线性时间更短。
❑多项式时间。从时间复杂度上比较,指数时间要比多项式时间更长。两者量化的区别用一个具体的例子来说明,如果数据量为N,多项式时间可能是aN3+bN2+1,而指数时间是N100,后者比前者复杂度更高。
❑指数时间。通常我们认为,在大数据集上,如果一个算法是指数时间复杂度,则不具备真正意义上的可实施性。因为计算复杂度可以理解为无穷大,问题无法在有限时间内得到解决。例如穷举式暴力搜索算法,其算法复杂度与输入数据集大小呈指数关系,穷举全部可能的结果并不现实,这时通常会采用近似算法把时间复杂度至少降低到多项式时间。

4)按实现方法分类。可分为以下5类:
❑递归与非递归。每一个算法都可以以递归或非递归的方式实现,区别在于实现算法的逻辑步骤以及具体使用的数据结构,进而导致具体的算法实现方式的效率有所不同。
❑串行与并行。几乎所有的图算法初始都是以串行的思路设计的,但是很多都可以通过并行(并发)来得到性能的大幅提升。
❑集中式与分布式。同上,分布式要求对算法的数据结构及系统架构进行大幅改造,有的算法进行简单改造就可以获得很好的分布式条件下的效率提升,但有些算法采用分布式可能会出现指数级的性能下降。因此,改造与否、如何改造是研究算法与系统架构设计的专业人士需要格外注意的地方。
❑确定性与非确定性。所谓启发式算法指的就是后者。
❑精确式与近似式。有一部分图算法可以采用近似求解的方式来使之前极高的算法复杂度得到指数级降低,从而达到资源消耗可控的目的。

5)按研究领域分类。领域划分通常没有明确的边界,且多个领域之间会有大量的重叠,因此这种划分方式并不固定。
❑搜索。搜索又可以细分为路径搜索、元数据搜索、子图(网络)搜索等。
❑排序。排序又可细分为元数据排序、路径长短排序、图规模排序等。
❑合并。在图查询与算法的计算过程中,合并是个极为常见的操作,具体的逻辑类似于合并排序(Merge Sort)算法,特别是在多线程并发情况下的算法实现。
❑数值分析。数值分析在本质上是一种数值化近似方式的算法,通过量化的方式来加速求解,比如,保险行业精算师的主要工作就是进行数值分析,以及金融业中的存贷款定价、风险量化分析等操作,都可以通过数值分析类算法来实现。而通过巧妙设计的图算法,可以让这些数值分析的准确度、效率与可解释性都远超之前基于机器学习、深度学习的方法。

一种可能得工业界图算法分类(工业界的图数据库厂商可能还会有不同的分类方法,图1 为5类)

· end ·

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • HTML 基础知识详解与代码示例
  • Vue3流程图插件-Vue Flow
  • 黑神话 Java,Solon v2.9.2 发布
  • 鸿蒙(API 12 Beta6版)【ArkGraphics 3D资源创建以及使用】方舟3D图形
  • pytest 生成allure测试报告
  • 网络安全 L2 Introduction to Cryptography 密码学
  • 技术接口:日志程序2
  • 今日leetCode 160.链表相交
  • Java 每日一刊(第4期):Java 23 即将发布
  • 基于“硅基”的AI数字人要闻直播
  • 乔迁新址,盛启新章!聚铭网络河北办事处盛大开业
  • el-table使用合计和固定列时,滚动条被覆盖区域无法拖拽问题
  • 解决vue3 useRoute无法获取get参数记录
  • 面试常见八股
  • 【MATLAB】数据和字符串类型转换
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Babel配置的不完全指南
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • isset在php5.6-和php7.0+的一些差异
  • Java新版本的开发已正式进入轨道,版本号18.3
  • leetcode98. Validate Binary Search Tree
  • overflow: hidden IE7无效
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • tweak 支持第三方库
  • 第2章 网络文档
  • 今年的LC3大会没了?
  • 老板让我十分钟上手nx-admin
  • 两列自适应布局方案整理
  • 如何在GitHub上创建个人博客
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 项目管理碎碎念系列之一:干系人管理
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 做一名精致的JavaScripter 01:JavaScript简介
  • Python 之网络式编程
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 带你开发类似Pokemon Go的AR游戏
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #ifdef 的技巧用法
  • #Z2294. 打印树的直径
  • #考研#计算机文化知识1(局域网及网络互联)
  • #数据结构 笔记一
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (20050108)又读《平凡的世界》
  • (七)Java对象在Hibernate持久化层的状态
  • (转)jdk与jre的区别
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET C# 使用 iText 生成PDF
  • .Net 垃圾回收机制原理(二)
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET是什么
  • .NET中两种OCR方式对比
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?