Introduction to The Design and Analysis of Algorithms - 第一章
第一章
1.1什么是算法
算法(algorithm)是一系列解决问题的明确指令,也就是说,对于符合一定规范的输入,能够在有限时间内获得要求的输出。要点:
-
算法的每一个步骤都必须没有歧义
-
必须认真确定算法所处理的输入的值域
-
同一种算法可以用多种形式来描述
-
同一问题,可能存在几种不同的算法
-
针对同一问题的算法可能基于完全不同的解题思路,而且解题速度也会有显著不同
计算两个整数的最大公约数
-
欧几里得算法(Euclid's algorithm)
gcd(m,n) = gcd(n, m mod n)
-
如果n=0,返回m的值作为结果,同时过程结束;否则进入下一步
-
m除以n,将余数赋给r
-
将n的值赋给m,将r的值赋给n,返回第一步
int gcd(int m, int n) { if (n == 0)return m; int r = m % n; gcd(n, r); }
-
-
连续整数检测算法
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; } -
中学时计算方法 + 埃拉托色尼筛选法
习题1.1
设计一个计算求sqrt(n)(下取整)的算法,n是任意正整数。除了赋值和比较运算,该算法只能用到基本的四则运算操作。
-
完全平方数(square number)的差为奇数数列:
-
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算法问题求解基础
-
上节提到的重要观点:
可以认为算法是问题的程序化解决方案
-
算法设计分析过程中的一系列典型步骤:

-
理解问题
-
确定以下内容
- 计算方法
- 精确或近似方法
- 算法设计技术
-
设计算法
-
正确性证明
-
分析算法
-
写代码

浙公网安备 33010602011771号