2.1定义,记号和基本结论
记号
用N表示自然数集,用R表示实数集,R≥0表示非负实数集。
如果X是一个有限集,则|X|表示X中的元素数目
多项式
一个n次多项式是如下形式的一个函数:
其中Cn≠0,Ci称为系数
区间
若a和b是数,则称[a,b]为闭区间,定义为集合
{x|a≤x≤b}
若局限于整数,则a和b是整数,且认为[a,b]是集合
{x|x是整数,a≤x≤b}
若局限于整数,则[2,6]={2,3,4,5,6}
序列和串
有限序列a是一个从集合{0,1,...,n}到集合X的函数。序列通常记为或a[0],a[1],...a[n],或a[0..n] 中的i称为序列的下标。集合{0,1,...,n}经常被方便地替换成一些其他相邻整数的有限集合。例如,若b是一个集合{1,2,...,n}映照成集合X的函数,则可以将这个序列记为,或b[1],b[2],...,b[n],或b[1..n]
无限序列 a是一个将集合{0,1,...}映照到集合X的函数。该序列常记为,...,或a[0],a[1],..,或
术语序列即指有限序列,也指无限序列
增序:对所有i,
降序:对所有i,
非降序:非增序,多了个=罢了
非降序≠增序,增序一定是非降序的
子序列:一个只保留其中一部分项的序列,就是原来序列的子序列,而这些保留的项保留原来的次序
X上的一个串或一个字是一个有限序列t[1],t[2],...,t[n],其中每个t[i]∈X.
串写为t[1]t[2]...t[n],串t的长度为n
空串或空字是一个没有元素的串,其长度为零
类似,有子串
若i<j,t[i...j]是t[1]t[2]...t[n]的子串,若i=j,则t[i..j]=t[i..i]是子串t[i].若i>j,根据定义,t[i..j]是空串
逻辑
布尔代数中,not最高,其次为and和or
合取范式:
一个文字是一个变量或一个变量的非。一个布尔表达式如果有形式
其中每个Ci有形式
而每个Pj都是一个文字,则这个布尔表达式是合取范式,Ci称为子句
注意真命题,假命题,四种条件
二项式系数
二项式系数n≥k≥0,计算一个n个元素集合的k个元素子集的个数。其值为
定理
对数
x的以b为底的对数记为,以2为底的对数记为lgx
对数法则:
不等式
定理1.令a和b是数,0≤a<b,则
定理2.序列{(1+1/n)^n}是递增的,且上界为4,下确界2
定理3.
上界,下界,上确界lubx,下确界supx
2.2数学归纳法
(基本步)证明S(1)为真
(归纳步)设S(n)为真,证明对所有n≥1,S(n+1)为真
改进
(改写的基本步)证明S(n0)为真
(改写的归纳步)假设S(n)为真,证明对所有n≥n0,S(n+1)为真、
几何和:
定理:对于所有n≥1和0<r<1,有
循环不变量:
程序变量的一个语句,它是一个循环刚开始执行前,以及在循环每次重复后为真。
理想的说,这个语句告诉我们,循环产生了预期的结果,也就是说循环正确。列如一个while循环
例题1:利用一个循环不变量计算
exp(a,n){
i=1
pow=1
while(i<=n){
pow=pow*a
i=i+1
}
return pow
}
例题2:利用循环不变量来证明n!
factorial(n){
i=1
fact=1
while(i<n){
i=i+1
fact=fact*i
}
return fact
}
例题3:利用一个循环不变量以证明下面把存放在数组b中的二进制正整数转换为十进制的算法。
l例如,二进制整数10011,既是十进制19,存放为b[1]=b[2]=1,b[3]=b[4]=0,b[5]=1
to_decimal(b){
i=0
n=0
while(i<b.last){
n=n*2+b[b.last-i]
i=i+1
}
return n
}
例题4:利用一个循环不变量以证明下面把正整数n转换为二进制的算法。二进制表示存放于数组b
上题已写明了二进制数组怎样存放在数组b中
to_binary(n,b){
i=0
while(n>0){
i=i+1
b[i]=n mod 2
n=n/2
}
}
2.3算法分析
算法分析是指执行一个算法所需的时间和空间推导估计过程
执行一个算法所需的时间是输入的一个函数。如果输入是一个大小为n的数组,那么我们就可以说这个输入的规模为n.有时,输入的规模要用两个甚至多个参数来描述
f(n)的阶至多为g(n),表示为f(n)=O(g(n))
f(n)的阶至少为g(n),表示为f(n)=Ω(g(n))
f(n)的阶等于g(n)的阶,表示为f(n)=