非降路径数


http://www.docin.com/p-447985103.html

http://www.docin.com/p-129149266.html




首先是关于http://blog.csdn.net/super_chris/article/details/6113779


卡特兰数的递推公式是F(n)=∑(k=1…n){F(k-1)*F(n-k)}=∑(k=0…n-1){F(k)*F(n-k-1)}
一般性公式为F(n)=C(2n,n)/(n+1)

可以描述的问题有
1、n个元素的二叉查找树有多少种。
2、n*n棋盘从左下角走到右上角而不穿过主对角线的走法。
3、2n个人排队买票问题,票价50,n个人拿50元,n个人拿100元,售票处无零钱,能顺利卖票的所有排队方式。
4、n个元素全部入栈并且全部出栈的所有可能顺序。

这些问题的答案都是卡特兰数F(n)。但是很明显可以看出后三个问题是同质的。
都可以抽象成2n个操作组成的操作链,其中A操作和B操作各n个,且要求截断到操作链的任何位置都有:A操作(向右走一步、收到50元、元素入栈)的个数不少于B操作(向上走一步、收到100元找出50元、元素出栈)的个数。故问题2、3、4其实是同一个问题。

下面先证明问题2、3、4和问题1同解,再证明问题2、3、4的解是F(n)=C(2n,n)/(n+1),从而证明问题1的解也是F(n)=C(2n,n)/(n+1)。

1、问题2、3、4和问题1同解
问题1的解是F(n)=∑(k=0…n-1){F(k)*F(n-1-k)},因为一棵n个结点的二叉排序树的根可以是1到n的任意结点,设为k,则其左 子树结点个数为k,左子树的种类一共有F(k-1)种,右子树结点个数为n-k,右子树的种类一共有F(n-k)。而究竟哪一点为根可以有1到n共n个选 择,故k取遍1到n――F(n)=∑(k=1…n){F(k-1)*F(n-k)}=∑(k=0…n-1){F(k)*F(n-k-1)}。

如果我们能证明问题2的解也可表示为F(n)=∑(k=0…n-1){F(k)*F(n-1-k)},就完成了证明。

考虑n*n棋盘,记主对角线为L。从左下角走到右上角不穿过对角线L的所有路径,不算起点,一定有第一次接触到L的位置(可能是终点),设此位置为 M,坐标为(x,x)――设第一个数为横轴坐标。该路径一定从下方的(x,x-1)而来,而起点处第一步也一定是走向(1,0),两者理由相同――否则就 穿过了主对角线。考虑从(1,0)到(x,x-1)的(x-1)*(x-1)的小

棋盘中,因为在此中路径一直没有接触过主对角线(M的选取),所以在此小棋盘中路径也一定没有穿过从(1,0)到(x,x-1)的小棋盘的对角线 L1。这样在这个区域中的满足条件的路径数量就是一个同构的子问题,解应该是F(x-1),而从M到右上角终点的路径数量也是一个同构的子问题,解应该是 F(n-x),而第一次接触到主对角线的点可以从(1,1)取到(n,n),这样就有F(n)=∑(k=1…n){F(k-1)*F(n- k)}=∑(k=0…n-1){F(k-1)*F(n-k)}。证毕。

2、问题2的解为F(n)=C(2n,n)/(n+1)
思路是先求所有从(0,0)到(n,n)的路径数X,再求所有穿过主对角线L的从(0,0)到(n,n)的路径数Y,用前者减去后者得到所求。
从(0,0)到(n,n)的路径数显然是C(2n,n),一共要走2n步到达右上角,其中向右和向上各n步,总走法是C(2n,n)。
考虑一个新增的位置(n-1,n+1),它位于终点的左上角一个格处,设所有从(0,0)到(n-1,n+1)的路径数为Z,下面要证明Y和Z相等,从而通过求Z来求Y。
考虑从(0,1)到(n-1,n)的对角线L2,对于所有穿过L而到达终点的路径,一定会接触到L2,找出某路径第一次接触到L2的位置M1,将从M1到 终点的路径沿L2做对折一定会得到一条从M1到(n-1,n+1)的路径,故每条穿过L到达终点的路径都对应一条到达(n-1,n+1)的路径,即有 Y<=Z。

所有从起点到达(n-1,n+1)的路径都一定会穿过L2,找出某路径第一次穿过L2的位置M2,将M2到(n-1,n+1)的路径沿L2对折,就 得到一条M2到(n,n)的路径,且该条路径一定穿过L,故每条到达(n-1,n+1)的路径都对应一条穿过L到达终点的路径,即有Z<=Y。
故Z==Y。
接下来通过求Z来求Y。Z是显然的从(0,0)到(n-1,n+1)共需走2n步,其中向右n-1步、向上n+1步,故Z=C(2n,n-1)。
由以上可知F(n)=X-Y=X-Z=C(2n,n)-C(2n,n-1)=C(2n,n)/(n+1)。证毕。

由以上可知问题1的解也是F(n)=C(2n,n)/(n+1),故求和(k){F(k)*F(n-1-k)}=C(2n,n)/(n+1)。这个 数称为卡特兰数,前几项为1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796。

除了上面描述的四个问题外,它对应的问题还有:
矩阵链所有乘法顺序问题(同问题1)。
凸多边形剖分成三角形的方法数(同问题1)。


其次是在PPT中学到

非降路径数的基本计数模型

(0,0) 到 (m,n) 的非降路径数:C(m+n, m)
(a,b) 到 (m,n)的非降路径数:
等于 (0,0) 到 (m-a,n-b) 的非降路径数
(a,b) 经过 (c,d) 到 (m,n) 的非降路径数:乘法法则

限制条件的非降路径数

从(0,0)到(n,n)不接触对角线的非降路径数 N
N1:从(0,0) 到 (n,n)下不接触对角线非降路径数
N2:从(1,0)到(n,n-1)下不接触对角线非降路径数
N0: 从(1,0)到(n,n-1)的非降路径数
N3: 从(1,0)到(n,n-1)接触对角线的非降路径数
关系: N=2N1=2N2=2[N0-N3] 


N3: 从(1,0)到(n,n-1)接触对角线的非降路径数
N4: 从(0,1)到(n,n-1)无限制条件的非降路径数
关系:  N3=N4

N=2[N0-N3]=2[N0-N4]=....



first
若设m<n,求(0,1)点到(m,n)点不接触对角线x=y(x<y)的格路的数目    (“接触”包括“穿过”)?
容易看出从(0,1)到(m,n)接触x=y的格路与 (1,0)到(m,n)的格路(必穿过x=y)一一对应
(0,1)到(m,n)路径数减去(1,0)到(m,n)路径数:
c(m+n-1,m) - c(m+n-1,m-1) (m<n)

second.
若条件改为可接触但不可穿过,则限制线要向下或向右移一格,得x-y=1, 
(0,0)关于x-y=1的对称点为(1,-1).
所求格路数为

c(m+n,n)-c(m+n,m-1) (m<n)
(0,0)到(m,n)路径数减去(1,-1)到(m,n)路径数


其实目前还不太懂。。都粘上上到这块内容再看吧。。。

你可能感兴趣的:(非降路径)