遗传算法应用(实例详细演示最小生成树的prufer编码和Cayley定理)
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定理)相关推荐
- matlab生成谷形函数,使用MATLAB遗传算法工具实例(详细) (1)
最新发布的MA TLAB 7.0 Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS ...
- matlab如何用遗传算法,使用MATLAB遗传算法工具实例(详细).doc
最新发布的MATLAB 7.0 Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS) ...
- CAS_SSO单点登录实例详细步骤(转)、Tomcat ssl(https) 配置
CAS_SSO单点登录实例详细步骤(转).Tomcat ssl(https) 配置 博客分类: SSO&CAS&Identity Java.Tomcat 0, 从CAS官网下载最新版本 ...
- 4、Power Map—实例:演示报告封面
从这节开始我们就按一个实例来演示如何做一个<销售年终报告>. 进入小地球,这里面的功能还是比较简单. 这次我们要制作一个报告封面,将用到如下功能. 首先我们创建第一个场景,缩小地球,添加标 ...
- 树的Prufer 编码和最小生成树计数
Prufer数列 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2.它可以通过简单的迭代方法计 ...
- python——实例详细弄懂if __name__ == ‘__main__‘用法
前言:在python慢慢学习路中,经常会遇到if __name__ == "__main__",而且会发现不写这句话,代码依旧可以执行.心里就有一百个疑问,通过大神指导,小编终于理 ...
- Lisp:AutoLisp入门、操作编程实例详细攻略
Lisp:AutoLisp入门.操作编程实例详细攻略 目录 AutoLisp入门 1.图文教程 AutoLisp操作 AutoLisp入门 AutoLISP是由Autodesk公司开发的一种LISP程 ...
- python爬取大众点评数据_python爬虫实例详细介绍之爬取大众点评的数据
python 爬虫实例详细介绍之爬取大众点评的数据 一. Python作为一种语法简洁.面向对象的解释性语言,其便捷性.容易上手性受到众多程序员的青睐,基于python的包也越来越多,使得python ...
- 玩转Android10源码开发定制(二)之基于Pixel 3手机超级详细演示recovery刷机
玩转Android10源码开发定制(二)之基于Pixel 3手机超级详细演示recovery刷机 本节主要内容: Pixel 3通过fastboot方式刷入Android 11.0官方工厂镜像 Pix ...
最新文章
- boost::hana::is_disjoint用法的测试程序
- 手机客户端测试点(全)
- 电脑开机3秒就重启循环_小米9不开机、循环重启,插充电器屏幕没反应怎么回事?听说是通病,可以维修吗?...
- 深入PHP使用技巧之变量
- no response after clicking clone in github desktop
- KMP--找子串2.0
- NLPIR 汉语分词系统 (PyNLPIR) 学习手札
- 【百家讲坛】郦波副教授解读《曾国…
- [SHOI2015]激光发生器
- 阿里云服务器上的数据是如何确保安全的
- shazam 音频指纹 听歌识曲 原理(附代码)
- MySQL期末考试题目 题目1:查询employee数据表中的第5—8行的数据;题目2:查询每个部门的员工人数以及平均工资;题目3:查询‘孙威’的基本信息,包括员工编号、所在部门名称、岗位等级以及基本
- 开源为什么是“白色”的?
- MySQL运行机制-从入门到京东
- AMBA总线协议之AHB学习记录(1)—ahb_bus(附verilog代码)
- 关于Mongodb的全面总结
- MPU6050 DMP 代码完全解析 —— dmp_init
- 视频教程-由浅入深Java零基础入门-Java
- 大数据BI工具Tableau学习【第二期】]带你领略Tableau 的页面风采
- 整数划分 --- 一个老生长谈的问题 动态规划