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

图匹配算法(涵盖近似图匹配)

【图数据管理与挖掘-第四讲(子)图匹配算法(涵盖近似图匹配) 北京大学2021暑期-邹磊教授】https://www.bilibili.com/video/BV1zh411q7PW?vd_source=7c2b5de7032bf3907543a7675013ce3a

图同构:

定义:

给定一个query Q和图G,若存在一个内射函数f=V(Q)\rightarrow V(G),满足:

,点的标签一致

 ,边的标签一致

给定两个图Q和G,是否存在一个双射函数f:V(Q)\rightarrow V(G):

点相互对应映射

,Q中的边在G中有相互对应的边

,存在一对一满足的逆函数使G中两点对应的边在Q中也存在

目前为止子图同构问题仍是一个未知问题,无法证明是一个NP-complete问题,也无法找到一个多项式可解算法

应用:

将两个图像通过特征点提取的方法提取出一些特征点和它们之间的拓扑关系,构建出图,对上图进行匹配实质上是对下图进行比对

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

SPARQL的比对,在data graph找匹配

 Cypher语言

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

子图匹配是在这些语言基础上的一个基础算子

经典算法:

Ullmann Algorithms:

将图转换为连接矩阵,将判断Q是否为G的子图问题转化为它们表达的连接矩阵的关系

存在一个M{}'矩阵(定义中所讲的内设函数f),M{}'矩阵为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为M{}',因为M{}'要求一行只有一个1,转化为树搜索问题,有两个1,则随机把一个1划掉

满足一行只有一个1,一列最多只有一个1

③将②中得到的M{}'做测试,若该M{}'对应则代表成立,不成立则需要做回溯;若为列举问题,则成立也需要做回溯

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中的一个点对(u_{i},v_{i}),该点对中的两点标签是一致的,对应边满足:

 构成的每一个clique就是一个common induced subgraph

④Minimal Edit Distance:当两个图G1和G2相似时,通过多少步骤让两者转化为彼此,方法如下:

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

Node Substitution Semantic:

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

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

虚拟点:与任何点的标签都不同

若点与点之间没有边,也认为有边,不过边的标签很特殊,记为\phi

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:

已被匹配

被已匹配的点推断出来的子图为G_{1}{}'G_{2}{}'g(x)=D(G_{1}{}',G_{2}{}')

未被匹配

f(x)\geq g(x)+h(x)

其中g(x)=D(G_{1}{}',G_{2}{}'),计算h(x):

 D(v_{i},u_{j}):两个点之间的距离,若标签一样则为“0”

\sum_{v\in N_{1},u\in N_{2}}^{}D(\overrightarrow{v_{i},v,}\overrightarrow{u_{j},u}):未匹配的点对之间的距离

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

用最小值来进行求和

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

 法2:

法3:

将图拆解为S1和S2

定义两个star的距离 ,从边到叶子,相当于S_{1}\rightarrow S_{2}之间的距离计算

然后建立二部图,在每一步中进行二部图匹配的过程

用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…...

队列(算法十三)

简介 几乎没有单纯之考察队列的&#xff0c;队列一般只作为一个辅助工具 队列常服务于BFS queue接口 1.N叉树的层序遍历 link: 思路&#xff1a; 队列 层序遍历即可 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&#xff08;官方网址&#xff1a;https://www.vllm.ai&#xff09;是一种用于大规模语言模型&#x…...

OpenAI Whisper:语音识别技术的革新者—深入架构与参数

当下语音识别技术正以前所未有的速度发展&#xff0c;极大地推动了人机交互的便利性和效率。OpenAI的Whisper系统无疑是这一领域的佼佼者&#xff0c;它凭借其卓越的性能、广泛的适用性和创新的技术架构&#xff0c;正在重新定义语音转文本技术的规则。今天我们一起了解一下Whi…...

基于当前最前沿的前端(Vue3 + Vite + Antdv)和后台(Spring boot)实现的低代码开发平台

项目是一个基于当前最前沿的前端技术栈&#xff08;Vue3 Vite Ant Design Vue&#xff0c;简称Antdv&#xff09;和后台技术栈&#xff08;Spring Boot&#xff09;实现的低代码开发平台。以下是对该项目的详细介绍&#xff1a; 一、项目概述 项目名称&#xff1a;lowcode-s…...

【Rust】错误处理机制

目录 思维导图 引言 一、错误处理的重要性 1.1 软件中的错误普遍存在 1.2 编译时错误处理要求 二、错误的分类 2.1 可恢复错误&#xff08;Recoverable Errors&#xff09; 2.2 不可恢复错误&#xff08;Unrecoverable Errors&#xff09; 三、Rust 的错误处理机制 3…...

Logback日志技术

Logback日志技术 日志 日志&#xff08;Logging&#xff09;是软件开发和运维中用于记录系统或应用程序运行期间发生的运行信息、状态变化、错误信息等的一种机制&#xff0c;这种记录的方式就好像我们日常生活中写日记一样。它提供了一种持久化的方式&#xff0c;使得开发者…...

9分布式微服务架构

分布式微服务架构不光需要从架构上的设计优化系统&#xff0c;还要在编码上优化达到最好的效果 中心化的设计 中心化的设计比较简单&#xff0c;分布式集群中的角色分为两种&#xff0c;管理者和被管理者。 在一个分布式或者集群中&#xff0c;管理者角色管理着其他处理实际…...

Leecode刷题C语言之统计重新排列后包含另一个字符串的子字符串数目②

执行结果:通过 执行用时和内存消耗如下&#xff1a; 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相关的问题,为什么页面加载速度慢?

页面加载速度慢是网站优化中一个常见的问题&#xff0c;可能由于多种原因&#xff0c;包括HTML和CSS的代码编写方式、资源的加载顺序、页面渲染的复杂性等。以下是一些常见的原因和优化方法&#xff0c;结合实际项目代码示例进行讲解。 1. 过多的资源请求 如果页面包含大量的…...

LiveGBS流媒体平台GB/T28181常见问题-没有收到视频流播放时候提示none rtp data receive未收到摄像头推流如何处理?

LiveGBS没有收到视频流播放时候提示none rtp data receive未收到摄像头推流如何处理&#xff1f; 1、none rtp data receive2、搭建GB28181视频直播平台 1、none rtp data receive LiveSMS 收不到下级推流 首先需要排查服务器端 UDP & TCP 30000-30249 端口是否开放其次排…...

【Vue】指令补充+样式绑定+计算属性+侦听器

【指令补充】 【指令修饰符】 指令修饰符可以让指令的 功能更强大&#xff0c;书写更便捷 分类&#xff1a; 1.按键修饰符&#xff08;侦测当前点击的是哪个按键&#xff09; 2.事件修饰符&#xff08;简化程序对于阻止冒泡&#xff0c; 一些标签的默认默认行为的操作&…...

Grafana-ECharts应用讲解(玫瑰图示例)

工具: MySQL 数据库 MySQL Workbench 数据库管理工具(方便编辑数据) Grafana v11.5.2 Business Charts 6.6(原 Echarts插件) 安装 安装 MySQL社区版安装 MySQL Workbench安装 Grafana在 Grafana 插件中搜索 Business Charts 进行安装以上安装步骤网上教程很多,自行搜…...

指针与函数参数传递详解 —— 值传递与地址传递的区别及应用

资料合集下载链接&#xff1a; ​​https://pan.quark.cn/s/472bbdfcd014​​ 在C语言中&#xff0c;函数参数的传递方式主要有两种&#xff1a;值传递和地址传递&#xff08;通过指针&#xff09;。理解两者的区别及应用对于正确操作数据和优化程序逻辑至关重要。本文将通过…...

若依添加添加监听容器配置(删除键,键过期)

1、配置Redis的键触发事件 # 基础配置 bind 0.0.0.0 # 允许所有IP连接 protected-mode no # 关闭保护模式&#xff08;生产环境建议结合密码使用&#xff09; port 6379 # 默认端口 daemonize no …...

Vue-Todo-list 案例

一、前言 在前端开发中&#xff0c;Todo List&#xff08;待办事项列表&#xff09; 是一个非常经典的入门项目。它涵盖了组件化思想、数据绑定、事件处理、本地存储等核心知识点&#xff0c;非常适合用来练习 Vue 的基本用法。 本文将带你一步步实现一个功能完整的 Vue Todo…...

Redis 与 MySQL 数据一致性保障方案

在高并发场景下&#xff0c;Redis 作为缓存中间件与 MySQL 数据库配合使用时&#xff0c;数据一致性是一个关键挑战。本文将详细探讨如何保障 Redis 与 MySQL 的数据一致性&#xff0c;并结合 Java 代码实现具体方案。 数据不一致的原因分析 在分布式系统中&#xff0c;Redis…...

STM32 控制12VRGB灯带颜色亮度调节,TFTLCD显示

接了一个同学的小项目&#xff0c;要实现控制一个实体&#xff0c;控制灯带的亮度为红/绿/蓝/白/黄以及亮度的叠加。 时间要的比较急&#xff0c;要两天实现&#xff0c;因此不能打板&#xff0c;只能采用现有模块拼接。 一. 实施方案 一开始觉得很简单&#xff0c;就是使用五…...

6.7本日总结

一、英语 复习默写list10list19&#xff0c;07年第3篇阅读 二、数学 学习线代第一讲&#xff0c;写15讲课后题 三、408 学习计组第二章&#xff0c;写计组习题 四、总结 本周结束线代第一讲和计组第二章&#xff0c;之后学习计网4.4&#xff0c;学完计网4.4之后开操作系…...

获取 OpenAI API Key

你可以按照以下步骤来获取 openai.api_key&#xff0c;用于调用 OpenAI 的 GPT-4、DALLE、Whisper 等 API 服务&#xff1a; &#x1f9ed; 获取 OpenAI API Key 的步骤&#xff1a; ✅ 1. 注册或登录 OpenAI 账号 打开 https://platform.openai.com/ 使用你的邮箱或 Google/…...

AndroidR车机TextToSpeech音频焦点异常问题分析

一、引言 文章《Android车机之TextToSpeech》介绍了TextToSpeech的使用,当前较多座舱系统语音服务都接入了原生TextToSpeech接口调用。 我司自研语音TTS服务,也接入了此TTS接口调用,对外提供TextToSpeech能力,播报时由客户端Client自行管理音频焦点,播报前申请音频焦点,…...