The Riordan Group and Applications 第1章 笔记
2022年的一本书,只有376页。证明直接去书里面找。
1 介绍
1.1 啥是RiordanArray
1.2 起源和研究动机
1.3 基础的应用
这个广义二项级数描述的是r-ary 数的生成函数。如果\(r=2\),对应的是Catalan数;如果\(r=3\),对应的是Ternary数\(T_n=\frac{1}{2n+1} \tbinom{3n}{n}\)
\(\mathfrak{B}_r\)满足 \(\mathfrak{B}_r= 1+z (\mathfrak{B}_r)^r\)
接着介绍 A-sequence of a family of trees
形式是序列\((a_0,a_1,a_2,\cdots)\),其中\(a_k\)是 updegree \(k\)的权重或数量。
因此,A-sequence给出了 the numebr of possibilities for the updegree of a vertex.
举例,一般我们设置\(a_k=0\)表示没有顶点具有updegree \(k\)。
\(a_k=1\)表示 具有updegree \(k\)的顶点是允许的。
A-sequence的生成函数被称为updegree function,记为\(A(z)\)
举例, Motzkin树是ordered tree,满足每个顶点的updegree是\(0,1,2\)之一。所以对应的A-sequence是\((1,1,1,0,0,\cdots)\),A-function是\(1+z+z^2\)
Complex binary树对应的A-sequence是\((1,0,1,0,0,\cdots)\),A-function是\(1+z^2\)
incomplete binary树可以有right edge或者left edge,对应的A-function是\(1+2z+z^2\)
1.3节按照美式教材的套路告诉了你他是怎么发明这些概念的,怎么找到这些Theorems,formulae的。
但是如果你和我一样是工科生,你不关心这些,你首先关心的是解决问题的算法描述,如果有关于此算法的直观图像当然更好。
我理解的quick start是这样的:
你先了解UUR(Uniform Updegree Requirement) tree,RiordanArray,A-sequence,updegree function(g.f. of A-sequence)这些概念。
知道我们在counting UUR trees时关心这3个矩阵。
知道这些生成函数\(T,V,L_1,L=1+L_1+L_1^2+L_1^3+\cdots\)
\(T\)对应的是the number of such trees with \(n\) edges.
\(V\) counts these same trees but with a marked vertex.
\(L\)对应的是these same trees with a marked leaf.
\(L_k\)对应的是these same trees with a marked leaf at height \(k\).
你想定义一种新的UUR tree的时候,那你肯定要写出它对应的A-function。
你想计数:在边数为\(n\)的你这种UUR tree中,高度为\(k\)的树节点数目,那你关注\(\mathbb{V}\)矩阵。
你想计数:在边数为\(n\)的你这种UUR tree中,高度为\(k\)的叶子节点数目,那你关注\(\mathbb{L}\)矩阵。
你的问题是怎么从A-function得到这2个矩阵?
你打算先求出生成函数\(T\),尝试从这个公式中计算出\(T\):$ A(z T) =T$ (该方程是因为组合构造和对应的生成函数的联系,可以用这里的直接方法理解。方程不容易解可以使用【多项式牛顿迭代】或者【半在线卷积】计算系数。模板?考虑用这个)
接着用这个 \(L_1=z \cdot A^{\prime}(z T).\) 算出\(L_1\)
之后使用RiordanArray的定义算出这3个矩阵:$\mathbb{V}:=(T,L_1)=\mathbb{T}\mathbb{L} \text{ and } \mathbb{L}:=(1,L_1) \text{ and }
\mathbb{T}:=(T,z) $
常见的如下:
(*用于快速验证的Mathematica代码*)
Clear["Global`*"]
RiordanArray[p_, q_, numOfRows_Integer] :=
Table[SeriesCoefficient[p*q^k, {z, 0, n}], {n, 0, numOfRows}, {k, 0,
n}] // Grid;
GenerateMatricesVLT[T_, L1_, numOfRows_Integer] :=
Module[{MatrixV, MatrixL, matrixT},
MatrixV = RiordanArray[T, L1, numOfRows];
MatrixL = RiordanArray[1, L1, numOfRows];
MatrixT = RiordanArray[T, z, numOfRows];
{MatrixV, MatrixL, MatrixT}]
CatalanGF = Sum[CatalanNumber[n]*z^n, {n, 0, Infinity}];
GenerateMatricesVLT[CatalanGF, z*CatalanGF^2, 8]
TenaryNumberGF = Sum[Binomial[3 n, n]/(2*n + 1)*z^n, {n, 0, Infinity}];
GenerateMatricesVLT[TenaryNumberGF^2, 2 (TenaryNumberGF - 1), 8]
Clear["Global`*"];
ASequenceOfTheUURTree[z_] := 1 + z^2;
DerivativeASequenceOfTheUURTree[z_] = D[ASequenceOfTheUURTree[z], z];
T = GF /. Solve[GF == ASequenceOfTheUURTree[z*GF], GF][[1]]
L1 = z*DerivativeASequenceOfTheUURTree[z*T]
RiordanArray[p_, q_, numOfRows_Integer] :=
Table[SeriesCoefficient[p*q^k, {z, 0, n}], {n, 0, numOfRows}, {k, 0,
n}] // Grid;
GenerateMatricesVLT[T_, L1_, numOfRows_Integer] :=
Module[{MatrixV, MatrixL, matrixT},
MatrixV = RiordanArray[T, L1, numOfRows];
MatrixL = RiordanArray[1, L1, numOfRows];
MatrixT = RiordanArray[T, z, numOfRows];
{MatrixV, MatrixL, MatrixT}]
GenerateMatricesVLT[T, L1, 8]
\(\textbf{Theorem 1.1}\) 介绍Couting UUR trees的五个基本方程:
章后练习
点击展开
1.1 使用等式(1.3.1)找到如下RiordanArray矩阵的\((n,k)\)元素的闭形式:
(1) 例子1.1中的\(\mathbb{V}=(C,zC^2)\), \(\mathbb{L}=(1,zC^2)\),其中\(C\)是Catalan数的生成函数
(2) 例子1.2中的\(\mathbb{V}=(g^2,2(g-1))\),\(\mathbb{L}=(1,2(g-1))\),其中\(g\)是ternary数的生成函数。
1.2 证明\(L_1=zA'(zT)\). 见定理1.1的(e)
1.3 解出交通信号灯树的方程,其中,对于任意一个有正updegree的顶点至少有一个绿边。
1.4 说明,对于交通信号灯树