图匹配算法(涵盖近似图匹配)
【图数据管理与挖掘-第四讲(子)图匹配算法(涵盖近似图匹配) 北京大学2021暑期-邹磊教授】https://www.bilibili.com/video/BV1zh411q7PW?vd_source=7c2b5de7032bf3907543a7675013ce3a
图同构:
定义:
给定一个query Q和图G,若存在一个内射函数,满足:
①
,点的标签一致

②
,边的标签一致

给定两个图Q和G,是否存在一个双射函数:
点相互对应映射
,Q中的边在G中有相互对应的边
,存在一对一满足的逆函数使G中两点对应的边在Q中也存在

目前为止子图同构问题仍是一个未知问题,无法证明是一个NP-complete问题,也无法找到一个多项式可解算法
应用:
将两个图像通过特征点提取的方法提取出一些特征点和它们之间的拓扑关系,构建出图,对上图进行匹配实质上是对下图进行比对

对化学结构式进行比对,将结构式定义为graph,对graph进行匹配

SPARQL的比对,在data graph找匹配

Cypher语言

Gremlin语言匹配,过程化和match的语义匹配

子图匹配是在这些语言基础上的一个基础算子
经典算法:
Ullmann Algorithms:
将图转换为连接矩阵,将判断Q是否为G的子图问题转化为它们表达的连接矩阵的关系


存在一个矩阵(定义中所讲的内设函数f),
矩阵为N(MA矩阵N*N)*M(MB矩阵M*M),对于Q中的每一个节点都要mapping到G中的节点,每一行中只有一个”1“,每一列中最多只有一个“1”

数学关系:
Q中的123对应G中的423

将MB中的423列取出来,并做一个行列变换,4对应第一列,2对应第二列,3对应第三列


若在MA中为1的位置在MC中的位置也为1,那么就认为f被找到,若找不到这样的MC就认为不存在这样的Q到G的一个子匹配


流程:
①创建M矩阵,M为N*M的矩阵,若Q中的第i个节点和G中第j个节点一致且Q中节点的度数小于G中节点的度数,标1

②进化M为,因为
要求一行只有一个1,转化为树搜索问题,有两个1,则随机把一个1划掉

满足一行只有一个1,一列最多只有一个1
③将②中得到的做测试,若该
对应则代表成立,不成立则需要做回溯;若为列举问题,则成立也需要做回溯

Neighborhood Connection Pruning:
若Q中第i个节点v可以匹配G中第j个节点u,意味着v的任何一个邻居一定能匹配u的某一个邻居
匹配:

不匹配:

则将对应的1的位置变为0

使用公式进行验证
![]()
VF2 Algorithms:
将寻找子图同构问题转化为状态转换的过程:Q当中的某个节点i匹配到G当中的某个节点j的一个状态,若包含所有节点则为所有匹配,只包含部分节点为部分匹配

状态转换过程:
当S3时G包含整个子图Q,则认为找到了子图匹配

如何寻找状态转换:
假设S表示为一种中间状态,Q(S)和G(S)分别表示为在该状态下Q和G中所包含的节点,找到Q(S)和G(S)的所有邻居,表示为NQ(S)和NG(S),寻找中间状态

提高效率产生的候选策略:
![]()

引入节点的邻接点点集有交集,则可以引入

对于某一状态,可能由多个不同的中间状态转化过来,包含不同的顺序,不同顺序对应的空间不同

Backtracking search-based Methods:
对经典算法做总结,是对搜索路径带有回溯的DFS搜索,首先对于某一个点产生候选集,第二步定义一个匹配顺序,不同算法中有不同的匹配顺序,根据顺序一步一步将节点添加进子集进行匹配,后期使用不同的优化策略

Multi-way Join for Subgraph Match:
还是在寻找Q和G的子匹配问题
T1表示所有能匹配u1u2之间的边,T2表示能匹配u1u3之间的边,T3表示匹配u2u3之间的边
实际上,要寻找包含所有边的匹配,于是对表做一个自然连接,若结果大于0表明存在这样的子图匹配,并且其所有的子图匹配为R
对所有空间的一个BFS搜索
Binary Join:
构造一个二叉左深的树

Worst Case Optimal Join:
以点为中心,寻找所有标签为x的节点,寻找节点的邻居,对每一行进行操作
一定情况下减少中间结果的大小
图的相似性:
定义:
当两个图的公共部分很多时,可以说这两个图比较相似
①induced subgraph(推导子图):给一个图G和一组点集S,将所有的两个端点都在S的边取出,有这些边和S点集组合成的图称为induced subgraph

②maximum common induced subgraph:C同构于G1和G2的某个induced subgraph,最大的含义表示包含的点的数目是最多的(不可以引入新的节点)

③maximum common edge subgraph:并不要求是推导子图,如下图,若为推到子图则cd边将被包含,而此时没有被包含,所以只是边图

Finding Maximal Common Induced Subgraph:
maximum clique-based algorithm(for MCIS):转换为完全图问题,定义在G1和G2上的一个乘积图表示为G1*G2=G#,G#中的点集表示为G1中的一个点和G2中的一个点对,该点对中的两点标签是一致的,对应边满足:


构成的每一个clique就是一个common induced subgraph
④Minimal Edit Distance:当两个图G1和G2相似时,通过多少步骤让两者转化为彼此,方法如下:

删除边,增加孤立点,连线 ,三个步骤

Node Substitution Semantic:
定义为一个match,从G1到G2的匹配是一个函数过程,点与点的匹配数目若不同,会引入虚拟点

在function f的作用下,找到G1中的每一个节点到G2的每一个节点的映射关系,在映射关系的作用下,若点与点的标签是一样的,则distance=0;若点与点的标签是不一样,distance=1。
虚拟点:与任何点的标签都不同

若点与点之间没有边,也认为有边,不过边的标签很特殊,记为
![]()
function f有很多,在所有的对应关系中选择最小值
![]()
最小f可以使得G1和G2的距离用GED表示
![]()
A*-Alorithm:
被称为best-first-search
过程:给一个节点*(搜索的初始点)和一个目标点,寻找路径

寻找最小路径,最开始从初始点寻找每一条路径,用x表示某一种中间状态,针对于每一个中间状态都计算cost

cost称为f(x),cost包括g(x)表示从原始节点到中间节点花费了多少cost,以及h(x)记为到最终节点还需要花费多少cost

估计h(x):
h(x)代表中间状态到目标结点距离的估算
法1:
已被匹配

被已匹配的点推断出来的子图为和
,
未被匹配
![]()
其中,计算h(x):

:两个点之间的距离,若标签一样则为“0”
:未匹配的点对之间的距离

图中的ABC与ABD三个点已经互相匹配上,N1包含ABC,N2包含ABD;若匹配
,首先用
表示点标签,其次考虑
和G1中任何一个点(ABC)之间的关系以及
与G2(ABD)之间的关系,在所有的M2关系中找到最小的

用最小值来进行求和

考虑了下面要匹配的点和已匹配的点之间的拓扑关系
法2:

法3:
将图拆解为S1和S2

定义两个star的距离 ,从边到叶子,相当于之间的距离计算
然后建立二部图,在每一步中进行二部图匹配的过程

用P表示匹配,需要找到一个最小的匹配关系

相关文章:
图匹配算法(涵盖近似图匹配)
【图数据管理与挖掘-第四讲(子)图匹配算法(涵盖近似图匹配) 北京大学2021暑期-邹磊教授】https://www.bilibili.com/video/BV1zh411q7PW?vd_source7c2b5de7032bf3907543a7675013ce3a 图同构: 定义: 给定…...
java线程——Thread
java线程——Thread 基本步骤示例优劣总结 继承Thread类是Java中实现多线程的一种方式。使用时创建一个新的类,该类继承自java.lang.Thread,并重写其run()方法,在方法中定义线程执行的任务逻辑。 基本步骤 1、创建一个子类:定义一…...
MySQL8.0新特性
第十八章_MySQL8.0新特性 1.新特性概述 1. 数据库管理和存储 1.1 数据字典 特性: MySQL 8.0 使用统一的数据字典存储元数据(如表、列、索引等),并将其存储在 InnoDB 表中。 优点 : 提升性能:减少对文件系统的依赖。 提高一致…...
Oracle EBS GL定期盘存WIP日记账无法过账数据修复
系统环境 RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.6 问题症状 用户反映来源为“定期盘存”和类别为“WIP”的日记账无法过账,标准日记账的界面上的过账按钮灰色不可用。但是,在超级用户职责下,该日记账又可以过账,细心检查发现该业务实体下有二个公司段值15100和…...
【绝对无坑】Mongodb获取集合的字段以及数据类型信息
Mongodb获取集合的字段以及数据类型信息 感觉很LOW的一个数据仓工具seatunel,竟然不能自动读取mongodb的表结构信息,需要手工创建。 然鹅,本人对mongodb也是新手,很多操作也不知所措,作为一个DBA,始终还是…...
【Git版本控制器--1】Git的基本操作--本地仓库
目录 初识git 本地仓库 认识工作区、暂存区、版本库 add操作与commit操作 master文件与commit id 修改文件 版本回退 撤销修改 删除文件 初识git Git 是一个分布式版本控制系统,主要用于跟踪文件的更改,特别是在软件开发中。 为什么要版本…...
C++并发编程之无锁数据结构及其优缺点
在C并发编程中,无锁数据结构(Lock-free Data Structures)是指那些在实现中不使用互斥锁(如std::mutex)来保证线程安全的数据结构。相反,它们利用原子操作和内存模型来确保多线程环境下的正确性和高效性。下…...
Ubuntu上,ffmpeg如何使用cuda硬件解码、编码、转码加速
本文使用 Ubuntu 环境。Ubuntu 直接使用 APT 安装的就支持 CUDA 加速。本文使用这样下载的版本进行演示,你自己编译或者其他源的版本可能会不同。 ffmpeg 的一些介绍,以及 macOS 版本的 ffmpeg 硬件加速请见《macOS上如何安装(不需要编译安装…...
rclone,云存储备份和迁移的瑞士军刀,千字常文解析,附下载链接和安装操作步骤...
一、什么是rclone? rclone是一个命令行程序,全称:rsync for cloud storage。是用于将文件和目录同步到云存储提供商的工具。因其支持多种云存储服务的备份,如Google Drive、Amazon S3、Dropbox、Backblaze B2、One Drive、Swift、…...
Ubuntu | 系统软件安装系列指导说明
文章目录 Ubuntu 系统软件安装系列指导说明工具系列1. Docker 与 Docker-Compose部署与安装 环境系列1. Golang部署与安装 数据库系列1. PostgreSQL17.2源码部署与安装 Ubuntu 系统软件安装系列指导说明 工具系列 1. Docker 与 Docker-Compose部署与安装 链接 环境系列 1…...
队列(算法十三)
简介 几乎没有单纯之考察队列的,队列一般只作为一个辅助工具 队列常服务于BFS queue接口 1.N叉树的层序遍历 link: 思路: 队列 层序遍历即可 code /* // Definition for a Node. class Node { public:int val;vector<Node*> children;Node()…...
vLLM私有化部署大语言模型LLM
目录 一、vLLM介绍 二、安装vLLM 1、安装环境 2、安装步骤 三、运行vLLM 1、运行方式 2、切换模型下载源 3、运行本地已下载模型 四、通过http访问vLLM 一、vLLM介绍 vLLM(官方网址:https://www.vllm.ai)是一种用于大规模语言模型&#x…...
OpenAI Whisper:语音识别技术的革新者—深入架构与参数
当下语音识别技术正以前所未有的速度发展,极大地推动了人机交互的便利性和效率。OpenAI的Whisper系统无疑是这一领域的佼佼者,它凭借其卓越的性能、广泛的适用性和创新的技术架构,正在重新定义语音转文本技术的规则。今天我们一起了解一下Whi…...
基于当前最前沿的前端(Vue3 + Vite + Antdv)和后台(Spring boot)实现的低代码开发平台
项目是一个基于当前最前沿的前端技术栈(Vue3 Vite Ant Design Vue,简称Antdv)和后台技术栈(Spring Boot)实现的低代码开发平台。以下是对该项目的详细介绍: 一、项目概述 项目名称:lowcode-s…...
【Rust】错误处理机制
目录 思维导图 引言 一、错误处理的重要性 1.1 软件中的错误普遍存在 1.2 编译时错误处理要求 二、错误的分类 2.1 可恢复错误(Recoverable Errors) 2.2 不可恢复错误(Unrecoverable Errors) 三、Rust 的错误处理机制 3…...
Logback日志技术
Logback日志技术 日志 日志(Logging)是软件开发和运维中用于记录系统或应用程序运行期间发生的运行信息、状态变化、错误信息等的一种机制,这种记录的方式就好像我们日常生活中写日记一样。它提供了一种持久化的方式,使得开发者…...
9分布式微服务架构
分布式微服务架构不光需要从架构上的设计优化系统,还要在编码上优化达到最好的效果 中心化的设计 中心化的设计比较简单,分布式集群中的角色分为两种,管理者和被管理者。 在一个分布式或者集群中,管理者角色管理着其他处理实际…...
Leecode刷题C语言之统计重新排列后包含另一个字符串的子字符串数目②
执行结果:通过 执行用时和内存消耗如下: void update(int *diff, int c, int add, int *cnt) {diff[c] add;if (add 1 && diff[c] 0) {// 表明 diff[c] 由 -1 变为 0(*cnt)--;} else if (add -1 && diff[c] -1) {// 表明 diff[c] 由 0 变为 -…...
HTML和CSS相关的问题,为什么页面加载速度慢?
页面加载速度慢是网站优化中一个常见的问题,可能由于多种原因,包括HTML和CSS的代码编写方式、资源的加载顺序、页面渲染的复杂性等。以下是一些常见的原因和优化方法,结合实际项目代码示例进行讲解。 1. 过多的资源请求 如果页面包含大量的…...
LiveGBS流媒体平台GB/T28181常见问题-没有收到视频流播放时候提示none rtp data receive未收到摄像头推流如何处理?
LiveGBS没有收到视频流播放时候提示none rtp data receive未收到摄像头推流如何处理? 1、none rtp data receive2、搭建GB28181视频直播平台 1、none rtp data receive LiveSMS 收不到下级推流 首先需要排查服务器端 UDP & TCP 30000-30249 端口是否开放其次排…...
告别烧脑报文!用ESP8266+51单片机零基础玩转OneNet MQTT(附报文生成工具)
从零到一:ESP8266与51单片机轻松对接OneNet MQTT全指南 当你第一次听说MQTT协议时,是否被那些晦涩的十六进制报文吓退?作为物联网领域最流行的轻量级通信协议,MQTT本应让设备间的对话变得简单,但传统教程中复杂的报文…...
镜像视界|无感定位终极形态:无需设备的人体空间定位技术突破——基于视频空间反演与多摄像机融合的无标签定位体系封面主视觉(建议)4一、终极问题:定位为什么始终依赖“设备”在传统技术体系中,“
镜像视界|无感定位终极形态:无需设备的人体空间定位技术突破——基于视频空间反演与多摄像机融合的无标签定位体系一、终极问题:定位为什么始终依赖“设备”在传统技术体系中,“定位”几乎等同于“设备”。无论是GPS、UWB、蓝牙还…...
NHPZ-10A/10B/10C 型平板式制动检验台全场景实战指南
全工况制动安全闭环:NHPZ-10A/10B/10C 型平板式制动检验台全场景实战指南在机动车安全性能检测体系中,平板式制动检验台是评估车辆制动系统可靠性的核心设备,其检测结果直接决定车辆能否安全上路。传统平板制动检测普遍存在工况模拟失真、数据…...
从WPF迁移到Avalonia:开发者必须掌握的12个关键差异与实战转换指南
1. 文件格式与样式系统的根本差异 如果你是从WPF转向Avalonia的老手,第一个迎面而来的变化就是文件扩展名。在WPF中我们熟悉的.xaml文件,在Avalonia中变成了.axaml。这个小小的"a"前缀背后,其实隐藏着框架设计理念的重大转变。我刚…...
高效Windows注册表分析工具实战指南:如何用RegRipper3.0突破注册表数据提取瓶颈?
高效Windows注册表分析工具实战指南:如何用RegRipper3.0突破注册表数据提取瓶颈? 【免费下载链接】RegRipper3.0 RegRipper3.0 项目地址: https://gitcode.com/gh_mirrors/re/RegRipper3.0 ▶ 核心价值:为什么RegRipper3.0是注册表分析…...
5步轻松打造随身游戏库:Playnite便携版终极配置指南
5步轻松打造随身游戏库:Playnite便携版终极配置指南 【免费下载链接】Playnite Video game library manager with support for wide range of 3rd party libraries and game emulation support, providing one unified interface for your games. 项目地址: https…...
国内热门的PP配件源头厂家有哪些
在工业环保领域,PP(聚丙烯)配件是PP通风处理设备的重要组成部分,广泛应用于各类废气处理和通风场景。以下为你介绍一些国内热门的PP配件源头厂家。惠州熙诚环保科技有限公司技术实力:该公司创立于2009年,17…...
从2D到3D草图进阶:Solidworks曲面建模效率提升全攻略(2023新版)
从2D到3D草图进阶:Solidworks曲面建模效率提升全攻略(2023新版) 在工业设计领域,Solidworks始终保持着强大的竞争力,尤其当设计师从平面思维跃升至三维空间时,3D草图功能便成为突破创意边界的利器。不同于传…...
Phi-3-mini-gguf辅助C语言学习:从指针理解到项目实战
Phi-3-mini-gguf辅助C语言学习:从指针理解到项目实战 1. 为什么选择AI辅助学习C语言 学习C语言就像学骑自行车,刚开始总会摇摇晃晃,特别是遇到指针和内存管理这些概念时,很容易"摔跟头"。传统的学习方式往往需要反复查…...
2026指纹浏览器技术升级:从环境隔离到风控对抗
2026 年,互联网平台的风控技术迎来质的飞跃,传统的 “IP 切换”“参数修改” 已无法应对多维度的检测体系。指纹浏览器作为多账号运营的核心支撑,其技术迭代速度远超以往 —— 从简单的参数修改,到内核级虚拟化;从单一…...
