第一章 基础
内容总览:
- 算法和数据结构所使用的基本工具
- 基础编程模型
- 模块化编程(数据抽象)(ADT)
- 三种抽象数据类型(背包,栈,队列)
- 算法性能分析方法
- 连通性问题实战
引子:
欧几里得算法
用于求解两个整数的最大公约数
算法描述:
计算2个非负整数p和q 的最大公约数:若q是0,则最大公约数是p。否则,将p除以q得到余数r,p和q的最大公约数即为q和r的最大公约数。
java代码实现,此处使用两种方法实现,分别是递归实现和迭代实现,并且利用对数器来验证了两种方法的正确性
//递归写法
public static int gcd(int p, int q) {
if (q == 0) return p;
int r = p % q;
return gcd(q, r);
}
//迭代写法
public static int gcd2(int p, int q) {
while (q != 0) {
int r = p % q;
p = q;
q = r;
}
return p;
}
对数器验证:
Random r = new Random();
for (int i = 0; i < 10000; i++) {
int p = r.nextInt(10000);
int q = r.nextInt(10000);
if (gcd(p, q) != gcd2(p,<