子图同构的Ullmann算法的matlab实现

该博客介绍了如何使用Ullmann算法在MATLAB中实现子图同构的判断。通过邻接布尔矩阵,该算法遍历所有可能的对应关系,寻找是否存在一个子图与原图同构。文章详细阐述了算法的步骤和关键条件,并提供了MATLAB代码示例。
摘要由CSDN通过智能技术生成
function r=Ullmann(a,b)


%Ullmann算法:子图同构算法中最简单的一种
%判断图b中是否有子图同构于a
%a和b是图的邻接布尔矩阵
%返回0代表没有找到,1代表找到了.


%p1和p2代表a和b的阶
    [p1,tmp]=size(a);
    [p2,tmp]=size(b);
    %ab必须都是方阵
    %p1<=p2
    
%d是degree的意思
%用来存储每个顶点的度
    da=sum(a);
    db=sum(b);
    %对角线假定都是0
    %a,b必须对称
    
%m是a与b的关联矩阵 
%这是一个p1*p2的布尔矩阵
%其元素m(i,j)表示a的第i个节点和b的第j个节点是否对应
%因此这个矩阵的限制为:
    %每行有且只有一个1,而每列最多只有一个1 。
%我们把上面这个条件记作条件(0). 
%下面对m进行初始化
    m=zeros(p1,p2);
    for j=1:p2
        for i=1:p1
            %如果b的第j个节点的度>=a的第i个节点的度
            %表示可能匹配但是不一定
            if db(j)>=da(i)
                m(i,j)=1;
            end
            %此原则是针对无向图
        en
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
图同构算法是一种用于检测两个是否具有相同结构的算法。在计算机科学和数学领域,图同构是一种等价关系,用于比较两个的结构。如果两个具有相同的结构,那么它们被称为同构的。 QuickSI算法是一种基于快速匹配和启发式搜索的图同构算法。该算法使用了一种基于的表示和匹配的方法,通过快速匹配和启发式搜索来找到两个同构关系。 以下是QuickSI算法的基本步骤: 1. 初始化:将每个顶点表示为一个字符串,其中字符串的长度等于顶点的数量。对于每对顶点,创建一个与之匹配的字符串,称为对应顶点的映射。 2. 快速匹配:使用字符串匹配算法(如朴素匹配或Brute-Force匹配)在对应的字符串中进行匹配。在每次匹配失败时,重新开始搜索以避免无限循环。 3. 启发式搜索:通过遍历每对顶点的对应字符串中的相邻字符来逐步逼近同构关系。当匹配失败时,停止搜索并考虑其他的候选顶点对。 4. 验证:使用一个已知的图同构测试函数来验证是否找到了正确的同构关系。如果测试函数返回真,则找到了同构关系;否则,重新开始搜索。 QuickSI算法的主要优点是它的时间复杂度较低,通常可以在较短的时间内找到两个同构关系。此外,该算法还具有较好的鲁棒性和适应性,可以处理不同类型的结构。 要了解更多关于QuickSI算法的信息,您可以查阅相关的研究文献或相关资料。同时,您也可以尝试使用该算法来解决实际问题,以更好地理解其应用场景和效果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值