Catalan数
问题:
售票厅的票价50美分一张,2n个人排队,n个人有50美分,n个人有1美元,售票厅没有余额,为了能找零,有多少种排队方式?
数学公式法:
2n个人,将每个人看成一样(若不一样,最后乘 n! 即可),则可以有Cn2nC2nn个排列方式。其中错误的排列有Cn+12nC2nn+1 种,则正确的排列有Cn2n−Cn+12nC2nn−C2nn+1种。
令50美分的人为0, 100美分的人为1,各有n个。若令1的个数为n+1个,令0的个数为n-1个,则该2n个数的排列一定是错的,且排列数为Cn+12nC2nn+1 。若在第k个人出错,则前k个数的1比0多一个,且k个人后面的数也是1比0多一个。将k个人后面的数0变1,1变0,则为原问题的错误排列。同理,原问题在第k个人出错,即前k个数1比0多一个,将k个人后面的数0变1,1变0,则为新问题的错误排列。因此原问题的错误排列数 = 新问题的错误排列数。
1n+1Cn2n=Cn2n−Cn+12n1n+1C2nn=C2nn−C2nn+1即为最后的结果。
动态规划法:
令有50美分的人数为m,有1美元的人数为n。则排队方式记为f(m,n)f(m,n)。
f(m,n)={0f(m−1,n)+f(m,n−1)m<nm≥nf(m,n)={0m<nf(m−1,n)+f(m,n−1)m≥n
f(m,n)f(m,n)的值可以用矩阵表示,一共有m行n列。
111111012345002591400051428000014420000042100000110000122000135500149141401514284242
Catalan数即为对角线上的值。
递推公式:
f(n),n=0,1,2⋯f(n),n=0,1,2⋯表示第n个Catalan数。
f(n)=f(0)f(n−1)+f(1)f(n−2)+⋯+f(n−1)f(0)f(n)=f(0)f(n−1)+f(1)f(n−2)+⋯+f(n−1)f(0)