算法学习与笔记(二)算法涉及的基本数学概念

2.1定义,记号和基本结论

记号

用N表示自然数集,用R表示实数集,R≥0表示非负实数集。

如果X是一个有限集,则|X|表示X中的元素数目

多项式

一个n次多项式是如下形式的一个函数:

p(x)=C{n}x^{n}+C{n-1}x^{n-1}+...+C{1}x+C{0}

其中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],a[1],...a[n],或a[0..n]  a{i}  中的i称为序列的下标。集合{0,1,...,n}经常被方便地替换成一些其他相邻整数的有限集合。例如,若b是一个集合{1,2,...,n}映照成集合X的函数,则可以将这个序列记为b{1},b{2},...,b{n},或b[1],b[2],...,b[n],或b[1..n]

无限序列 a是一个将集合{0,1,...}映照到集合X的函数。该序列常记为a{0},a{1},...,或a[0],a[1],..,或\left \{ a_{i} \right \} _{i=0}^{\infty}

术语序列即指有限序列,也指无限序列

增序:对所有i,a_{i}<a_{i+1}

降序:对所有i,a_{i}>a_{i+1}

非降序:非增序,多了个=罢了

非降序≠增序,增序一定是非降序的

子序列:一个只保留其中一部分项的序列,就是原来序列的子序列,而这些保留的项保留原来的次序

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

合取范式:

一个文字是一个变量或一个变量的非。一个布尔表达式如果有形式  c_{1}\wedge c_{2}\wedge...\wedge c_{n}

其中每个Ci有形式p_{1}\wedge p_{2}\wedge...\wedge p_{n}

而每个Pj都是一个文字,则这个布尔表达式是合取范式,Ci称为子句

注意真命题,假命题,四种条件

二项式系数

二项式系数n≥k≥0,计算一个n个元素集合的k个元素子集的个数。其值为

                             \begin{pmatrix} n\\K\end{pmatrix}=\frac{n!}{(n-k)!k!}

定理

\begin{pmatrix} n\\K\end{pmatrix}^{k}\le \begin{pmatrix} n\\K\end{pmatrix}\le \frac{n^{k}}{k!}

对数

x的以b为底的对数记为\log_{b}{a},以2为底的对数记为lgx

对数法则:

不等式

定理1.令a和b是数,0≤a<b,则

                                        \frac{b^{n+1}-a^{n+1}}{b-a}<(n+1)b^{n}

定理2.序列{(1+1/n)^n}是递增的,且上界为4,下确界2

定理3.\frac{1}{n}\le \lg_{n+1} -\lg_{n} \le \frac{2}{n}

上界,下界,上确界lubx,下确界supx

2.2数学归纳法

(基本步)证明S(1)为真

(归纳步)设S(n)为真,证明对所有n≥1,S(n+1)为真

改进

(改写的基本步)证明S(n0)为真

(改写的归纳步)假设S(n)为真,证明对所有n≥n0,S(n+1)为真、

几何和:\sum_{i=0}^{n}ar^{i}=\frac{a(r^{n+1}-1)}{r-1}

定理:对于所有n≥1和0<r<1,有

                                \sum_{i=1}^{n}ir^{i}=\frac{r}{(1-r)^{2}}

循环不变量:

程序变量的一个语句,它是一个循环刚开始执行前,以及在循环每次重复后为真

理想的说,这个语句告诉我们,循环产生了预期的结果,也就是说循环正确。列如一个while循环

例题1:利用一个循环不变量计算a^{n}

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)=\Theta(g(n))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值