You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MQL4求解6次二项式系数三类代码的Big O时间复杂度分析

幂次为6的二项式展开系数求解代码时间复杂度分析

以下三段代码用于求解幂次为6的二项式展开式初始系数。根据二项式定理,$(x + y)^6 = x^6 + 6x^5y + 15x4y2 + 20x3y3 + 15x2y4 + 6xy^5 + y^6$,程序固定输入6时可输出系数序列1、6、15、20、15、6、1。以下分别给出三种实现方式的代码,以及输入固定为6时对应的Big O时间复杂度。


第一种方法:帕斯卡三角法

实现代码如下:

void OnInit()
  {
   int P0, P1, P2, P3, P4, P5, P6, P7, P8,P9, P10, P11, P12, P13, P14;
   int I1, I2, I3, I4, I5, I6, I7, I8,I9, I10, I11, I12, I13;
   for (int row = 0; row <= 6; row++)
     {
      for (int col = 1; col <= 13; col++)
        {
         if (row == 0)
           {
            I7 = 1;
           }
         else 
           {
            I1 = P0 + P2;
            I2 = P1 + P3;
            I3 = P2 + P4;
            I4 = P3 + P5;
            I5 = P4 + P6;
            I6 = P5 + P7;
            I7 = P6 + P8;
            I8 = P7 + P9;
            I9 = P8 + P10;
            I10 = P9 + P11;
            I11 = P10 + P12;
            I12 = P11 + P13;
            I13 = P12 + P14;
           } 
        }
      P1 = I1; P2 = I2; P3 = I3; P4 = I4; P5 = I5; P6 = I6; P7 = I7; P8 = I8; P9 = I9; P10 = I10; P11 = I11; P12 = I12; P13 = I13;
     }
   if(I1 != 0) Print(I1);
   if(I2 != 0) Print(I2);
   if(I3 != 0) Print(I3);
   if(I4 != 0) Print(I4);
   if(I5 != 0) Print(I5);
   if(I6 != 0) Print(I6);
   if(I7 != 0) Print(I7);
   if(I8 != 0) Print(I8);
   if(I9 != 0) Print(I9);
   if(I10 != 0) Print(I10);
   if(I11 != 0) Print(I11);
   if(I12 != 0) Print(I12);
   if(I13 != 0) Print(I13);
  }

时间复杂度分析

代码中两层循环的边界均为写死的固定常量:外层循环固定执行7次,内层循环固定执行13次,循环内的赋值运算、循环外的条件判断与打印操作的执行次数也全部为固定值,不存在随输入规模变化的可变执行逻辑,因此时间复杂度为 O(1)。


第二种方法:阶乘公式法

实现代码如下:

void OnInit()
  {
   int I1, I2, I3, I4, I5, I6, I7;
   I1 = (6 * 5 * 4 * 3 * 2 * 1) / ((1) * (6 * 5 * 4 * 3 * 2 * 1));
   I2 = (6 * 5 * 4 * 3 * 2 * 1) / ((1) * (5 * 4 * 3 * 2 * 1));
   I3 = (6 * 5 * 4 * 3 * 2 * 1) / ((2 * 1) * (4 * 3 * 2 * 1));
   I4 = (6 * 5 * 4 * 3 * 2 * 1) / ((3 * 2 * 1) * (3 * 2 * 1));
   I5 = (6 * 5 * 4 * 3 * 2 * 1) / ((4 * 3 * 2 * 1) * (2 * 1));
   I6 = (6 * 5 * 4 * 3 * 2 * 1) / ((5 * 4 * 3 * 2 * 1) * (1));
   I7 = (6 * 5 * 4 * 3 * 2 * 1) / ((6 * 5 * 4 * 3 * 2 * 1) * (1));
   Print(I1);
   Print(I2);
   Print(I3);
   Print(I4);
   Print(I5);
   Print(I6);
   Print(I7);
  }

时间复杂度分析

代码没有任何循环或递归逻辑,所有组合数计算全部是硬编码的常量乘除运算,7个系数的赋值、后续7次打印操作的总执行次数完全固定,和输入规模无关,因此时间复杂度为 O(1)。


第三种方法:表格递推法

实现代码如下:

void OnInit()
  {
   int I1, I2, I3, I4, I5, I6, I7;
   I1 = 1;
   I2 = (6 * I1) / 1;
   I3 = (5 * I2) / 2;
   I4 = (4 * I3) / 3;
   I5 = (3 * I4) / 4;
   I6 = (2 * I5) / 5;
   I7 = (1 * I6) / 6;
   Print(I1);
   Print(I2);
   Print(I3);
   Print(I4);
   Print(I5);
   Print(I6);
   Print(I7);
  }

时间复杂度分析

代码利用二项式系数的递推关系,从第一个初始系数开始逐次计算后续6个系数,总共仅执行7次赋值运算、7次打印操作,总执行步骤为固定常量,没有随输入规模增长的执行逻辑,因此时间复杂度为 O(1)。


内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:39:15