从 Nauty 数据结构出发认识群论

news2024/11/22 17:19:32

在阅读本文前,强烈建议有志入门群论的同学观看 3blue1brown 魔群 视频。

对于计算机方向同学,可以尝试从数据结构的角度理解。本文主要基于文档、网站 Nauty 和 Nauty 的 python binding, pynauty(github.com) 展开。

Nauty 数据结构

本小节截选自 Nauty 文档。上文提到,我们通过将三维的分子结构转换为一维数组来进行群的作用。如下图所示:

在这里插入图片描述

之所以从数据结构角度理解,是因为 Nauty 的数据结构是一维的,更符合程序员思维,涉及抽象符号较少。下面我们关注其中涉及到的群操作。

交换

交换是一种群的作用(Action),一串数组中,通过更换几个数字的位置,可以得到新的数组。如下图所示:

在这里插入图片描述

交换前后,新标签和旧标签对比,可以得到交换的位点。本例中,如果使用抽象语言,这种群作用通过 (0,1) 表示。Nauty 通过将这种群作用施加在标准数组上,得到能够代表这种群作用的数组。

上例混淆了起始数组和标准数组,可看下例:

在这里插入图片描述

这种形式能够将群作用结构化,他们都有着特定的数组长度。Nauty 文档里举了一个更加复杂的例子:

在这里插入图片描述

是从 Nauty description 倒推 Abstracted description.

我们可以看到,和标准数组相比 0, 2, 51, 3, 6, 4 的位置是混乱的两组,但是 7,8 没有变,所以 7, 8 没有在抽象描述中显现。

自同构群

上小节介绍了交换作用的数据结构,但脱离了图的语境。

在这里插入图片描述

我们再回看该分子图。一种交换,比如说 1, 0, 2, 3, 4, 5 ,代表着交换 0, 1 两个碳原子交换。从化学角度看,我们认为这种交换并不改变分子结构。如果使用群论的术语,我们说 1, 0, 2, 3, 4, 5 是一种自同构群。(严谨的说,是自同构群作用,一个图的自同构群包含了所有类似的群作用)注意,并不是所有的群作用都是自同构群,只有交换前后结构不变的群作用可以叫做自同构群。比如, 2, 1, 0, 3, 4, 5 表示 0, 2 交换,显然会改变分子结构,因此, 2, 1, 0, 3, 4, 5 只是一种群作用而不是自同构群。(其实这里表述仍然不严谨,但可以这样理解)

轨道

轨道二字会让人联想到 “行星轨道” ,“原子轨道” 等。在 “原子轨道” 里,电子和原子核间的相互作用简化为了电子围绕原子核转动,同一轨道上的电子能量相同,后来这种思想延续到了分子轨道中 “简并轨道” 概念里。

群论语境下,轨道也有类似的含义。同一轨道的元素 (element) 互相交换,结构不变。以下面分子图为例:

在这里插入图片描述

我们可以说 0, 1 处于同一轨道,因为交换二者不会带来结构的变化。群论里,我们用 {0, 1}, {3, 5}, {2, 4} 来表述轨道。

Nauty 使用一个数组来存储轨道信息:

在这里插入图片描述

同一轨道中,数值最小的元素代表整个轨道。比如:{2, 4} 对应位置由 2 来代替。

下面是 Nauty 手册给的一个例子,可做练习:

在这里插入图片描述

染色

分子图的染色很好理解,不同的点代表不同的原子。我们这里仅讨论点的染色。下图是 ASE 渲染的分子图:

在这里插入图片描述

Nauty 使用两个数组来表示一种染色方案,分别是 labptn.

lab 是变动较大的,没有太多含义。我们这里按照 CHO 的顺序排列。

在这里插入图片描述

ptn 中 1 表示对应位点和后面一位位点的颜色相同,0 表示对应位点和后面一位位点颜色不同。所以 101010 表示 {0, 1}, {3, 5}, {2, 4} 三种颜色。注意,染色和轨道是不同的概念。染色通常作为试错的手段,探索自同构群,比如,目前最快的图同构算法就是通过染色实现的。而轨道是图的固有性质,是固定不变的,需要被求解的。

Nauty 手册给了一个染色的例子,可做练习:

在这里插入图片描述

值得注意的是,此处的 1 可以替换为其他数值,比如下面的染色和上面一致:

在这里插入图片描述

Nauty 的搜索树

上一章节介绍了群论相关的专业术语。下面我们以 Nauty 网站上介绍的 搜索树 为例,综合运用这些术语。开始之前,我们首先介绍一下图的自同构问题 (graph isomorphism problem

图的自同构问题

图的自同构问题,旨在判断两个图是否一致。如下图所示:

在这里插入图片描述

三种图看起来是不一样的,但如果仅考虑拓扑关系,三者每条边、每个顶点都能找到一致的。比如,上图用黑色圈圈起了一个顶点,该顶点连接的三条边的颜色是一致的。(图自目前最快的图同构算法)

图的自同构可以定义为:一张图中的每个点都能在另一张图中找到映射,且点的邻居的颜色一致,和点相连的边的颜色一致。

Nauty 算法起初就是为了解决这一问题而产生的,一个简化版的介绍可以看我之前的博客。

搜索树中的专业术语

在第 7 页 PPT 之前,我们已经通过特定的染色程序得到了两种染色方案。

在这里插入图片描述

通过对比二者,比如说 3, 7 ,颜色是发生变化的。但变化前后,红色三个邻居的颜色是一致的。所以,我们认为群作用 (3, 7) 是一种自同构的群作用。然而,这种说法并不严谨,因为上图中一共出现了三对类似的群作用。这三对是同时发生的。因此,准确的说法是,(3, 7)(4, 5)(8, 9) 是一种自同构的群作用。

我们用类似的方法得到第二种群作用,与上面得到的一起,产生了一个轨道。

在这里插入图片描述

观察轨道和两个群可以发现,轨道的运算可以简单理解为群的交并。

在这里插入图片描述

值得注意的是,g1g2 虽然有相同的成分,但由于存在不同的成分,二者并不能相互转化。后续的遍历过程又生成了其他的群(自同构群作用),但颗粒度都较大。群论里,我们称这种最小颗粒度的群为 generator (因为没有其他更小的)。

此外,还有一个常被提到的概念是群的秩。(这里的群指囊括了所有群作用的群)这个数字指,最少自乘多少次可以回到原始状态,反应了一个群的复杂程度。Explain of order

Nauty 里通过两个参数和一个公式来描述一个群的秩:

在这里插入图片描述

Pynauty

使用 pynauty(github.com) 可以很好的练习群论知识。

Pynauty 实现了以下主要功能:

  1. 给定一个图,返回其自同构群相关信息。
  2. 给定两个图,返回二者是否同构。
  3. 给定一个图,返回正则化的命名序列。
  4. 可以考虑点的特征信息。

下面程序把乙二醛的图信息转化成了 Pynauty 格式,解出了这张图的自同构群信息,给出了正则化命名序列:

from pynauty import *
from ase.build import molecule
from ase.visualize import view
from ase.neighborlist import build_neighbor_list


a_mol = molecule(name='OCHCHO')
neighborlist = build_neighbor_list(a_mol, bothways=False, self_interaction=False)

view(a_mol)

mat = neighborlist.get_connectivity_matrix(sparse=True)

adj_dic = {}
for i in range(len(a_mol)):
    if len(mat[i]) == 0:
        continue
    adj_dic.update({i: list(mat[i].tocoo().col)})

a_g = Graph(number_of_vertices=len(a_mol), directed=False, adjacency_dict=adj_dic)
generators, grpsize1, grpsize2, orbits, numorbits = autgrp(a_g)
lab = canon_label(a_g)

需要注意的是,我们传入的图信息,不包括点和边的特征信息。目前 Pynauty 可以通过染色的方式传入点的特征信息,但不支持边的特征信息录入。此外,Pynauty 仅能在 Linux 和 Mac 平台运行,没有 win 版本。

虽然功能有限,但如果只是使用 Nauty 程序包的核心功能,即解决两图是否同构的问题,Pynauty 不失为一种很好的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/59271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

字节跳动虚拟数字人技术与应用

导读:火山引擎正在打造完善的虚拟数字人技术和应用体系,那么火山引擎是如何定义虚拟数字人的呢?火山引擎 2D 虚拟数字人和 3D 数字人采用了怎样先进的技术?火山引擎数字人有哪些应用和前景展望?今天我们就来一起探秘火…

[附源码]计算机毕业设计基于SpringBoot的毕业生就业系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

浅谈操作系统和进程

前言 操作系统是一个软件,对下要管理硬件设备,对上要给软件运行提供稳定的运行环境。操作系统是软硬件及用户之间交互的媒介。最常见的操作系统有Windows 98,2000,xp,vista,win7,win8&#xff…

# 智慧社区管理系统-核心业务功能-04保修信息

一 后端 1:entity package com.woniu.community.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data AllArgsConstructor NoArgsConstructor public class Repair {private int id;private String comId;private String co…

[附源码]计算机毕业设计springboot医院挂号住院管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

LeetCode 441. 排列硬币

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 441. 排列硬币 ,做好准备了么,那么开始吧。 🌲🌲🐴🐴 一、题目名称 LeetCode 441. …

Java基于springboot+vue的游戏物品销售购物商城系统 前后端分离

随着时代和计算机的发展,出现了越来越多的网络游戏,相对应的也拥有了越来越多的玩家,这些玩家在玩了一段游戏之后,可能会有游戏交易的需求。如果直接在私下个人交易很不安全,容易被骗。为了能够让广大游戏爱好者拥有一…

.net6 web api中使用SqlSugar(MySQL数据库)

其中SqlSugar,也可以是EFcore,或者Dapper,或者其他ORM框架。 其中mysql,也可以是SqlServer,或者oracle,或者其他数据库类型。 1.首先使用vs2022建立.net6 web api 2.增加SqlSugar和MySQL依赖项。 Newton…

17.前端笔记-CSS-定位

1、为什么要定位 先看看以下这些场景是否可以用标准流或浮动实现 (1)某个元素可以自由的在一个盒子内移动位置,并且压住其他盒子 (2)滚动窗口时,某些盒子是可以固定在屏幕某个位置的 以上这种场景使用标准…

# 智慧社区管理系统-核心业务管理-01车位收费

一 后端 1:entity package com.woniu.community.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data AllArgsConstructor NoArgsConstructor public class CarCharge {private int id;private String payDate;//开始时间pr…

Vue 官方文档2.x教程学习笔记 1 基础 1.6 Class 与 Style 绑定 1.6.1 绑定HTML Class

Vue 官方文档2.x教程学习笔记 文章目录Vue 官方文档2.x教程学习笔记1 基础1.6 Class 与 Style 绑定1.6.1 绑定HTML Class1 基础 1.6 Class 与 Style 绑定 操作元素的 class 列表和内联样式是数据绑定的一个常见需求。 因为它们都是 attribute,所以我们可以用 v-b…

浅析Vue3动态组件怎么进行异常处理

Vue3动态组件怎么进行异常处理&#xff1f;下面本篇文章带大家聊聊Vue3 动态组件异常处理的方法&#xff0c;希望对大家有所帮助&#xff01; 动态组件有两种常用场景&#xff1a; 一是动态路由&#xff1a; // 动态路由 export const asyncRouterMap: Array<RouteRecordR…

【算法】山东大学人工智能限选课实验一(八数码问题)

实验一 八数码问题 1. 题目介绍 八数码问题描述为&#xff1a;在 33 组成的九宫格棋盘上&#xff0c;摆有 8 张牌&#xff0c;每张牌都刻有 1-8 中的某一个数码。棋盘中留有一个空格&#xff0c;允许其周围的某张牌向空格移动&#xff0c;这样通过移动牌就可以不断改变棋盘布…

【实验报告NO.000001】MIT 6.858 Computer System Security - Lab 1

0x00. 一切开始之前 MIT 6.858 是面向高年级本科生与研究生开设的一门关于计算机系统安全&#xff08;secure computer security&#xff09;的课程&#xff0c;内容包括威胁模型&#xff08;threat models&#xff09;、危害安全的攻击&#xff08;attacks that compromise s…

客快物流大数据项目(九十):ClickHouse的引擎介绍和深入日志引擎讲解

文章目录 ClickHouse的引擎介绍和深入日志引擎讲解 一、引擎介绍 二、日志引擎

【大数据趋势】12月3日纳指大概率反弹到黄金分割附近,然后下跌,之后进入趋势选择期,恒指会跟随。感觉或许有什么大事情要发生,瞎猜中。

行情核心源头分析: 纳斯达克指数 是否会符合大数据规则&#xff0c;走黄金分割线规则 回顾一下上周大数据预测的趋势&#xff0c;虽有波折但最终趋势预测准确 上周11.20日大数据模拟出一个趋势图&#xff0c;大趋势上需要继续上涨尾期&#xff0c;制造一个背离出现&#xff0c…

ZMQ中请求-应答模式的可靠性设计

一、什么是可靠性&#xff1f; 要给可靠性下定义&#xff0c;我们可以先界定它的相反面——故障。如果我们可以处理某些类型的故障&#xff0c;那么我们的模型对于这些故障就是可靠的。下面我们就来列举分布式ZMQ应用程序中可能发生的问题&#xff0c;从可能性高的故障开始&…

[附源码]计算机毕业设计springboot演唱会门票售卖系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

总结:原生servlet请求转发url与请求重定向url的使用区别

总结&#xff1a;原生servlet请求转发url与请求重定向url的使用区别一演示前提&#xff1a;1.演示案例的项目架构如图&#xff1a;2.设置web应用的映射根目录&#xff1a;/lmf&#xff0c;当然也可以不设置。二什么叫请求转发、请求重定向&#xff1f;1.请求转发解释图2. forwa…

Windows 文件共享功能使用方法, 局域网多台电脑之间传送文件

设想一下&#xff0c;家里或者公司有多台电脑&#xff0c;连接同一个Wifi&#xff0c;也就是处于同一个局域网中。 在不能使用微信、网盘的文件传输功能的情况下&#xff0c;这多台电脑之间&#xff0c;就只能用U盘传送数据吗&#xff1f; 不。Windows系统中已经提供了文件共享…