• 算法学习 三 >> 认识算法的效率(循环设计)


    引子:

    例1:求1+2+....+n.


    1. 循环(模拟计算过程):时间复杂度O(n)
      int s = 0;
      for
      (int i = 1; i <= n; i++) s = s + i;
    2. 数学模型(高斯求和):时间复杂度为O(1)
      S = n(n+1)/2

    例2:求1-2+3-4.....+(-1)^(n-1)n.


    1. 数学模型:Sn = Sn-1 + (-1)^(n-1)n
      int s = 0;
      for(int i = 1; i <= n; i++)
      {
          sign = -1 * sign;
          s = s + sign * i;        
          
      }  

      时间复杂度:O(n)

     例3:求1-3+5-7......(-1)n-1(2n-1).


    1. 数学模型:Sn = Sn-1 + (-1)n-1(2n-1)
      int s = 0;
      for(int i = 1; i <= n; i++)
      {
          sign = -1 * sign;
          s = s + sign * (2*i-1);        
      }  

       时间复杂度:O(n)

    例4:1!-3!+5!-7!.....(-1)(n-1)(2n-1)!


    1. 数学模型:Sn = Sn-1 + (-1)n-1(2n - 1)!      或       Sn = Sn-1 + (-1)n-1|Sn-1|x(2n-2)x(2n-1)
    2. 描述:
      int s = 0;
      for(1到2n-1)
      {
          求2n-1阶乘;
          判断是正还是负后赋值给t;
          s = s + t; 
      }
    3. 实现一:效率低
      int s = 0, signal = -1;
      for(int i = 1; i <= n; i++)
      {
          int t = 1;
          for(int j = 2; j <= 2*n - 1; j++)
              t = t * j;                //求阶乘
          signal = - signal;            //正负交替
          s = s + signal*t;             //求和
      }

       时间复杂度:O(n2)

    4. 实现二:Sn = Sn-1 + (-1)n-1|Sn-1|x(2n-2)x(2n-1)  效率较高
      int s = 0, signal = -1, t = 1;
      for(int i = 1; i <= n; i++)
      {
          if(i > 1)
              t = t*(2*n-2)*(2*n-1);     //求2n-1的阶乘
          signal = - signal;            //正负交替
          s = s + signal*t;             //求和
      }

       时间复杂度:O(n)

    例5:小试牛刀>>>求>>>  Sn = 1 / 1! - 1 / 4! + 1 / 7!..... 1[ (-1)(n-1)(3n-2)! ]的n项和Sn。


    1. input描述:输入站一行,仅输入一个正整数n,可输入多组数据。
    2. output描述:输出n对应的Sn的值(每组数据的输出占一行)。
    3. 五组测试数据:(试着做一做在看答案O)

     

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>参考答案

  • 相关阅读:
    动态规划之背包问题
    Python中import导入上一级目录模块及循环import问题的解决
    Anaconda介绍、安装及使用教程
    负载均衡基础知识
    TCP和UDP的区别(转)
    microsoft visual c++ 14.0 is required问题解决办法
    python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool
    解决Anaconda无法更新的问题
    彻底的理解TCP协议的三次握手和四次分手
    android调试工具 adb命令学习
  • 原文地址:https://www.cnblogs.com/sunrisepeak/p/9716344.html
Copyright © 2020-2023  润新知