zoukankan      html  css  js  c++  java
  • prufer序列

    介绍

      其实是(prddot{u}fer)序列

      什么是prufer序列?

      我们认为度数为(1)的点是叶子节点

      有一颗无根树,每次选出编号最小的叶子节点,加到当前prufer序列的后面,然后删掉这个节点。直到剩下两个点为止。

      这样会得到一个长度为(n-2),每个数都是(1 ext{~}n)的序列。

      可以看出,每棵无根树都对应唯一一个序列。

      我们发现,所有叶子节点都不在prufer序列中,一个度数为(d)的点在prufer序列中的出现次数是(d-1)

      那么怎样从一个prufer序列得到一棵树呢?

      令(A={1,2,ldots,n})

      每次我们选择最小的在(A)中且不在prufer序列中的点(x),连一条边到prufer序列的第一个点(y),然后把(x)(A)中删掉,把prufer序列的第一个数删掉,直到prufer序列为空。这样(A)中还会剩下两个数,在这两个点之间连边即可。

      现在我们要证明每个prufer序列都唯一对应一棵树。

      因为每个时候(A)的大小都比prufer序列的长度大(2),所以每次一定能找到一个没在剩下的prufer序列里出现过的数。所以每个prufer序列都对应唯一一棵树。

      prufer序列有(n^{n-2})个,所以(n)个点带标号无根树就有(n^{n-2})种。

    应用

      prufer是一种处理和树有关的计数问题的非常有用的工具。

      可以把树的计数问题转成数列的计数问题。.

      显然数列的计数比树的计数简单很多。

      比如说,一个点的度数最多为(d),那么这个点在prufer序列中的出现次数(leq d-1)

      比如说,生成一个由(k)棵树构成的森林,那么前面(n-k-1)个数可以是(1 ext{~}n),第(n-k)个数是这(k)个根中的一个,还要乘上选(k)个根的方案数,答案为(inom{n}{k} imes n^{n-k-1} imes k)

  • 相关阅读:
    Hadoop生态圈-Hive快速入门篇之HQL的基础语法
    Hadoop生态圈-Hive快速入门篇之Hive环境搭建
    Hadoop生态圈-zookeeper的API用法详解
    Hadoop生态圈-zookeeper完全分布式部署
    Hadoop基础-MapReduce的工作原理第一弹
    Hadoop基础-HDFS的读取与写入过程
    java基础-回调函数(callback)
    Hadoop基础-网络拓扑机架感知及其实现
    Hadoop基础-HDFS数据清理过程之校验过程代码分析
    Hadoop基础-Protocol Buffers串行化与反串行化
  • 原文地址:https://www.cnblogs.com/ywwyww/p/8512248.html
Copyright © 2011-2022 走看看