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

devtools/2024/9/20 7:25:58/ 标签: 算法, 分类, 数据挖掘, 图数据库, GQL, 大数据, nosql

算法分类有哪些?综合当前学术界和工业界图计算领域目前最新的发展情况,把图算法划分为了以下大类:
中心性(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 ·


http://www.ppmy.cn/devtools/113149.html

相关文章

结构体初始和嵌套

1.介绍了各种基本类型(如整型、实型、字符型)、构造数据类型(如数组)和指针类型。但是,在解决一些较复杂的实际问题时,只使用这些数据类型是不够的。例如,在描述一本图书的信息时,图书编号、书名、专业领域、作者、出版社、单价等都是和图书相关的基本信息,这些信息是作为一个整…

【 前端优化】Vue 3 性能优化技巧

Vue 3 性能优化技巧:让你的应用飞起来! 大家好!今天我想跟大家分享一些关于Vue 3性能优化的实用技巧。Vue 3带来了很多新的特性和改进,但只有了解并应用这些优化技巧,我们才能真正发挥它们的优势,打造更高…

Java企业面试题3

1. break和continue的作用(智*图) break:用于完全退出一个循环(如 for, while)或一个 switch 语句。当在循环体内遇到 break 语句时,程序会立即跳出当前循环体,继续执行循环之后的代码。continue:用于跳过…

《论软件需求管理》写作框架,软考高级系统架构设计师

论文真题 软件需求管理是一个对系统需求变更了解和控制的过程。需求管理过程与需求开发过程相互关联,初始需求导出的同时就要形成需求管理规划,一旦启动了软件开发过程,需求管理活动就紧密相伴。 需求管理过程中主要包含变更控制、版本控制、…

【PostgreSQL】安装及使用(Navicat/Arcgis),连接(C#)

简介 PostgreSQL 是一个功能强大的开源对象关系数据库系统 下载地址 PostgreSQL: Downloads 由于我电脑上安装的是arcgispro3.1所以需要下载对应的postgresql版本 PostgreSQL 12 对应的 PostGIS 版本主要是 3.5.0 或更高版本。 安装 一般设置为postgresql 安装扩展插件 此…

Linux下的gcc与gdb

目录 Linux下的gcc与gdb 代码编译与链接 函数库 gdb介绍和安装 gdb基本使用指令 示例代码 debug模式和release模式 基本指令 进入gdb调试与显示调试代码 创建断点与删除断点 启用和禁用断点 执行代码 逐语句和逐过程调试 断点跳转 显示指定变量以及对应内容 打印变量的值 执行到…

《论负载均衡技术在Web系统中的应用》写作框架,软考高级系统架构设计师

论文真题 负载均衡技术是提升Web系统性能的重要方法。利用负载均衡技术, 可将负载(工作任务) 进行平衡、分摊到多个操作单元上执行, 从而协同完成工作任务, 达到提升Web系统性能的目的。 请围绕“负载均衡技术在Web系统中的应用”论题&…

C++比大小游戏

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #include <iostream> #include <Windows.h> using namespace std; int main() {int ir 1;char chparr[2] { 0 };int ip1 0;int ip2 0;int i 1;c…

手势识别&手势控制系统-OpenCV&Python(源码和教程)

项目特点 手部手势识别&#xff1a; 项目利用计算机视觉技术来识别手部的各种手势。这种技术可以应用于多种场景&#xff0c;比如人机交互、游戏控制、无障碍技术等。 自定义手势&#xff1a; 用户可以自定义手势&#xff0c;这意味着可以通过训练新的手势模式来扩展系统的功能…

Mybatis-plus-Generator 3.5.5 自定义模板支持 (DTO/VO 等) 配置

随着项目节奏越来越快&#xff0c;为了减少把时间浪费在新建DTO 、VO 等地方&#xff0c;直接直接基于Mybatis-plus 这颗大树稍微扩展一下&#xff0c;在原来生成PO、 DAO、Service、ServiceImpl、Controller 基础新增。为了解决这个问题&#xff0c;网上找了一堆资料&#xff…

【加密社】Solidity 中的事件机制及其应用

加密社 引言 在Solidity合约开发过程中&#xff0c;事件&#xff08;Events&#xff09;是一种非常重要的机制。它们不仅能够让开发者记录智能合约的重要状态变更&#xff0c;还能够让外部系统&#xff08;如前端应用&#xff09;监听这些状态的变化。 本文将详细介绍Solidity中…

数据中台建设(六)—— 数据资产管理

数据资产管理 随着企业数据越来越大&#xff0c;企业意识到数据是一种无形的资产&#xff0c;通过对企业各业务线产生的海量数据进行合理管理和有效应用&#xff0c;能盘活并充分释放数据的巨大价值。如果不能对海量数据进行有效管理和应用&#xff0c;企业堆积如山的数据给企…

day20JS-axios数据通信

1. 什么是axios axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端&#xff0c;简单的理解就是ajax的封装&#xff0c;只不过它是Promise的实现版本。 特性&#xff1a; 从浏览器中创建 XMLHttpRequests从 node.js 创建 http 请求支持 Promise API拦截请求和响应转…

初学Linux(学习笔记)

初学Linux&#xff08;学习笔记&#xff09; 前言 本文跳过了Linux前期的环境准备&#xff0c;直接从知识点和指令开始。 知识点&#xff1a; 1.目录文件夹&#xff08;Windows&#xff09; 2.文件内容属性 3.在Windows当中区分文件类型是通过后缀&#xff0c;而Linux是通过…

Java项目: 基于SpringBoot+mybatis+maven校园资料分享平台(含源码+数据库+答辩PPT+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven校园资料分享平台 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简…

Unity程序基础框架

概述 单例模式基类 没有继承 MonoBehaviour 继承了 MonoBehaviour 的两种单例模式的写法 缓存池模块 &#xff08;确实挺有用&#xff09; using System.Collections; using System.Collections.Generic; using UnityEngine;/// <summary> /// 缓存池模块 /// 知识点 //…

Qt 基础按钮布局管理

cpp public: Content(QWidget *parent0); ~Content(); QStackedWidget *stack; QPushButton *AmendBtn; QPushButton *CloseBtn; Baseinfo *baseInfo; Contact *contact; Detail *detail; // 打开 "Content.cpp" 文件&#xff0c;添加如下代码&#xff1a; Content:…

RabbitMQ(高阶使用)死信队列

文章内容是学习过程中的知识总结&#xff0c;如有纰漏&#xff0c;欢迎指正 文章目录 一、什么是死信队列&#xff1f; 二、死信队列使用场景 三、死信队列如何使用 四、打车超时处理 1.打车超时实现 以下是本篇文章正文内容 一、什么是死信队列&#xff1f; 先从概念解释上搞…

python教程(二):python数据结构大全(附代码)

Python 中数据结构的重要性不言而喻&#xff0c;它们是构建高效、可维护代码的基础。数据结构决定了如何存储、组织和操作数据。理解和使用合适的数据结构能够极大地提升程序的性能、简洁性以及代码的可读性。 Python 的基础数据结构有 4 种&#xff0c;分别是 列表 (list)、元…

Gateway学习笔记

目录 介绍&#xff1a; 核心概念 依赖 路由 断言 基本的断言工厂 自定义断言 过滤器 路由过滤器 过滤器工厂 自定义路由过滤器 全局过滤器 其他 过滤器执行顺序 前置后置&#xff08;&#xff1f;&#xff09; 跨域问题 yaml 解决 配置类解决 介绍&#x…