【算法竞赛】杨辉三角 | 杨辉三角与组合数的关系 | 杨辉三角的算法应用 | c++代码实现公式获取杨辉三角位置的值

  • Post author:
  • Post category:其他




杨辉三角详解



杨辉三角是什么?


杨慧三角是二项式系数在三角形中的一种集合排列!!

换一种说法: 杨辉三角是二项式系数, 通过数据三角形表示, 发现的数学规律.

在这里插入图片描述



杨辉三角与二项式系数联系


定义:

在数学里, 二项式系数, 或组合数, 是定义为形如



(

1

+

x

)

n

(1 + x)^n






(


1




+








x



)










n












展开后x的系数(其中n为自然数, k为整数)

那么一般二项式



(

x

+

y

)

n

(x + y)^n






(


x




+








y



)










n












的幂可用二项式系数记为



C

n

r

C^r_n







C










n








r




















通常来讲,二项式系数代表的是从n件物品中,无序地选取k件的方法总数.



证明二项式系数与组合数之间的联系:

假设n = 4, k = 2. 通过组合数公式可以得到组合数为 6.

假如我们把



(

1

+

x

)

4

(1 + x)^4






(


1




+








x



)










4












展开并标记每一个x, 就会得到:




(

1

+

x

1

)

(

1

+

x

2

)

(

1

+

x

3

)

(

1

+

x

4

)

(1+x_1)(1+x_2)(1+x_3)(1+x_4)






(


1




+









x










1


















)


(


1




+









x










2


















)


(


1




+









x










3


















)


(


1




+









x










4


















)






上式等于:




(

1

+

x

1

)

(

1

+

x

4

)

=

+

x

1

x

2

+

x

1

x

3

+

x

1

x

4

+

x

2

x

3

+

x

2

x

4

+

x

3

x

4

+

(1+x_1)⋯(1+x_4)=⋯+x_1x_2+x_1x_3+x_1x_4+x_2x_3+x_2x_4+x_3x_4+⋯






(


1




+









x










1


















)









(


1




+









x










4


















)




=













+









x










1



















x










2




















+









x










1



















x










3




















+









x










1



















x










4




















+









x










2



















x










3




















+









x










2



















x










4




















+









x










3



















x










4




















+













假如把标记去掉, 那么



x

2

x^2







x










2












的系数正好是等于6, 与



C

4

2

C_4^2







C










4








2





















相符合


也就证明了:



(

1

+

x

)

n

(1+x)^n






(


1




+








x



)










n
















x

k

x^k







x










k












的系数正好等于从n个元素中选取k个元素的组合数(



C

n

k

C^k_n







C










n








k























.

在这里插入图片描述



杨辉三角代码实现的递推公式




C

[

i

]

[

j

]

=

C

[

i

1

]

[

j

]

+

C

[

i

1

]

[

j

1

]

;

C[i][j]=C[i−1][j]+C[i−1][j−1];






C


[


i


]


[


j


]




=








C


[


i





1


]


[


j


]




+








C


[


i





1


]


[


j





1


]


;




1

1	1

1	2	1

1	3	3	1

1	4	6	4	1

递推:

#include<bits/stdc++.h>
using namespace std;
map<int, map<int, int> >mp;
int main()
{
    mp[0][0] = 1;
    //输入一个row, col表示待查找的行和列, 输出其对应杨辉三角的值
    int row, col; cin >> row >> col;
    for(int i = 1;i <= row; i++)
        for(int j = 1;j <= i; j++){
            mp[i][j]=mp[i - 1][j] + mp[i - 1][j - 1];
            if(i == row && j == col){ cout << mp[i][j]; return 0; }
        }
    return 0;
}

组合数公式:





C

n

m

=

A

n

m

m

!

=

n

!

m

!

(

n

m

)

!

C^m_n=\frac{A^m_n}{m!}=\frac{n!}{m!(n−m)!}







C










n








m




















=



















m


!















A










n








m






































=



















m


!


(


n





m


)


!














n


!























#include<bits/stdc++.h>
using namespace std;
//求阶乘
int fun1(int num){
    int ans = 1;
    for(int i = 1;i <= num; i++){
        ans *= i;
    }
    return ans;
}
// 求组合数
int fun2(int a, int b){
    return fun1(a) / (fun1(a) * fun1(a - b));
}
int main()
{
    int row, col;
    cin >> row >> col;
    cout << fun2(row - 1, col - 1);
}



版权声明:本文为MuShan_bit原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。