子图同构之乌尔曼算法Ullmann Algorithm的python实现
第一章:子图同构与 Ullmann 算法基础概念
给定两个图 G a G_a Ga(子图)和 G b G_b Gb(原图),其中 G a G_a Ga有 p a p_a pa个点和 q a q_a qa条边, G b G_b Gb有 p b p_b pb个点和 q b q_b qb条边,其邻接矩阵分别为 A A A和 B B B。子图同构的关键在于找到一种从 G a G_a Ga的点到 G b G_b Gb的点的映射 M M M, M M M是一个 p a p_a pa行 p b p_b pb列的矩阵,且满足每行只有一个 1 1 1(表示 G a G_a Ga中的一个点唯一地映射到 G b G_b Gb中的一个点),每列至多一个 1 1 1(确保 G b G_b Gb中的点不会被重复映射)。
定义 C = [ c i j ] = M ( M B ) T C=[c_{ij}]=M(MB)^T C=[cij]=M(MB)T ,若在图 G a G_a Ga中 i i i和 j j j有边能推导出图 C C C中 i i i和 j j j有边(即 a i j = 1 a_{ij}=1 aij=1能推导出 c i j = 1 c_{ij}=1 cij