杨辉三角详解
杨辉三角是什么?
杨慧三角是二项式系数在三角形中的一种集合排列!!
换一种说法: 杨辉三角是二项式系数, 通过数据三角形表示, 发现的数学规律.
杨辉三角与二项式系数联系
定义: 在数学里, 二项式系数, 或组合数, 是定义为形如(1+x)n(1 + x)^n(1+x)n展开后x的系数(其中n为自然数, k为整数)
那么一般二项式(x+y)n(x + y)^n(x+y)n 的幂可用二项式系数记为CnrC^r_nCnr
通常来讲,二项式系数代表的是从n件物品中,无序地选取k件的方法总数.
证明二项式系数与组合数之间的联系:
假设n = 4, k = 2. 通过组合数公式可以得到组合数为 6.
假如我们把(1+x)4(1 + x)^4(1+x)4 展开并标记每一个x, 就会得到:
(1+x1)(1+x2)(1+x3)(1+x4)(1+x_1)(1+x_2)(1+x_3)(1+x_4)(1+x1)(1+x2)(1+x3)(1+x4)
上式等于:
(1+x1)⋯(1+x4)=⋯+x1x2+x1x3+x1x4+x2x3+x2x4+x3x4+⋯(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+x1)⋯(1+x4)=⋯+x1x2+x1x3+x1x4+x2x3+x2x4+x3x4+⋯
假如把标记去掉, 那么x2x^2x2的系数正好是等于6, 与C42C_4^2C42相符合
也就证明了:(1+x)n(1+x)^n(1+x)n中xkx^kxk的系数正好等于从n个元素中选取k个元素的组合数(CnkC^k_nCnk).
杨辉三角代码实现的递推公式
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;
}
组合数公式:
Cnm=Anmm!=n!m!(n−m)!C^m_n=\frac{A^m_n}{m!}=\frac{n!}{m!(n−m)!}Cnm=m!Anm=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);
}