zoukankan      html  css  js  c++  java
  • 二项式定理与杨辉三角

    问题:求(a+b)^n中各项的系数。

    方法一:利用杨辉三角

    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    1 5 10 10 5 1
    1 6 15 20 15 6 1

    (a+b)^1=a+b

    (a+b)^2=a^2+2ab+b^2

    (a+b)^3=a^3+3b*a^2+3a*b^2+b^3

    ...........

    两者对比可以发现,所求的系数即为杨辉三角,于是可以利用杨辉三角的性质对问题进行求解。

     1 void solve(int n)
     2 {
     3     int i,p,j;
     4     for(i=1;i<=n;i++)
     5     {
     6         for(j=1;j<=i;j++)
     7         {
     8             con[i][j]=con[i-1][j]+con[i-1][j-1];
     9         }
    10     }
    11 }

    但是该解法时间复杂度为n^2,只需要求第n行的系数,但实际却把前n行的系数都求出来了,因此我们考虑第二种解法,数学推导。

    方法二:数学推导

    已知 

    这个不难理解:(a+b)n是n个括号连乘,每个括号里任选一项乘起来都会对最后的结果又一个贡献。如果选了k个a,就一定会选n-k个b,最后的项自然是an-kbk。而n个a中选k个(同时也相当于n个b里选n-k个)有Ckn,这就是组合数的定义。

    可以得时间复杂度为O(n).

    1 void solve(int n)
    2 {
    3     int i,p,j;
    4     con[1]=1;
    5     for(i=1;i<=n;i++)
    6         con[i]=con[i-1]*(n-i+1)/i;
    7 }
  • 相关阅读:
    Arraylist和Linkedlist的区别
    list和map的区别
    collection和collections区别
    Linux操作命令(六)
    Linux操作命令(五)
    Linux操作命令(四)
    Linux操作命令(三)
    Linux操作命令(二)
    Linux操作命令(一)
    ProgrammingProjectList-文本操作
  • 原文地址:https://www.cnblogs.com/daybreaking/p/9511691.html
Copyright © 2011-2022 走看看