zoukankan      html  css  js  c++  java
  • prufer编码

    prufer编码是用来表示一棵无根树的编码,如果树的节点为n个,那么编码的长度为n-2,一棵无根树只对应一个编码,一个编码只能得出一个无根树。

    编码方式是:

    prufer编码 - 小子 - 那个小子

    这是一颗无根树,这课树的prufer编码为5,5,4,4,4,6。

    首先选这棵树叶子中编号最小的点,将这个点删除,并且把它的邻接点加入一个数组中,例如第一个删除的节点为1,并且把5加入数组中。删除节点后形成一棵新的树,再在新树中删除最小的节点,并且把邻接点加入数组中,,这样重复以上步骤,知道树中最后剩余两个点的时候终止操作。这时候数组中的便是prufer编码。

    由prufer编码来重建这棵树的方法是:

    假如prufer编码为(a1,a2,a3,a4,a5,.....an-2)在上述数组中,在数组最后加入n这个值,这样便形成了数组中包含n-1个节点,例如上述为5,5,4,4,4,6,8。

    然后取不在数组中的最小值为b1,则b1与a1是邻接点,在数组中删除a1,再在剩下的数中选取不为b1,且不在数组中的最小值为b2,则b2与a2是邻接点,这样依次循环下去直到结束,这样便形成了一棵树。

    Cayley定理:不同的n节点标号树的数量为n^(n-2)。

  • 相关阅读:
    CF-807B
    CF-807A
    sort()的升降序函数操作
    CF-805D
    CF-805B
    CF-805A
    CF-796C
    CF-796B
    图论学习四之Disjoint set union并查集
    图论学习三之Shortest Path最短路
  • 原文地址:https://www.cnblogs.com/flyptt/p/3419400.html
Copyright © 2011-2022 走看看