第1章 引论
前言
这一章,阐述本书的目的,并简要复习离散数学以及程序设计的一些概念:
- 看到程序在较大输入情况下的运行性能与在适量输入情况下的运行性能具有同等重要性
- 总结本书其余部分所需要的数学基础
- 简要复习递归
1.1 本书讨论的内容
在许多问题当中,一个重要的观念是:写出一个可以工作的程序并不够。如果这个程序在巨大的数据集上运行,那么运行时间就变成了重要的问题。我们将在本书中看到对于大量的输入如何估计程序的运行时间,尤其是如何在尚未具体编码的情况下比较两个程序的运行时间。我们还将看到彻底改进程序速度以及确定程序瓶颈的方法。这些方法将使我们能够找到需要大力优化的那些代码段。
1.2 数学知识复习
本节列出一些需要记住或是能够推导出的基本公式,复习基本的证明方法
1.2.1 指数
1.2.2 对数
在计算机科学中,除非有特别的声明,所有的对数都是以2为底的
定义:当且仅当,
由该定义得到几个方便的等式:
定理1.1
;
定理1.2
其他有用的公式
(对所有的
成立)
,
,
,
1.2.3 级数
几何级数
收敛级数
算数级数
;
数叫作调和数,其和叫作调和和。以下近似式中的误差趋向于
,这个值称为欧拉常数(Euler's constant)
代数运算
1.2.4 模运算
如果N整除A-B,那么我们就说A与B模N同余(congruent),记为A=B(mod N)。直观地看,这意味着无论A还是B除以N,所得余数都是相同的。于是,81=61=1(mod 10)。如同等号的情形一样,若A=B(mod N),则A+C=B+C(mod N)以及AD=BD(mod N)。
有许多定理适用于模运算,其中有一些特别要用到数论来证明。我们将谨慎地使用模运算,这样,前面的一些定理也就足够了。
1.2.5 证明方法
1.3 递归简论