prufer编码:用n-2位自然数唯一的表达出一棵n个节点的生成树。而且两者相互可逆,即给定一颗生成树的连接方式,可以唯一确定这棵树的编码。
Cayley定理:n个顶点的完全图中有nn−2n^{n-2}nn−2棵不同的生成树。

显然这两个描述具有很强的联系,n个顶点编号为1,2,…n。有n-2个位置,随便填入1,2,…n中的一个数,这有nn−2n^{n-2}nn−2种可能。

所以我们要证明Cayley定理,只需要证明prufer编码

prufer编码

1.设有如下生成树(n=6),根据prufer编码,我们只需要6-2=4位就可以对这颗生成树完成编码。

2.树中叶子的概念。

3.prufer编码的步骤。

(i)在我们这里,1是标号最小的叶子。
(ii)1与2相连,将2写入编码,删去边(1,2)。此时编码为2,删去边(1,2)如下图。

(i)在我们这里,3是标号最小的叶子。
(ii)3与2相连,将2写入编码,删去边(3,2)。此时编码为2,2,删去边(3,2)如下图。

(i)在我们这里,4是标号最小的叶子。
(ii)4与6相连,将6写入编码,删去边(4,6)。此时编码为2,2,6,删去边(4,6)如下图。

(i)在我们这里,5是标号最小的叶子。
(ii)5与2相连,将2写入编码,删去边(5,2)。此时编码为2,2,6,2,删去边(5,2)如下图。

一个关键的地方来了,接下来停止编码,我们发现,只用了n-2位编码。一个疑惑当然是:现就就停止编码,能否根据编码2,2,6,2还原出这颗生成树呢?

4.解码步骤


(i)初始

(ii)

(ii)重复

(ii)重复,注意到,这步很关键,P的补集中加了一个6,因为6从P中删除后,不再在P中出现了,所以这个时候要加入到P的补集中。

(ii)重复

(iii)结束,P为空集,连接P的补集中的顶点。

至此,prufer编码的解码也已经完成了,且这个数和之前的树一模一样,即是可逆的。
所以一个prufer编码也唯一确定一颗树,反之亦然。


回到标题:
这个编码和遗传算法会有什么关系?我们知道在使用遗传算法求解一个完全图的最小生成树过程中:两个母体需要进行交叉来繁殖后代,而两个母体都是生成树,这个时候我们需要一个编码,比如采用我们这里的prufer编码:

P1:1234456
P2:1232144

假设第4位交叉了一下,有了两个孩子。

C1:1232456
C2:1234144

这两个孩子根据prufer编码显然还是对应一个生成树,然后我们就可以直接物竞天择,看一下这两个孩子有没有进化得更好。

以上编码是方便的,但是你采用其他编码就非常不方便了。因为交叉之后,可能不是一颗合法的生成树,比如可能有环。
例如采用边直接编码:

P1:(1,2),(1,3),(1,4)
P2:(2,3),(1,2),(3,4)

以上对应于:


交叉后,假设第二条边交叉,那么得到:

P1:(1,2),(1,2),(1,4)
P2:(2,3),(1,3),(3,4)

显然,一不注意,P1就违规了,因为P1中没有顶点3,不是最小生成树!


补充,这个prufer编码还有一个特点,就是编码所对应的生成树中,顶点v的度数d等于编码中顶点v出现次数加1。

遗传算法应用(实例详细演示最小生成树的prufer编码和Cayley定理)相关推荐

  1. matlab生成谷形函数,使用MATLAB遗传算法工具实例(详细) (1)

    最新发布的MA TLAB 7.0 Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS ...

  2. matlab如何用遗传算法,使用MATLAB遗传算法工具实例(详细).doc

    最新发布的MATLAB 7.0 Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS) ...

  3. CAS_SSO单点登录实例详细步骤(转)、Tomcat ssl(https) 配置

    CAS_SSO单点登录实例详细步骤(转).Tomcat ssl(https) 配置 博客分类: SSO&CAS&Identity Java.Tomcat 0, 从CAS官网下载最新版本 ...

  4. 4、Power Map—实例:演示报告封面

    从这节开始我们就按一个实例来演示如何做一个<销售年终报告>. 进入小地球,这里面的功能还是比较简单. 这次我们要制作一个报告封面,将用到如下功能. 首先我们创建第一个场景,缩小地球,添加标 ...

  5. 树的Prufer 编码和最小生成树计数

    Prufer数列 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2.它可以通过简单的迭代方法计 ...

  6. python——实例详细弄懂if __name__ == ‘__main__‘用法

    前言:在python慢慢学习路中,经常会遇到if __name__ == "__main__",而且会发现不写这句话,代码依旧可以执行.心里就有一百个疑问,通过大神指导,小编终于理 ...

  7. Lisp:AutoLisp入门、操作编程实例详细攻略

    Lisp:AutoLisp入门.操作编程实例详细攻略 目录 AutoLisp入门 1.图文教程 AutoLisp操作 AutoLisp入门 AutoLISP是由Autodesk公司开发的一种LISP程 ...

  8. python爬取大众点评数据_python爬虫实例详细介绍之爬取大众点评的数据

    python 爬虫实例详细介绍之爬取大众点评的数据 一. Python作为一种语法简洁.面向对象的解释性语言,其便捷性.容易上手性受到众多程序员的青睐,基于python的包也越来越多,使得python ...

  9. 玩转Android10源码开发定制(二)之基于Pixel 3手机超级详细演示recovery刷机

    玩转Android10源码开发定制(二)之基于Pixel 3手机超级详细演示recovery刷机 本节主要内容: Pixel 3通过fastboot方式刷入Android 11.0官方工厂镜像 Pix ...

最新文章

  1. boost::hana::is_disjoint用法的测试程序
  2. 手机客户端测试点(全)
  3. 电脑开机3秒就重启循环_小米9不开机、循环重启,插充电器屏幕没反应怎么回事?听说是通病,可以维修吗?...
  4. 深入PHP使用技巧之变量
  5. no response after clicking clone in github desktop
  6. KMP--找子串2.0
  7. NLPIR 汉语分词系统 (PyNLPIR) 学习手札
  8. 【百家讲坛】郦波副教授解读《曾国…
  9. [SHOI2015]激光发生器
  10. 阿里云服务器上的数据是如何确保安全的
  11. shazam 音频指纹 听歌识曲 原理(附代码)
  12. MySQL期末考试题目 题目1:查询employee数据表中的第5—8行的数据;题目2:查询每个部门的员工人数以及平均工资;题目3:查询‘孙威’的基本信息,包括员工编号、所在部门名称、岗位等级以及基本
  13. 开源为什么是“白色”的?
  14. MySQL运行机制-从入门到京东
  15. AMBA总线协议之AHB学习记录(1)—ahb_bus(附verilog代码)
  16. 关于Mongodb的全面总结
  17. MPU6050 DMP 代码完全解析 —— dmp_init
  18. 视频教程-由浅入深Java零基础入门-Java
  19. 大数据BI工具Tableau学习【第二期】]带你领略Tableau 的页面风采
  20. 整数划分 --- 一个老生长谈的问题 动态规划

热门文章

  1. 阿里专家张磊:云原生为什么对云计算生态充满吸引力?
  2. CVPR2019 日程安排
  3. 只知道GAN你就OUT了——VAE背后的哲学思想及数学原理
  4. 2020年趋势一览:AutoML、联邦学习、云寡头时代的终结(附链接)
  5. “深度学习”这十年:52篇大神级论文再现AI荣与光
  6. 近期活动盘点:大咖云集,中国AI创新者论坛(3.21)
  7. 剑指offer:整数中1出现的次数(从1到n整数中1出现的次数)
  8. 卧槽!又一 SQL 神器面世!!
  9. 深度学习的强大应用,且看如何用神经网络给可爱的圆滚滚们发对象!
  10. 【把握未来】一文总结5G边缘计算的价值机遇