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

10 篇文章 0 订阅
1 篇文章 0 订阅

杨辉三角详解

杨辉三角是什么?

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

换一种说法: 杨辉三角是二项式系数, 通过数据三角形表示, 发现的数学规律.
在这里插入图片描述

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

定义: 在数学里, 二项式系数, 或组合数, 是定义为形如 ( 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 Cnr

通常来讲,二项式系数代表的是从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+x1)(1+x2)(1+x3)(1+x4)
上式等于:
( 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+x1)(1+x4)=+x1x2+x1x3+x1x4+x2x3+x2x4+x3x4+

假如把标记去掉, 那么 x 2 x^2 x2的系数正好是等于6, 与 C 4 2 C_4^2 C42相符合

也就证明了: ( 1 + x ) n (1+x)^n (1+x)n x k x^k xk的系数正好等于从n个元素中选取k个元素的组合数( C n k C^k_n Cnk.

在这里插入图片描述

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

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[i1][j]+C[i1][j1];

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)!} Cnm=m!Anm=m!(nm)!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);
}
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MuShan-bit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值