Introduction to The Design and Analysis of Algorithms - 第一章

第一章

1.1什么是算法

算法(algorithm)是一系列解决问题的明确指令,也就是说,对于符合一定规范的输入,能够在有限时间内获得要求的输出。要点:

  • 算法的每一个步骤都必须没有歧义

  • 必须认真确定算法所处理的输入的值域

  • 同一种算法可以用多种形式来描述

  • 同一问题,可能存在几种不同的算法

  • 针对同一问题的算法可能基于完全不同的解题思路,而且解题速度也会有显著不同

    计算两个整数的最大公约数

  1. 欧几里得算法(Euclid's algorithm)

    gcd(m,n) = gcd(n, m mod n)

    1. 如果n=0,返回m的值作为结果,同时过程结束;否则进入下一步

    2. m除以n,将余数赋给r

    3. 将n的值赋给m,将r的值赋给n,返回第一步

      int gcd(int m, int n) {
          if (n == 0)return m;
          int r = m % n;
          gcd(n, r);
      }
      
  2. 连续整数检测算法

    1:将min{m,n}的值赋给t

    2:m/t,如果余数为0,则进入第三步;否则进入第四步

    3:n/t,如果余数为0,则返回t的值作为结果;否则进入第四步

    4:把t的值减1。返回第二步。

    int gcd_1(int m, int n) {
        int t = m - n > 0 ? n : m;
        for (; t >= 1; t--) {
            if (m % t == 0 && n % t == 0)return t;
        }
        return 0;
    }
    
  3. 中学时计算方法 + 埃拉托色尼筛选法


    习题1.1

    设计一个计算求sqrt(n)(下取整)的算法,n是任意正整数。除了赋值和比较运算,该算法只能用到基本的四则运算操作。

    1. 完全平方数(square number)的差为奇数数列:image-20220327211812807

    2. delta(1) = 1;square(1) = 1;i = (delta + 1)/2

      int sqrt0(int n) {
          int delta = 1;
          for (int square = 1; square <= n; delta += 2) {
              square += delta;
          }
          return (delta - 1) / 2;
      }
      

1.2算法问题求解基础

  1. 上节提到的重要观点:

    可以认为算法是问题的程序化解决方案

  2. 算法设计分析过程中的一系列典型步骤:

  3. 理解问题

  4. 确定以下内容

    • 计算方法
    • 精确或近似方法
    • 算法设计技术
  5. 设计算法

  6. 正确性证明

  7. 分析算法

  8. 写代码

posted @ 2022-03-28 21:54  代码巨人  阅读(92)  评论(0)    收藏  举报