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

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

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

所以我们要证明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)
(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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值