数据结构复习笔记
一、卡特兰数
n个不同元素进栈,出栈元素不同排列的个数为
f
(
n
)
=
1
n
+
1
C
2
n
n
f(n) = \frac {1} {n+1}C^n_{2n}
f(n)=n+11C2nn
在此介绍两种理解
1、归纳法
f(1)=1
f(2)=2
f(3):设入栈元素为a、b、c
若a第一个出栈,bc顺序相当于f(2)
若a第二个出栈,必为b入栈后出栈、a出栈,c入栈出栈,f(1)
若a第三个出栈,bc顺序相当于f(2)
故f(3)=f(2)+f(1)+f(2)=5f(4):
设入栈元素为a、b、c、d
若a第一个出栈,相当于f(3)
若a第二个出栈,相当于f(2)
若a第三个出栈,bc:f(2),d:f(1)
若a第四个出栈,f(3)
f(4)=f(3)+f(1)*f(2)+f(2)*f(1)+f(3)=14f(n)=f(0)*f(n-1)+f(1)*f(n-2)+…+f(n)*f(0)
2、排列组合
设进栈为+1,退栈为-1
出栈顺序即为将n个+1,n个-1排列顺序
共计为
C
2
n
n
C^n_{2n}
C2nn
而其中不合法序列即为前缀和<0的情况,
将第一个和<0的前缀取反
则得到n+1个+1,n-1个-1的序列
共有
C
2
n
n
−
1
C^{n-1}_{2n}
C2nn−1
故
f
(
n
)
=
C
2
n
n
−
C
2
n
n
−
1
=
1
n
+
1
C
2
n
n
f(n) = C^n_{2n}-C^{n-1}_{2n}=\frac {1} {n+1}C^n_{2n}
f(n)=C2nn−C2nn−1=n+11C2nn