概述
- 计算 = 信息处理
借助某种工具,遵照一定规则,以明确而机械的形式进行。 - 计算模型 = 计算机 = 信息处理工具
- 算法,即特定计算模型下,旨在解决待定问题的指令序列
- 输入:待处理的信息(问题)
- 输出:经处理的信息(答案)
- 正确性:可以解决指定的问题
- 确定性:任一算法都可以描述为一个由基本操作组成的序列
- 可行性:每一基本操作都可实现,且在常数时间内完成
- 有穷性:对于任何输入,经有穷次操作,都可以得到输出
算法:有穷性
- 序列 H a i l s t o n e ( n ) = { { 1 } n ≤ 1 { n } ⋃ H a i l s t o n e ( n / 2 ) n 偶 { n } ⋃ H a i l s t o n e ( 3 n + 1 ) n 奇 Hailstone(n) = \begin{cases} \qquad \qquad\{1\} & &n \leq 1 \\ \{n\} \bigcup Hailstone(n/2) & & n偶 \\ \{n\} \bigcup Hailstone(3n + 1) & & n奇 \end{cases} Hailstone(n)=⎩⎪⎨⎪⎧{1}{n}⋃Hailstone(n/2){n}⋃Hailstone(3n+1)n≤1n偶n奇
-
H
a
i
l
s
t
o
n
e
(
42
)
=
{
42
,
21
,
64
,
32
,
.
.
.
,
1
}
Hailstone(42) = \{ \quad 42, \quad 21, \quad 64, \quad 32, \quad..., \quad1 \quad \}
Hailstone(42)={42,21,64,32,...,1}
int hailstone(int n) { // 计算序列Hailstone(n)的长度 int length = 1; // 从1开始,以下按定义逐步递推,并累计步数,直至n = 1 while (1 < n) { (n % 2) ? n = 3 * n + 1 : n /= 2; length++; } return length; // 返回 |Hailstone(n)| }
-
H
a
i
l
s
t
o
n
e
(
7
)
=
{
7
,
22
,
11
,
34
,
17
,
52
,
26
,
13
,
40
,
20
,
10
,
5
,
16
,
.
.
.
,
1
}
Hailstone(7) = \{ \quad 7, \quad 22, \quad 11, \quad 34, \quad 17, \quad 52, \quad 26, \quad 13, \quad 40, \quad 20, \quad 10, \quad 5, \quad 16, \quad ..., \quad 1 \quad\}
Hailstone(7)={7,22,11,34,17,52,26,13,40,20,10,5,16,...,1}
H a i l s t o n e ( 27 ) = { 27 , 82 , 41 , 124 , 62 , 31 , 94 , 47 , 142 , 71 , 214 , 107 , . . . } Hailstone(27) = \{ \quad 27, \quad 82, \quad 41, \quad 124, \quad 62, \quad 31, \quad 94, \quad 47, \quad 142, \quad 71, \quad 214, \quad 107, \quad ... \quad \} Hailstone(27)={27,82,41,124,62,31,94,47,142,71,214,107,...} - 对于任一的 n n n,总有 ∣ H a i l s t o n e ( n ) ∣ < ∞ |Hailstone(n)| < \infty ∣Hailstone(n)∣<∞?
程序未必是算法
- 好算法:
- 正确:符合语法,能够编译、链接
- 能够正确处理简单的输入
- 能够正确处理大规模的输入
- 能够正确处理一般性的输入
- 能够正确处理退化的输入
- 能够正确处理任意合法的输入
- 健壮:能辨别不合法的输入并做适当处理,而不致非正常退出
- 可读:结构化 + 准确命名 + 注释 + …
- 效率:速度尽可能快;存储空间尽可能少
- 正确:符合语法,能够编译、链接