AGM算法

news/2024/11/15 7:07:33/

G ( V , E , L V , L E , φ ) G(V,E,L_V,L_E,\varphi) G(V,E,LV,LE,φ)表示一个带标签的图,其中 V V V E E E分别表示顶点集和边集, L V L_V LV L E L_E LE分别表示顶点和边的标签集, φ \varphi φ是一个标签函数定义了 V → L V V \to L_V VLV E → L E E \to L_E ELE的映射。
FSM算法根据操作的数据不同,可以分为针对图数据库的和针对一个大图的(现在只讨论exact match方法)。
根据每个顶点标签的id对顶点进行排序,然后根据该顺序生成邻接矩阵 X k X_k Xk k k k表示顶点个数。邻接矩阵中每个元素表示该边标签的id。
对于
X k = ( x 1 , 1 x 1 , 2 x 1 , 3 ⋯ x 1 , k x 2 , 1 x 2 , 2 x 2 , 3 ⋯ x 2 , k x 3 , 1 x 3 , 2 x 3 , 3 ⋯ x 3 , k ⋮ ⋮ ⋮ ⋱ ⋮ x k , 1 x k , 2 x k , 3 ⋯ x k , k ) X_k=\begin{pmatrix} x_{1,1} & x_{1,2} & x_{1,3} &\cdots &x_{1,k}\\ x_{2,1} & x_{2,2} & x_{2,3} & \cdots &x_{2,k}\\ x_{3,1} & x_{3,2} & x_{3,3} & \cdots &x_{3,k}\\ \vdots & \vdots & \vdots &\ddots &\vdots \\ x_{k,1} & x_{k,2} & x_{k,3} & \cdots &x_{k,k}\\ \end{pmatrix} Xk=x1,1x2,1x3,1xk,1x1,2x2,2x3,2xk,2x1,3x2,3x3,3xk,3x1,kx2,kx3,kxk,k
如果是无向图,则 c o d e ( X k ) = x 1 , 1 x 1 , 2 x 2 , 2 x 1 , 3 x 2 , 3 x 3 , 3 x 1 , 4 ⋯ x k − 1 , k x k , k code(X_k)=x_{1,1}x_{1,2}x_{2,2}x_{1,3}x_{2,3}x_{3,3}x_{1,4}\cdots x_{k-1,k}x_{k,k} code(Xk)=x1,1x1,2x2,2x1,3x2,3x3,3x1,4xk1,kxk,k
如果是有向图,则 c o d e ( X k ) = x 1 , 1 x 1 , 2 x 2 , 1 x 2 , 2 x 1 , 3 x 3 , 1 x 2 , 3 x 3 , 2 ⋯ x k − 1 , k x k , k − 1 x k , k code(X_k)=x_{1,1}x_{1,2}x_{2,1}x_{2,2}x_{1,3}x_{3,1}x_{2,3}x_{3,2}\cdots x_{k-1,k}x_{k,k-1}x_{k,k} code(Xk)=x1,1x1,2x2,1x2,2x1,3x3,1x2,3x3,2xk1,kxk,k1xk,k
对于一个子图 G s G_s Gs,定义它的支持度 s u p ( G s ) sup(G_s) sup(Gs)为数据库中包含该子图的图的个数与总数的比值。
如果两个邻接矩阵 X k X_k Xk Y k Y_k Yk除了第 k k k行和第 k k k列不同外,其余元素均相同,则将两个矩阵合并生成 Z k + 1 Z_{k+1} Zk+1。如下所示:
X k = ( X k − 1 x 1 x 2 T x k k ) X_k = \begin{pmatrix} X_{k-1} & \boldsymbol {x_1}\\ \boldsymbol {x^T_2} & x_{kk}\\ \end{pmatrix} Xk=(Xk1x2Tx1xkk) Y k = ( Y k − 1 y 1 y 2 T y k k ) Y_k = \begin{pmatrix} Y_{k-1} & \boldsymbol {y_1}\\ \boldsymbol {y^T_2} & y_{kk}\\ \end{pmatrix} Yk=(Yk1y2Ty1ykk)

Z k + 1 = ( X k − 1 x 1 y 1 x 2 T x k k z k , k + 1 y 2 T z k + 1 , k y k k ) Z_{k+1} = \begin{pmatrix} X_{k-1} & \boldsymbol {x_1} & \boldsymbol {y_1}\\ \boldsymbol {x^T_2} & x_{kk}& z_{k,k+1}\\ \boldsymbol {y^T_2} &z_{k+1,k}& y_{kk}\\ \end{pmatrix} Zk+1=Xk1x2Ty2Tx1xkkzk+1,ky1zk,k+1ykk,也可写成
在这里插入图片描述
其中,新矩阵中的元素满足下列关系:
在这里插入图片描述
如果是无向图,那么 z k + 1 , k z_{k+1,k} zk+1,k z k , k + 1 z_{k,k+1} zk,k+1相同。该合并操作可以产生多个 Z k + 1 Z_{k+1} Zk+1矩阵,这是因为 v k v_k vk v k + 1 v_{k+1} vk+1的构成的边的label可以有多种选择,因为图数据库中不同的图中这两个点之间的边的不同,也就造成了该边的label的不同,因此 z k + 1 , k z_{k+1,k} zk+1,k z k , k + 1 z_{k,k+1} zk,k+1有多个选择,还有一种选择是没有边,既0。
X k X_k Xk Y k Y_k Yk中的 v k v_k vk的label相同时,交换 X k X_k Xk Y k Y_k Yk后生成的矩阵是一样的,为了避免这种情况,只有当 c o d e ( t h e f i r s t m a t r i x ) < = c o d e ( t h e s e c o n d m a t r i x ) code(the\ first\ matrix)<=code(the\ second\ matrix) code(the first matrix)<=code(the second matrix)时才生成矩阵,生成的矩阵也被称为normal form。只有当大小为 k + 1 k+1 k+1的图 G G G的所有 k k k子图都是频繁子图时, G G G才是频繁子图候选项。
如果通过删除一个节点得到的子图不是normal form,必须将其转换成normal form之后才能判断该子图是否已经生成过。通过以下步骤,可以将一个non-normal form 的矩阵 X k X_k Xk转换成normal form的矩阵 X k ′ X'_k Xk:(1)对 X k X_k Xk中的每个节点生成一个 1 × 1 1 \times 1 1×1的邻接矩阵;(2)对于点 v i , v j ∈ G ( X k ) v_i,v_j \in G(X_k) vi,vjG(Xk),如果其邻接矩阵符合合并条件,则合并;(3)不断地合并新生成的矩阵,知道获得了一个 k × k k \times k k×k的矩阵 X k ′ X'_k Xk。该过程涉及到的是行列式的操作,因此可以表示成 X k ′ = ( T k ) T X k T k X'_k=(T_k)^T X_k T_k Xk=(Tk)TXkTk
当所有候选子图生成后,需要统计每个子图的支持度。但是每个图的normal form并不是唯一的。因此需要将代表同一个子图的不同的normal form的支持度加在一起。为了索引代表同一个子图的不同normal form,定义了normal form的canonical form。定义 G G G的canonical form是 G G G的normal form中 c o d e code code最小的。令 X k − 1 m X^m_{k-1} Xk1m表示 G ( X k ) G(X_k) G(Xk)移除点 v m v_m vm后得到的图。 X k − 1 ′ m X^{'m}_{k-1} Xk1m表示 X k − 1 m X^m_{k-1} Xk1m经过 T k − 1 m T^m_{k-1} Tk1m变换后得到的normal form。 X k − 1 ′ m X^{'m}_{k-1} Xk1m经过 S k − 1 m S^m_{k-1} Sk1m变换后得到canonical form。整体过程可表示为 ( T k − 1 m S k − 1 m ) T X k − 1 m T k − 1 m S k − 1 m (T^m_{k-1}S^m_{k-1})^TX^m_{k-1}T^m_{k-1}S^m_{k-1} (Tk1mSk1m)TXk1mTk1mSk1m
那么我们可以用 S k m S^m_k Skm T k m T^m_k Tkm X k X_k Xk转换成canonical form X c k X_{ck} Xck。而 S k m S^m_k Skm T k m T^m_k Tkm又可以通过 S k − 1 m S^m_{k-1} Sk1m T k − 1 m T^m_{k-1} Tk1m获得。具体过程如下所示:
在这里插入图片描述
寻找频繁子图时,对数据库中的每个图从1到k的构造子图,并计算每个子图的支持度。


http://www.ppmy.cn/news/441065.html

相关文章

AGM AG16K FPGA介绍

AG16K FPGA 器件面向大批量、成本敏感的应用&#xff0c;使系统设计人员能够在降低成本的同时满足日益增长的性能要求。 AG16K 设备 提供卓越的质量、稳定性和卓越的定价价值。 特征 具有 16K LE 的高密度架构 高达 504Kbits 的 RAM 空间 多达 56 个 18 x 18 位嵌入式乘法器&…

agm x2 android8.0,【AGMX2评测】性能:八核骁龙小钢炮_AGM X2_手机评测-中关村在线...

性能&#xff1a;"八核"骁龙小钢炮 三防手机给人们就下的印象一向是老人机或者低配机的代名词。然而AGM X2却反其道而行之。AGM X2搭载了骁龙653八核处理器&#xff0c;其性能在骁龙6系列处理器中仅次于骁龙660。骁龙653主频可达1.95GHz&#xff0c;制程为28nm。AGM …

android 11.0 设置上网应用白名单(上网app白名单)

1.概述 在11.0 的产品开发中,在对产品进行网络模块开发中,有功能需要要求设置某些app可以上网,某些app不可以上网,就是所谓的网络应用白名单功能 2.设置上网应用白名单(上网app白名单)核心代码 frameworks/base/core/java/android/os/INetworkManagementService.aidl fr…

AGM FPGA使用答疑

AGM FPGA使用答疑&#xff0c;点滴积累&#xff0c;方便你我他。 AG10KL144 or AG10KF256: 问&#xff1a;你好&#xff0c;请问AG10KL144的供电电压范围是多少&#xff0c;能用3.6V供电吗&#xff08;因我司另外一款IC需要3.6V供电&#xff0c;如果FPGA能3.6V供电就可以共用一…

AGM AG256 CPLD

AG256 CPLD是低成本CPLD。这种瞬时接通&#xff0c;非易失性CPLD系列针对通用和低密度逻辑。逻辑密度为256逻辑单元&#xff0c;采用LQFP-100封装。 低成本和低功耗CPLD 即时启动&#xff0c;非易失性标准兼容架构。 全局时钟网络中最多4个全局时钟线&#xff0c;可驱动整个器…

AGM函数近似值的估计

AGM函数近似值的估计 AGM是 Arithmetic-Geometric Mean的缩写&#xff0c;意为算术几何 平均数。其定义为,给定两个正实数a0和b0&#xff0c;我们定义一个迭代过程 a i 1 a i b i 2 , b i 1 a i b i a_{i1} \frac {a_ib_i} {2}, \ \ \ b_{i1} \sqrt {a_i b_i } ai1​2ai​…

c++ 基于自适应阈值Otsu算法提取三维点云要素信息

目录 一、Otsu算法原理二、自适应阈值OTSU算法实现三 、结果展示一、Otsu算法原理 Otsu算法,又称"最大类间方差法",是一种基于阈值的、自动的、无监督的图像分割方法。   基本思想:是利用图像的灰度直方图,以目标与背景的类间方差最大来动态地确定图像的最佳分…

Python电商数据分析系列-薪资预测

Python电商数据分析系列-薪资预测 学习目标&#xff1a; 快速掌握简单且常用的数据分析任务 自己实现预测简单预测任务 学习内容&#xff1a; 搭建 Java 开发环境掌握 Java 基本语法掌握条件语句掌握循环语句 学习对象 想快速入门的本科生转行人员想学习新技能&#xff0c…