判断图同构大杀器—nauty算法

判断两图是否同构是一个经典问题。nauty算法作为时下较为流行的主流算法,具有效率高,剪枝力度强等优势。当然,在某些特殊情况会失灵。虽然该算法的概念在上世纪80年代就提出来了,但发展至今,仍然是不可忽略的一种方法。本人翻遍了中文互联网,没找到详细相关介绍,在stackoverflow上边找到了一个问答,顺着帖子的回复找到了算法原作者自建的网站,如获至宝。再结合离散数学,看懂了这个算法的大致流程。总结如下:nauty算法:判断两个图是否同构。思路:①设置一套编号系统,给两个图进行编号,如果两个

大家好,又见面了,我是你们的朋友全栈君。

判断两图是否同构是一个经典问题。
nauty算法作为时下较为流行的主流算法,具有效率高,剪枝力度强等优势。当然,在某些特殊情况会失灵。
虽然该算法的概念在上世纪80年代就提出来了,但发展至今,仍然是不可忽略的一种方法。

本人翻遍了中文互联网,没找到详细相关介绍,在stack overflow上边找到了一个问答,顺着帖子的回复找到了算法原作者自建的网站,如获至宝。
再结合离散数学,看懂了这个算法的大致流程。总结如下:

nauty算法:判断两个图是否同构。
思路:
①设置一套编号系统,给两个图进行编号,如果两个图对应的正则编号是一样的,两图同构。

②设置编号系统:
1)对图进行划分,使得任意一个节点的不同颜色的邻接节点的个数相同。
2)对于包含节点个数大于1的子集合再划分,一直化到所有子集合元素个数为1。
3)回溯,得到第二个划分。对比两个划分方式,得到置换群信息,利用这一信息去剪枝。
4)回溯,得到第三个划分,再得到一些置换群的信息,进一步剪枝。
5)最终存留的划分结果即是这个图的可行的命名方式。选择其中最大字典的一种作为正则编号,与另外一个图进行比对。

③剪枝过程中还利用了【节点不变量】信息。具体来说,用一个函数评价某节点的【节点不变量】。
在同一深度下,某节点的函数值相较另一个节点高,则正则编号将出现在该节点的子树下。
在同一深度下,某节点的函数值与另一个节点不相等,则二者的子树不一样。
两节点在某一群作用下相同,则两节点的子树有对应相等值。

部分理解存在偏差,对该算法感兴趣的朋友可以去作者自建的网站了解详情,里边有漂亮的PPT,排版也很好。

另外,nauty算法剪枝的核心是求解自同构群,这一过程在网站的search tree那一栏也有详尽的说明(类似PPT),结合基础群论知识,很容易理解。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126816.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月8日 下午6:40
下一篇 2022年4月8日 下午6:40


相关推荐

  • C 性能诊断工具 dotnet-counters 的使用

    C 性能诊断工具 dotnet-counters 的使用官问地址 dotnet counters 诊断工具 NETCLI MicrosoftDoc 安装 dotnettoolin counters 或在官网直接下载工具命令 1 dotnet countersps 查看服务器上运行中的 Dotnet 进程列表 2 dotnet counterslist 显示按提供程序分组的计数器名称和说明的列表 3 dotnet counterscoll 定期收集所选计数器的值

    2026年3月19日
    3
  • python2装饰器_python函数装饰器

    python2装饰器_python函数装饰器前言我们都知道装饰器的作用是在不改变原有的代码基础上,添加新的功能,但是这样会有一个弊端,被装饰的函数某些属性会变改变,接下来我们来看下案例importtimedefrun_time(fu

    2022年7月30日
    6
  • .gitkeep

    .gitkeep

    2021年10月20日
    71
  • bm3d对比NL-Means去噪算法分析

    bm3d对比NL-Means去噪算法分析这篇文章写的特别好,就记录一下。转载地址:http://wenhuix.github.io/research/denoise.html噪声模型 图像中噪声的来源有许多种,这些噪声来源于图像采集、传输、压缩等各个方面。噪声的种类也各不相同,比如椒盐噪声,高斯噪声等,针对不同的噪声有不同的处理算法。对于输入的带有噪声的图像v(x),其加性噪声可以用一

    2022年5月7日
    55
  • OPC协议_opc通讯协议简介

    OPC协议_opc通讯协议简介一、OPC:OPC是一种利用微软的COM/DCOM技术来达成自动化控制的协定,采用典型的C/S模式,针对硬件设备的驱动程序由硬件厂商完成,提供统一OPC接口标准的Server程序,软件厂商只需按照OPC标准接口编写Client程序就访问Server程序进行读写,即可实现与硬件设备的通信。OPC协定包括:1.DA(DataAccess)规范:访问数据主要采用该规范2.A&E(Alarma…

    2025年8月23日
    7
  • 杭州亚运会和亚残运会赛会志愿者测试题

    杭州亚运会和亚残运会赛会志愿者测试题1 赛会现场志愿者在服务时 以下要求不正确的是 A 保持自身的中立态度 不能区别对待咨询者 B 知晓赛会场地的环境布置 C 回答参赛人员的咨询问题 并尽力协助解决 D 不能回答有关文件资料的任何问题 正确答案 D2 抵离迎送志愿者在服务时 以下要求不正确的是 A 不需要掌握英语 B 熟悉工作流程 C 熟悉场地 停车场等场地进出口以及安检位置 D 准确了解嘉宾信息 正确答案 A3 按照志愿者工作礼仪规范 以下不正确的是 A 作为观众持票观赛时 为

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号