目录
一、概要 1
二、文章结构 1
三、问题描述:图的同构 1
四、判断图同构的算法 2

  1. 基于生成全排列序列的算法 2
  2. 两种基于深度优先搜索与根据局部匹配进行剪枝的算法 3
  3. 基于 canonical labelling(CL)算法的图同构匹配问题 7
    五、算法实现 7
    六、算法测试 7
    七、时间复杂度与 NP 9
    八、图同构算法的实际应用 9
  4. 计算机视觉与模式识别 9
  5. 蛋白质结构的研究 10
  6. 化合物分子的识别 10
  7. 社交网络 10
    九、小结 10
    十、参考文献 11
    八、图同构算法的实际应用
    1.计算机视觉与模式识别
    图的匹配技术已经在模式识别领域取得了长足的进展,具体而言其渗透到以下几个方面:图像分析与处理、文本一致性的鉴定、图像的匹配与提取等。对于

计算机视觉领域,现阶段,许多机器人的目标检测部分都会包含图的匹配,从深海探测到太空遥感识别,图的匹配技术在计算机视觉领域有着十分成功的应用, 其还渗透到了医学中有害细胞的识别,例如癌细胞的识别,与场景分析领域等。
对于实际事物应用匹配算法时,通常会将事物利用图来进行表述。我们知道图主要在呈现一种具有组织性的关系,而这种关系体现在具体事物上,便是同类事物具有的方方面面的属性。这一理论不仅适合于图像的匹配,各种事物都可以用来匹配,因为联系是必然的、内在的、多样化的,只要能提取特征,就能进行匹配。
2.蛋白质结构的研究
在蛋白质研究领域,人们往往好奇具有某种特定结构的蛋白质分子或蛋白质分子簇会不会始终如一地具有某些性质,在进行大量研究后人们找到了一些能体现特定功能的特殊基团。而在研究新的蛋白质分子时,就可以利用自图同构算法进行部分匹配,以利用先验经验对未知蛋白质分子进行学习和探索。
3.化合物分子的识别
对于化合物的结构,必须有一种唯一且无歧义的标签对各种化合物进行标记。以前人们使用树结构来进行这方面的工作,随着数学尤其是群论的发展,一类专门研究化合物结构性质的学科诞生,并推动了分子结构表示从树形图发展到了平面图。对于分子结构的特殊性质,再得益于各种图同构匹配算法的蓬勃发展,化合物分子的匹配可以在有限的时间内高效地完成。
4.社交网络
如何检测人与人之间的相似性,利用他们的社交网络可以轻松完成这一任务。人所进行的关系建立是有目的性、有目标性的,所以对于拥有不同属性的人来说, 他们的社交网络图会呈现出不同的结构。理论上认为,在某些方面相似的两个人, 他们的社交网络图会呈现出某些相似的特征。
九、小结
图的同构算法是一类古老且经典的问题,虽然其被认为是一类 NP 的问题, 但这并不妨碍人们对高效匹配算法的追求。
本次课程设计使我初步了解了图的同构问题,本文转载自http://www.biyezuopin.vip/onews.asp?id=16711看到了图同构算法的发展历程与各种侧重点不同的算法。使我印象最深刻的一篇论文便是 McKay 对于 Nauty 算法的原论文,我被其严谨的数学论证过程所震撼,也深刻意识到自己要学的东西还有很多。
软件并不是单纯的算法与数据结构的堆叠,简单的堆叠是没有灵魂的,它更应该是适应实际问题的最佳匹配。同理,算法也不是对于前人智慧结晶的简单背诵,更应该是对其内在缘由的深度把握。知道、会用一个新算法没什么了不起, 真正厉害的,是通过研究算法与算法被研究出来的过程,将前人的思维方式纳入自己的技术栈。熟练掌握的算法与数据结构是一个程序员的硬实力,而对于体系与性能的精当把控就完全体现了一个人的技术软实力。从长远来看,软实力的积累是至关重要且应当长久不断的一环。

from copy import deepcopyimport numpy as npimport graph.algorithm as alg
import graph_database as g_db
from graph.graph import Graph
from graph.utils import *import pickledef alg_tester(alg_name, graph_g, graph_h, name="None", output=False):matcher = alg_name(graph_g, graph_h)outer = RunTimer()inner = RunTimer()cnt = 0time_list = []ntl = Noneif matcher.is_isomorphic():outer.tic()inner.tic()print(name, "- 两图同构")print("字典序映射(G -> H):")for res in matcher.isomorphisms_iter():cnt += 1res = sort_dict_by_key(res)inner.toc()time_list.append(inner.how())if output:print("#{:03d}  -  {:.15f}\t{}".format(cnt, time_list[-1], res))inner.tic()print("可能映射数: ", cnt)ntl = np.array(time_list)print("\tmean :\t{}\n\tstd  :\t{}".format(ntl.mean(), ntl.std()))else:print(name, "- 两图不同构")outer.toc()outer.show()return {"total": outer.how(), "mean": ntl.mean(), "std": ntl.std()}if __name__ == "__main__":# edge_dict = {#     1: [6, 7, 8, 9],#     2: [5, 7, 8],#     3: [5, 6, 8],#     4: [5, 6, 7],#     5: [2, 3, 4],#     6: [1, 3, 4],#     7: [1, 2, 4],#     8: [3, 2, 1],#     9: [1]# }# edge_dict = {#     1: [2, 6, 7],#     2: [1, 3],#     3: [2, 4],#     4: [3, 5, 7],#     5: [4, 6, 7],#     6: [1, 5],#     7: [1, 4, 5]# }# edge_dict = {#     1: [8, 9, 10, 11, 13],#     2: [8, 9, 10, 14, 15],#     3: [8, 9, 12, 13, 14],#     4: [8, 9, 12, 13, 15],#     5: [10, 11, 12, 14, 15],#     6: [10, 11, 13, 14, 15],#     7: [11, 12, 13, 14, 15],#     8: [16, 1, 2, 3, 4],#     9: [16, 1, 2, 3, 4],#     10: [16, 1, 2, 5, 6],#     11: [16, 1, 5, 6, 7],#     12: [16, 3, 4, 5, 7],#     13: [1, 3, 4, 6, 7],#     14: [2, 3, 5, 6, 7],#     15: [2, 4, 5, 6, 7],#     16: [8, 9, 10, 11, 12],# }times = {}for name, edge_dict in g_db.graphs:print("testing -", name)ee = g_db.parse_data(edge_dict)times[len(ee)] = {}G = Graph(ee)# H = Graph(edge_dict_2)H = deepcopy(G)per = np.random.permutation(list(H.edge_dict.keys()))H.do_permutation(idx_mapping(per))times[len(ee)]["VF2"] = alg_tester(alg.VF2Matcher, G, H, "VF2", output=False)if len(ee) < 30:print("-" * 40)times[len(ee)]["Ullmann"] = alg_tester(alg.UllmannMatcher, G, H, "Ullmann", output=False)print("-" * 80)print("\n\n")format_print_dict(times)pickle.dump(times, open("times_record.svz", "wb"))# alg_tester(alg.VF2Matcher, G, H, "VF2", output=True)# print("-" * 40)# alg_tester(alg.UllmannMatcher, G, H, "Ullmann", output=True)# print("-" * 40)# alg_tester(alg.PermutationMatcher, G, H, "全排列", output=True)










基于Python实现的图的同构算法相关推荐

  1. python电影推荐算法_基于Python的电影推荐算法

    原标题:基于Python的电影推荐算法 第一步:收集和清洗数据 数据链接:https://grouplens.org/datasets/movielens/ 下载文件:ml-latest-small ...

  2. 【PLA】基于Python实现的线性代数算法库之斯密特正交化

    [PLA]基于Python实现的线性代数算法库之斯密特正交化 算法包下载链接:https://download.csdn.net/download/qq_42629529/79481514 from ...

  3. ​causal-learn:基于Python的因果发现算法平台

    来源:集智俱乐部 本文约1100字,建议阅读5分钟 本文为你介绍基于Python的统一算法基本框架. Causal-learn,由CMU张坤老师主导,多个团队(CMU因果研究团队.DMIR实验室.宫明 ...

  4. 基于Python技术栈的算法落地踩坑

    背景介绍 在一些业务场景,我们需要把离线训练好的模型以微服务部署线上,如果是简单的使用sklearn pipeline,可以保存为XML格式的pmml供Java调用, 在配置为4 core,8G内存的 ...

  5. python回归算法_基于Python的函数回归算法验证

    看机器学习看到了回归函数,看了一半看不下去了,看到能用方差进行函数回归,又手痒痒了,自己推公式写代码验证: 常见的最小二乘法是一阶函数回归 回归方法就是寻找方差的最小值 y = kx + b xi, ...

  6. 基于Python的简单蒙特卡洛算法

    首先介绍一下蒙特卡洛算法,蒙特卡洛算法是一种基于随机抽样的计算方法,主要用于模拟和计算复杂的系统和问题.它的名称来自于蒙特卡洛赌场,因为它使用了类似于赌博的随机性质来解决问题. 蒙特卡洛算法的基本思想 ...

  7. 基于Python实现的PageRank算法

    1.前言 PageRank,顾名思义就是页面的排序,其算法最早是由谷歌提出,他们将一些重要的网页进行排序,然后展示给用户,其相当于是一种早期的推荐算法了. 2.任务要求 基于核心思想,将任务简化为以下 ...

  8. 基于python程序利用贪心算法解决旅行家的预算问题

    程序已通过检测:  https://www.dotcpp.com/oj/problem1640.html 问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定 ...

  9. 基于Python的K近邻算法实现

    模式识别 K近邻法 目录 模式识别 K近邻法 1 一.最近邻.k近邻算法介绍 2 1.1 介绍 2 1.2 近邻法的形式化表示 2 (1)最近邻 2 (2)k近邻 3 二.实验数据集介绍 3 2.1 ...

最新文章

  1. fzu 1901 next+脑洞
  2. Windows环境下32位汇编程序设计C版code--第五章(一)
  3. tf报错 之 assertion failed: [Need value.shape >= size, got ] [336 210 3] [224 224 3]
  4. python求最大连续子数组
  5. 【剑指offer】面试题35:复杂链表的复制(Java)
  6. 表格占据整个页面_excel转换为pdf6个示例,在多个工作表、表格和空白页中进行选择...
  7. redis 主从原理
  8. 细丝菲涅尔衍射MATLAB,工程光学系列之六: 菲涅尔衍射  matlab仿真
  9. 极化码理论及算法研究3-Arikan原版论文学习总结
  10. LoadRunner详细使用教程
  11. 20190803——python文件操作
  12. 前端项目中代码格式化配置:eslint + prettier + stylelint + pre-commit
  13. 【Python】迭代法求解非线性方程及方程组
  14. vray物理相机具体参数
  15. 情感分析(判断文章正负向)
  16. macbook pro 怎么打大写字母
  17. 史迪仔的原型_果果的故事之(史迪仔)
  18. 基于Arcgis Runtime SDK 100.x 的Android GIS开发之基础配置
  19. LMD DesignPack的使用技巧:如何设置典型的设计环境?
  20. 适用于Linux用户:PTV VISSIM KERNEL

热门文章

  1. 2022 年及以后值得关注的 18 大 DevOps 趋势
  2. 设备信息工具pv-jd快速上手
  3. Swin Transformer之相对位置编码详解
  4. Edge浏览器打开初始页总是跳转2345怎么办?
  5. USB 3.0 / SATA 3 速度对比
  6. java exchange发邮件_Java通过exchange协议发送邮件
  7. 360day(this)
  8. 【游戏客户端面试题干货】-- 2021年度最新游戏客户端面试干货( C++篇 )
  9. linux 网卡序列号,linux 下查看硬件信息(mac,IP地址,硬盘型号,序列号等)
  10. 计算机设置和美化表格优质课,信息技术教案第三节:Excel工作表的编辑与美化.doc...