zoukankan      html  css  js  c++  java
  • 5. 卡特兰数(Catalan)公式、证明、代码、典例.

    不好意思,没想到博客搬家的时候把格式给弄乱了,这边看的不方便,可以移步:https://blog.csdn.net/Sherry_Yue/article/details/88364746

    1. 定义

    卡特兰数(卡塔兰数),英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列。
    其前几项为(从第零项开始) :

    C0 = 1,         
    C1 = 1,         C2 = 2,          C3 = 5,          C4 = 14,          C5 = 42,
    C6 = 132,       C7 = 429,        C8 = 1430,       C9 = 4862,        C10 = 16796,
    C11 = 58786,    C12 = 208012,    C13 = 742900,    C14 = 2674440,    C15 = 9694845,
    C16 = 35357670, C17 = 129644790, C18 = 477638700, C19 = 1767263190, C20 = 6564120420, ...
    

    2. 公式

    通项公式1:Cn=11+n(2nn)=11+nC2nn=(2n)!(n+1)!n!C_n=frac{1}{1+n}{2n choose n}=frac{1}{1+n}C_{2n}^n=frac{(2n)!}{(n+1)!n!}Cn=1+n1(n2n)=1+n1C2nn=(n+1)!n!(2n)!

    通项公式2:Cn=1n+1∑i=0n(ni)2=1n+1∑i=0n(Cni)2C_n=frac{1}{n+1}sum_{i=0}^n{n choose i}^2=frac{1}{n+1}sum_{i=0}^n(C_n^i)^2Cn=n+11i=0n(in)2=n+11i=0n(Cni)2

    递推公式1:Cn+1=2(2n+1)n+2CnC_{n+1}=frac{2(2n+1)}{n+2}C_nCn+1=n+22(2n+1)CnC0=1C_0=1C0=1

    递推公式2:Cn+1=∑i=0nCiCn−iC_{n+1}=sum_{i=0}^{n}C_iC_{n-i}Cn+1=i=0nCiCniC0=1C_0=1C0=1n>=0n>=0n>=0

    性质:Cn=(2nn)−(2nn−1)=C2nn−C2nn−1C_n={2n choose n}-{2n choose n-1}=C_{2n}^n-C_{2n}^{n-1}Cn=(n2n)(n12n)=C2nnC2nn1

    渐近增长:Cn∼4nn32πC_nsimfrac{4^n}{n^{frac{3}{2}}sqrt{pi}}Cnn23π4n

    3. Catalan公式推导

    我们根据递推公式2:Cn+1=∑i=0nCiCn−iC_{n+1}=sum_{i=0}^{n}C_iC_{n-i}Cn+1=i=0nCiCniC0=1C_0=1C0=1n>=0n>=0n>=0

    可以得到这样一个函数:hn=∑k=1n−1hkhn−kh_n=sum_{k=1}^{n-1}h_kh_{n-k}hn=k=1n1hkhnkn>=2n>=2n>=2

    由于这个递推关系不是线性的,hnh_nhn并不依赖于其前面的某个固定值,而依赖于前面的所有值,所以递推公式2就用不上了。

    不妨令生成函数:
    g(x)=h1x+h2x2+h3x3+……+hnxn+……g(x)=h_1x+h_2x^2+h_3x^3+……+h_nx^n+……g(x)=h1x+h2x2+h3x3++hnxn+

    将g(x)与自己相乘:
    [g(x)]2=h12x12+(h1h2+h2h1)x3+(h1h3+h2h2+h3h1)x4+……+(h1hn−1+h2hn−2+……+hn−1h1)xn+……[g(x)]^2=h_1^2x_1^2+(color{fuchsia}h_1h_2+h_2h_1color{black})x^3+(color{red}h_1h_3+h_2h_2+h_3h_1color{black})x^4+……+(h_1h_{n-1}+h_2h_{n-2}+……+h_{n-1}h_1)x^n+……[g(x)]2=h12x12+(h1h2+h2h1)x3+(h1h3+h2h2+h3h1)x4++(h1hn1+h2hn2++hn1h1)xn+

    又根据卡特兰数前两项均为1,即h1=h2=1h_1=h_2=1h1=h2=1,以及上面得到的hnh_nhn的递推关系代入得到:
    [g(x)]2=h2x2+h3x3+h4x4+……+hnxn+……=g(x)−h1x=g(x)−x[g(x)]^2=h_2x^2+h_3x^3+h_4x^4+……+h_nx^n+……=g(x)-color{blue}h_1xcolor{black}=g(x)-x[g(x)]2=h2x2+h3x3+h4x4++hnxn+=g(x)h1x=g(x)x

    于是有:
    [g(x)]2−g(x)+x=0[g(x)]^2-g(x)+x=0[g(x)]2g(x)+x=0

    解得:
    g1(x)=1+1−4x2g_1(x)=frac{1+sqrt{1-4x}}{2}g1(x)=21+14x
    g2(x)=1−1−4x2g_2(x)=frac{1-sqrt{1-4x}}{2}g2(x)=2114x

    由g(x)的定义知道g(0)=0g(0)=0g(0)=0,验证上述根只有g2(x)g_2(x)g2(x)成立,所以生成函数:
    g(x)=g2(x)=1−1−4x2=12−12(1−4x)1/2g(x)=g_2(x)=frac{1-sqrt{1-4x}}{2}=frac{1}{2}-frac{1}{2}(1-4x)^{1/2}g(x)=g2(x)=2114x=2121(14x)1/2

    根据牛顿二项式定理:
    (1+z)12=1+∑n=1∞(−1)n−1n∗22n−1(2n−2n−1)znegin{aligned} (1+z)^{frac{1}{2}} &= 1+sum_{n=1}^{infty}frac{(-1)^{n-1}}{n*2^{2n-1}}{2n-2choose n-1} z^nend{aligned}(1+z)21=1+n=1n22n1(1)n1(n12n2)zn
    将g(x)中的项展开:
    (1−4x)12=1+∑n=1∞(−1)n−1n∗22n−1(2n−2n−1)(−4x)n=1+∑n=1∞(−1)n−1n∗22n−1(2n−2n−1)22nxn=1−∑n=1∞2n(2n−2n−1)xn=1−2∑n=1∞1n(2n−2n−1)xn(∣x∣&lt;14)egin{aligned} (1-4x)^{frac{1}{2}} &amp;= 1+sum_{n=1}^{infty}frac{(-1)^{n-1}}{n*2^{2n-1}}{2n-2choose n-1}(-4x)^n\ &amp;= 1+sum_{n=1}^{infty}frac{(-1)^{n-1}}{n*2^{2n-1}}{2n-2choose n-1}2^{2n}x^n \ &amp;= 1-sum_{n=1}^{infty}frac{2}{n}{2n-2choose n-1}x^n\ &amp;= 1-2sum_{n=1}^{infty}frac{1}{n}{2n-2choose n-1}x^n &amp;(|x|&lt;frac{1}{4})end{aligned}(14x)21=1+n=1n22n1(1)n1(n12n2)(4x)n=1+n=1n22n1(1)n1(n12n2)22nxn=1n=1n2(n12n2)xn=12n=1n1(n12n2)xn(x<41)
    所以:
    g(x)=12−12(1−4x)1/2=12−12[1−2∑n=1∞1n(2n−2n−1)xn]=∑n=1∞1n(2n−2n−1)xnegin{aligned} g(x)&amp;=frac{1}{2}-frac{1}{2}(1-4x)^{1/2}\ &amp;=frac{1}{2}-frac{1}{2}[1-2sum_{n=1}^{infty}frac{1}{n}{2n-2choose n-1}x^n] \ &amp;= sum_{n=1}^{infty}frac{1}{n}{2n-2choose n-1}x^n end{aligned}g(x)=2121(14x)1/2=2121[12n=1n1(n12n2)xn]=n=1n1(n12n2)xn

    故通项公式为:hn=1n(2n−2n−1)h_n=frac{1}{n}{2n-2choose n-1}hn=n1(n12n2)(n&gt;=1)(n&gt;=1)(n>=1)

    即:hn=11+n(2nn)h_n=frac{1}{1+n}{2n choose n}hn=1+n1(n2n)(n&gt;=0)(n&gt;=0)(n>=0)

    4. 卡特兰数的代码实现

    //函数功能: 计算Catalan的第n项
    //函数参数: n为项数
    //返回值:  第n个Catalan数
    int Catalan(int n)
    {
    	if(n<=1) return 1;
    	int *h = new int [n+1]; //保存临时结果
    	h[0] = h[1] = 1;        //h(0)和h(1)
    	for(int i=2;i<=n;++i)    //依次计算h(2),h(3)...h(n)
    	{
    		h[i] = 0;
    		for(int j = 0; j < i; j++) //根据递归式计算 h(i)= h(0)*h(i-1)+h(1)*h(i-2) + ... + h(i-1)h(0)
    			h[i] += (h[j] * h[i-1-j]);
    	}
    	int result = h[n]; //保存结果
    	delete [] h;       //注意释放空间
    	return result;
    }
    

    5. 典例

    1. 出栈次序

    一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?

    1. 首先,我们设 f(n)=序列个数为n的出栈序列种数。

    2. 同时假定,从开始到栈第一次出到空为止,这段过程中第一个出栈的序数是k。
      特别地,如果栈直到整个过程结束时才空,则k=n。

    3. 首次出空之前第一个出栈的序数k将1 ~ n的序列分成两个序列:其中一个是1 ~ k-1,序列个数为k-1;另外一个是k+1 ~ n,序列个数是n-k。

    4. 此时,我们若把k视为确定一个序数,那么根据乘法原理,f(n)的问题就等价于——序列个数为k-1的出栈序列种数乘以序列个数为n - k的出栈序列种数(一种递归的思想),即选择k这个序数的f(n)=f(k-1)×f(n-k)。

    5. 而k可以选1到n,所以再根据加法原理,将k取不同值的序列种数相加,得到的总序列种数为: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)f(n)=f(0)f(n1)+f(1)f(n2)++f(n1)f(0)

    6. 这个公式与卡特兰数的递推式一模一样,即为f(n)=h(n)=1n+1C2nn=C2nn−C2nn+1f(n)=h(n)= frac{1}{n+1}C_{2n}^n= C_{2n}^n-C_{2n}^{n+1}f(n)=h(n)=n+11C2nn=C2nnC2nn+1。最后,令f(0)=1,f(1)=1。

    其解等于第n个Catalan数。

    2. 01序列

    给出一个n,要求一个长度为2n的01序列,使得序列的任意前缀中1的个数不少于0的个数, 有多少个不同的01序列?
    以下为长度为6的序列:
    111000 101100 101010 110010 110100

    有了上面出栈次序那道题的分析,这道题仿佛似曾相识,其本质就是出栈次序的变式:
    1. 因为对于每一个数来说,必须进栈一次、出栈一次。我们把进栈设为状态‘1’,出栈设为状态‘0’。n个数的所有状态对应n个1和n个0组成的2n位二进制数。
    2. 由于等待入栈的操作数按照1‥n的顺序排列、入栈的操作数b大于等于出栈的操作数a(a≤b),因此输出序列的总数目=由左而右扫描由n个1和n个0组成的2n位二进制数,1的累计数不小于0的累计数的方案种数。

    该题的操作方法:

    1. 在2n位二进制数中填入n个1的方案数为 C2nnC_{2n}^nC2nn,不填1的其余n位自动填0。

    2. 从中减去不符合要求(由左而右扫描,0的累计数大于1的累计数)的方案数即为所求。

    3. 不符合要求的数的特征是由左而右扫描时,必然在某一奇数位2m+1位上首先出现m+1个0的累计数和m个1的累计数,此后的2n-2m-1位上有n-m个 ‘1’ 和n-m-1个 ‘0’

    4. 如若把后面这2n-2m-1位上的0和1互换,使之成为n-m个 ‘0’ 和n-m-1个 ‘1’,结果得1个由n+1个 ‘0’ 和n-1个 ‘1’ 组成的2n位数,即一个不合要求的数对应于一个由n+1个 ‘0’ 和n-1个 ‘1’ 组成的排列。

    5. 反过来,任何一个由n+1个 ‘0’ 和n-1个 ‘1’ 组成的2n位二进制数,由于0的个数多2个,2n为偶数,故必在某一个奇数位上出现0的累计数超过1的累计数。同样在后面部分0和1互换,使之成为由n个 ‘0’ 和n个 ‘1’ 组成的2n位数,即n+1个 ‘0’ 和n-1个 ‘1’ 组成的2n位数必对应一个不符合要求的数。

    6. 因而不合要求的2n位数与n+1个 ‘0’,n-1个 ‘1’ 组成的排列一一对应

    7. 显然,不符合要求的方案数为C2nn+1C_{2n}^{n+1}C2nn+1。由此得出输出序列的总数目f(n)=h(n)=C2nn−C2nn+1=1n+1C2nnf(n)=h(n)=C_{2n}^n-C_{2n}^{n+1}=frac{1}{n+1}C_{2n}^nf(n)=h(n)=C2nnC2nn+1=n+11C2nn

    其解等于第n个Catalan数。

    3. ‘+1’‘-1’序列

    n个+1和n个-1构成的2n项 a1,a2,⋅⋅⋅,a2na_1,a_2,···,a_{2n}a1,a2,,a2n,其部分和满足非负性质,即a1+a2+⋅⋅⋅+ak&gt;=0a_1+a_2+···+a_k&gt;=0a1+a2++ak>=0,(k=1,2,···,2n) ,有多少个不同的此序列?

    此典例解析与01序列解析一模一样,即此数列的个数等于第n个Catalan数,此处就不再赘述。

    其解等于第n个Catalan数。

    4. 括号序列

    n对括号有多少种匹配方式?
    例如3对括号构成的合法括号序列有C3=5C_3=5C3=5个:((())),()(()),()()(),(())(),(()())。

    其本质是“01序列”的变式:
    我们把左括号设为状态‘1’,右括号设为状态‘0’。n对括号的所有状态对应n个 ‘1’ 和n个 ‘0’ 组成的2n位二进制数。
    由于必须先有左括号,才能匹配右括号,因此输出正确括号序列的总数目=由左而右扫描由n个 ‘1’ 和n个 ‘0’ 组成的2n位二进制数,1的累计数不小于0的累计数的方案种数。

    其解等于第n个Catalan数。

    5. 找零问题

    2n个人要买票价为五元的电影票,每人只买一张,但是售票员没有钱找零。其中,n个人持有五元,另外n个人持有十元,问在不发生找零困难的情况下,有多少种排队方法?

    其本质是“01序列”的变式:
    我们把持有五元的人设为状态‘1’,持有十元的人设为状态‘0’。2n个人的所有状态对应n个 ‘1’ 和n个 ‘0’ 组成的2n位二进制数。
    由于必须先有1个持有五元的人排在1个持有十元的人的前面,才能不发生找零困难,因此不发生找零困难排队方法的总数目=由左而右扫描由n个 ‘1’ 和n个 ‘0’ 组成的2n位二进制数,1的累计数不小于0的累计数的方案种数。

    其解等于第n个Catalan数。

    6. 矩阵链乘

    P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?

    思路:(同“出栈次序”思想一致)

    1. 可以这样考虑,首先通过括号化,将P分成两个部分,然后分别对两个部分进行括号化。(递归分治思想)

    2. 比如分成(a1)×(a2×a3…×an),然后再对(a1)和(a2×a3…×an)分别括号化;又如分成(a1×a2)×(a3…×an),然后再对(a1×a2)和(a3…×an)括号化。

    3.设n个矩阵的括号化方案的种数为f(n),那么问题的解为
    f(n) = f(1)*f(n-1) + f(2)*f(n-2) + f(3)*f(n-3) + f(n-1)*f(1)。f(1)*f(n-1)表示分成(a1)×(a2×a3…×an)两部分,然后分别括号化。

    计算开始几项,f(1) = 1, f(2) = 1, f(3) = 2, f(4) = 5。结合递归式,不难发现f(n)等于h(n-1)。

    其解等于第n-1个Catalan数。

    7. 二叉树计数

    有n个节点构成的二叉树(非叶子节点都有2个儿子),共有多少种情形?
    有n+1个叶子的二叉树的个数?
    以上两种问题实际上是同一个问题。
    举例:n=3的情况:
    在这里插入图片描述
    思路:(递归分治思想)

    1. 可以这样考虑,根肯定会占用一个结点,那么剩余的n-1个结点可以有如下的分配方式,T(0,n−1),T(1,n−2),...,T(n−1,0)T(0, n-1),T(1, n-2),...,T(n-1, 0)T(0,n1),T(1,n2),...,T(n1,0)。设T(i,j)T(i, j)T(i,j)表示根的左子树含i个结点,右子树含j个结点。

    2.然后对于根结点情况为T(i,j)T(i, j)T(i,j)的左子树再有如下分配方式:T(0,i−1),T(1,i−2),...,T(i−1,0)T(0, i-1),T(1, i-2),...,T(i-1, 0)T(0,i1),T(1,i2),...,T(i1,0),其右子树分配方式:T(0,j−1),T(1,j−2),...,T(j−1,0)T(0, j-1),T(1, j-2),...,T(j-1, 0)T(0,j1),T(1,j2),...,T(j1,0)

    3.设问题的解为f(n),那么f(n) = f(0)*f(n-1) + f(1)*f(n-2) + …+ f(n-2)*f(1) + f(n-1)*f(0)。假设f(0) = 1,那么f(1) = 1, f(2) = 2, f(3) = 5。结合递推式,不难发现f(n)等于h(n)。

    其解等于第n个Catalan数。

    8. 凸多边形划分

    在一个n边形中,通过不相交于n边形内部的对角线,把n边形拆分为若干个三角形,问有多少种拆分方案?
    如五边形有如下5种拆分方案:
    在这里插入图片描述
    如六边形有如下14种拆分方案:
    在这里插入图片描述
    思路:(递归分治思想)
    1.以凸多边形的一边为基,设这条边的2个顶点为A和B。从剩余顶点中选1个,可以将凸多边形分成三个部分,中间是一个三角形,左右两边分别是两个凸多边形,然后求解左右两个凸多边形。

    2.设问题的解f(n),其中n表示顶点数,那么f(n)=f(2)*f(n-1)+f(3)*f(n-2)+……+f(n-2)*f(3)+f(n-1)*f(2)。
    其中,f(2)*f(n-1)表示:三个相邻的顶点构成一个三角形,另外两个部分的顶点数分别为2(一条直线两个点)和n-1。
    其中,f(3)*f(n-2)表示:将凸多边形分为三个部分,左右两边分别是一个有3个顶点的三角形和一个有n-2个顶点的多边形。

    3.设f(2) = 1,那么f(3) = 1, f(4) = 2, f(5) = 5。结合递推式,不难发现f(n) 等于h(n-2)。

    其解等于第n-2个Catalan数。

    9. 圆上n条线段

    在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?

    思路:(递归分治思想)

    1.以其中一个点为基点,编号为 ‘0’ ,然后按顺时针方向将其他点依次编号。

    2.那么与编号为 ‘0’ 相连的点的编号一定是奇数(否则,这两个编号间含有奇数个点,势必会有个点被孤立)。即把编号为 ‘0’ 的点与任意一个编号为奇数的点相连形成一条线段。

    3.设选中的 ‘0’ 点为基点A,与它连接的点为B,那么A和B将所有点分成两个部分,一部分位于A、B的左边,另一部分位于A、B的右边。然后分别对这两部分求解即可。

    4.设问题的解f(n),那么f(n) = f(0)*f(n-1) + f(1)*f(n-2) + f(2)*f(n-3) + …+f(n-2)*f(1) + f(n-1)*f(0)。
    其中,f(0)*f(n-1)表示编号0的点与编号1的点相连,此时位于它们右边的点的个数为0(可以连成0条线段),而位于它们左边的点为2n-2(可以连成n-1条线段)。依次类推。

    5.令f(0) = 1, f(1) = 1, f(2) = 2。

    6.结合递归式,不难发现f(n) 等于h(n)。

    其解等于第n个Catalan数。

    10. 单调路径

    一位大城市的律师在他住所以北n个街区和以东n个街区处工作,每天他走2n个街区去上班。如果他从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路?

    分析:

    1. 一个单调路径从格点左下角出发,在格点右上角结束,每一步均为向上或向右。X代表“向右”,Y代表“向上”。
    2. 可以发现任意步数的前缀中‘X’的个数不少于‘Y’的个数。
    3. 那么问题便转换成“01序列”问题的变体“XY序列”问题:给出一个n,要求一个长度为2n的XY序列,使得序列的任意前缀中X的个数不少于Y的个数, 有多少个不同的XY序列?

    举例:n=4的情况:
    在这里插入图片描述

    其解等于第n个Catalan数。

    11. 填充阶梯图形

    用n个长方形填充一个高度为n的阶梯状图形的方法个数?
    举例:n=4的情况
    在这里插入图片描述
    思路:(递归分治思想)
    1.把高度为n-1的阶梯状图形,塞进高度为n的阶梯状图形,把高度为n的阶梯状图形分为几个部分。

    1.设问题的解f(n),其中n表示高度为n的阶梯状图形或n个长方形。

    2.先来看n=1,易得f(1)=1;同理f(2)=2。其中f(1)不仅表示高度为1的阶梯状图,而且表示长或宽有一条为1且另一条不等于n的长方形。

    3.那n=3呢?其实,n=3即在n=2的阶梯图形上再添加一个高度为1宽度为3(或高度为3宽度为1)的长方形,而且只有两种添加方法,即要么在左边添加,要么在上边添加,这样才能构成一个高度为n=3的阶梯状图形。

    4.我们设f(0)=1。f(0)代表:一边为n,一边为1的长方形。

    5.那么f(3)=f(0)*f(2)+f(1)*f(1)+f(2)*f(0)=5。
    其中,f(0)*f(2)表示:高度为3的阶梯状图形含有这两个部分,一个部分是高度为2的阶梯状图形,另外一个部分是一边为3一边为1的长方形。
    其中,f(1)*f(1)表示:高度为3的阶梯状图形含有这两个部分,都是高度为1的阶梯状图形。

    6.那么f(4)=f(0)*f(3)+f(1)*f(2)+f(2)*f(1)+f(3)*f(0)=14。
    其中,f(0)*f(3)表示:高度为4的阶梯状图形含有这两个部分,一个部分是高度为3的阶梯状图形,另外一个部分是一边为4一边为1的长方形。
    其中,f(1)*f(2)表示:高度为4的阶梯状图形含有这两个部分,一个部分是高度为1的阶梯状图形或者长或宽有一条为1且另一条不等于n的长方形,另外一个部分是高度为2的阶梯状图形。

    7.结合递推式,不难发现f(n) 等于h(n)。

    其解等于第n个Catalan数。

    12. 摞碗问题

    饭后,姐姐洗碗,妹妹把姐姐洗过的碗一个一个放进碗橱摞成一摞。一共有n个不同的碗,洗前也是摞成一摞的,也许因为小妹贪玩而使碗拿进碗橱不及时,姐姐则把洗过的碗摞在旁边,问:小妹摞起的碗有多少种可能的方式?

    此典例解析是“出栈问题”的变式,其解析一模一样,即此数列的个数等于第n个Catalan数,此处就不再赘述。

    其解等于第n个Catalan数。

    13. 汽车胡同加油问题

    一个汽车队在狭窄的路面上行驶,不得超车,但可以进入一个死胡同去加油,然后再插队行驶,共有n辆汽车,问共有多少种不同的方式使得车队开出城去?

    此典例解析是“出栈问题”的变式,其解析一模一样,即此数列的个数等于第n个Catalan数,此处就不再赘述。

    其解等于第n个Catalan数。

    14. 还书借书问题

    在图书馆一共2n个人在排队,n个还《面试宝典》一书,n个在借《面试宝典》一书,图书馆此时没有了面试宝典了,求他们排队的总数?

    解析:
    还书的人总是要大于或等于借书的人,即C2nn−C2nn−1C_{2n}^n-C_{2n}^{n-1}C2nnC2nn1
    此典例解析是“找零问题”的变式,即此数列的个数等于第n个Catalan数。

    其解等于第n个Catalan数。

    15. 高矮排队问题

    2n个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?

    其解等于第n个Catalan数。

    附:参考博客

    https://blog.csdn.net/Hackbuteer1/article/details/7450250
    https://blog.csdn.net/doc_sgl/article/details/8880468
    https://blog.csdn.net/walk_dog/article/details/79318452
    https://blog.csdn.net/u012333003/article/details/23791979
    https://blog.csdn.net/hemeinvyiqiluoben/article/details/11320419
    https://blog.csdn.net/wu_tongtong/article/details/78161211

  • 相关阅读:
    虚拟机操作系统文件夹空间不足解决办法——对虚拟硬盘进行分区和格式化及 挂载到某个文件夹下
    设计模式(二十一)—职责链模式(行为型)
    VMware 中添加新的虚拟磁盘的方法
    设计模式(二十二)—中介者模式(行为型)
    level of detail algorithmrendering of massive realtime terrain
    金融领域实施项目特点总结
    第35周星期日总结
    第36周星期一小结
    第32周星期二总结
    第35周星期三小结
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626072.html
Copyright © 2011-2022 走看看