创新实训个人记录:P versus NP
computation&&computable&& computational efficiency
computation: 计算。以有限的步骤,从一组输入得到一个输出的过程;可以在各种物理和数学系统中进行,例如图灵机,λ演算,元胞自动机;所有这些形式的计算都是等效的,即每个模型都能够实现我们可以在任何其他模型上构想的所有计算
computable: 可计算的。不可计算的:对于某些输入,没有进入无限循环(即,永不停止)没有电脑能解决这些问题。
quantify computational efficiency: 量化计算效率。
举一个例子:两数乘法。第一种是重复添加,计算a·b,只需要把a加上它自己b-1次。另一种方法是下图所示的grade-school 算法。
我们通过学习,当我们增加输入的大小时,基本操作规模的数量是怎么样的,来量化一个算法的效率。我们设置,基本操作为一位的加法和乘法。(在其他设置中,我们也可以把除法设置为基本操作。)
输入的大小是数字中占位的数量。用于两个n位数乘法的基本操作的数量(即在 1 0 n − 1 10^n−1 10n−1 和 1 0 n 10^n 10n之间的数字),用grade-school算法最多需要 2 n 2 2n^2 2n2次( n 2 n^2 n2次乘法, n 2 n^2 n2次加法),用“重复加”算法至少需要 n 1 0 n − 1 n10^{n−1} n10n−1次(a需要重复加自己b-1次,b是n位数,那么b是在 1 0 n − 1 10^{n−1} 10n−1 和 1 0 n 10^n 10n之间的数字;通常,b-1≥ 1 0 n − 1 10^{n−1} 10n−1;又因为a是n位数,所以至少需要重复加 n 1 0 n − 1 n10^{n−1} n10n−1次)。
可以看出, 2 n 2 2n^2 2n2和 n 1 0 n − 1 n10^{n−1} n10n−1根本不是一个量级的,效率高低也很明显。这就是计算效率,它很重要,这本书也主要是围绕计算效率来讨论。
一些符号
- 如果 S S S是一个有限集合,那么在 S S S上的字符串是一个 S S