图匹配算法(涵盖近似图匹配)
【图数据管理与挖掘-第四讲(子)图匹配算法(涵盖近似图匹配) 北京大学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 端口是否开放其次排…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...