图匹配算法(涵盖近似图匹配)
【图数据管理与挖掘-第四讲(子)图匹配算法(涵盖近似图匹配) 北京大学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 端口是否开放其次排…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...
Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...
2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
