算法基础1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二章导引

算法的五个重要特性

①确定性,每一种运算必须要有确切的定义,无二义性②能行性,运算都是基本运算,原理上能在有限时间内完成③输入:有0个或多个输入④输出:一个或多个输出⑤有穷性:在执行了有穷步运算后终止

算法学习的五个内容

①如何设计算法,运用一些基本设计策略规划算法②如何表示算法,用恰当的方式表示算法③如何确认算法,算法正确性的证明(算法确认algorithm validation)④如何分析算法,通过时间和空间复杂度的分析,确定算法的优劣⑤如何测试程序,测试程序是否会产生错误的结果

算法分析是对一个算法需要多少计算时间和存储空间作定量的分析

多项式时间算法

O(1)

指数时间算法:O(2n)

性质:①传递性:全都具有②反身性:Θ,O,Ω具有③对称性:仅f(n)= Θ(g(n)) ⇔g(n)= Θ(f(n))④互对称性:f(n)= O(g(n)) ⇔ g(n)= Ω (f(n)) ;f(n)= o(g(n)) ⇔ g(n)= ω (f(n)) ;

算术运算:

O(f(n))+O(g(n)) = O(max{f(n),g(n)}) ;

O(f(n))+O(g(n)) = O(f(n)+g(n)) ;

O(f(n))*O(g(n)) = O(f(n)*g(n)) ;

O(cf(n)) = O(f(n)) ;

g(n)= O(f(n)) ⇒O(f(n))+O(g(n)) = O(f(n)) 。

ΘΩ也有类似性质,证明方法类似规则O(f(n))+O(g(n)) = O(max{f(n),g(n)}) 的证明:

对于任意f1(n) = O(f(n)) ,存在正常数c1和自然数n1,使得对所有

n≥n1,有f1(n) ≤c1f(n) 。

类似地,对于任意g1(n) = O(g(n)) ,存在正常数c2和自然数n2,

使得对所有n≥n2,有g1(n) ≤c2g(n) 。令c3=max{c1, c2},n3=max{n1, n2},h(n)= max{f(n),g(n)} 。

则对所有的n ≥n3,有

f1(n) +g1(n) ≤c1f(n) + c2g(n)

≤c3f(n) + c3g(n)= c3(f(n) + g(n))

≤ 2c3 max{f(n),g(n)}

= 2c3h(n) = O(max{f(n),g(n)}) .

规则O(f(n))+O(g(n)) = O(f(n)+g(n)) 的证明:

对于任意f1(n) = O(f(n)) ,存在正常数c1和自然数n1,使得对所有

n≥n1,有f1(n) ≤c1f(n) 。

类似地,对于任意g1(n) = O(g(n)) ,存在正常数c2和自然数n2,

使得对所有n≥n2,有g1(n) ≤c2g(n) 。令c3=max{c1, c2},n3=max{n1, n2},h(n)= f(n)+g(n) 。

则对所有的n ≥n3,有

O(f(n))+O(g(n)) =

f1(n) +g1(n) ≤c1f(n) + c2g(n)

≤c3f(n) + c3g(n)= c3(f(n) + g(n))

=c3h(n) = O(f(n)+g(n)) .

规则O(f(n))*O(g(n)) = O(f(n)*g(n)) 的证明:

对于任意f1(n) = O(f(n)) ,存在正常数c1>1和自然数n1,使得对所有

n≥n1,有f1(n) ≤c1f(n) 。

类似地,对于任意g1(n) = O(g(n)) ,存在正常数c2>1和自然数n2,

使得对所有n≥n2,有g1(n) ≤c2g(n) 。令c3=c1*c2,n3=max{n1, n2},h(n)= f(n)*g(n) 。

则对所有的n ≥n3,有

O(f(n))*O(g(n)) =

f1(n) *g1(n) ≤c1f(n) * c2g(n)

= c3f(n)*g(n) =c3h(n) = O(f(n)*g(n)) .

取整函数性质

⑴x-1 < ⎣ x ⎦≤x ≤⎡ x ⎤ < x+1;⑵⎣ n/2 ⎦+ ⎡ n/2 ⎤ = n;⑶对于n ≥ 0,a,b>0,有:①⎡⎡ n/a ⎤ /b ⎤ = ⎡ n/ab ⎤②⎣⎣n/a ⎦/b ⎦= ⎣n/ab ⎦③⎡a/b ⎤≤ (a+(b-1))/b ④⎣a/b ⎦≥(a-(b-1))/b ⑤f(x)= ⎣x ⎦,

g(x)= ⎡ x ⎤为单调递增函数

≥ 1+x;

|x| ≤1 ⇒ 1+x ≤ e x≤ 1+x+x2 ;

e x = 1+x+ Θ(x2), as x→0;

********************************

第四章

分治法的思想: 将一个输入规模为n

的问题分解为k个规模较小的子问题,

这些子问题互相独立且与原问题相同,

然后递归的求解这些子问题,最后用

适当的方法将各子问题的解合并成原

问题的解。

分治法问题特征:

①问题规模小到一定的程度就非常容

易解决(所有问题的共性特征)

②问题可分解为若干个规模较小的同

类问题(递归策略[分])

③子问题的解可以合并为该问题的解

(若不具备,可用贪心或动态规划)

④子问题是相互独立的(保证采用分

治法效率高,否则更适合采用动态规

划)

二分检索所需空间: 用n个位置存放

数组A,还有low, high, mid, x, j五个变

量需要存储,共需空间n+5。

二分检索算法正确性证明:如果n=0,

则不进入循环,j=0,算法终止;否则

就会进入循环与数组A中的元素进行

比较;如果x=A[mid],则j=mid,检索

成功,算法终止;否则,若x

则缩小到A(low)和A(mid-1)之间检索;

若x>A(mid),则缩小到A(mid+1)和A(n)

之间检索;按上述方式缩小检索区总

可以在有限步内使low>high;如果出

现这种情况,说明x不在A中,j=0,

算法终止;

成功检索平均比较数:S(n) = I/n+1;不

成功检索平均比较数U(n) = E/(n+1)推

导得:S(n)=(1+1/n)U (n)-1;S(n)=Θ(logn)

二分检索时间复杂度

定理4.2: 若n在区域[2k-1, 2k)中,则对

于一次成功的检索,二分检索算法至

多作k次比较,而对于一次不成功的

检索,或者作k-1次比较或者作k次比

内部路径长度I和外部路径长度E之间

的关系为:E=I+2n

已比较为基础的算法:只允许进行元

素间比较而不允许对他们实施运算。

以比较为基础检索的时间下界为:

定理4.3: 设A(1:n)含有n(n≥1)各不同

的元素,排序为A(1)

设以比较为基础去判断是否x∈A(1:n)

的任何算法在最坏情况下所需的最小

比较次数是FIND(n),那么FIND(n)

≥⎡log(n+1)⎤

定理表明:任何一种以比较为基础的

算法,其最坏情况下的计算时间都不

可能低于O(logn),也就是不可能存在

其最坏情况下计算时间比二分检索算

法的计算时间数量级还低的算法。

证明:任何以元素比较为基础的检索

算法,都能描述成二元比较树。不论

成功、不成功检索,对树而言最坏情

况都是根到最远叶节点距离k(内节点

最大级数,树高),对于算法而言FIND(n)

只能不小于这个值。而为了保证成功

检索正常,树至少有n个内节点。故

有n≤ 2k-1,即FIND(n)≥k ≥⎡log(n+1)⎤

Strassen矩阵乘法复杂度分析

矩阵计算公式

任何以关键字比较为基础的分类算法,

最坏情况下的时间下界都是Ω(nlogn),

因此从数量级的角度上看, 归并算法

是最坏情况下的最优算法。

********************************

第五章

概念

一类问题有n个输入, 而它的解就是

这n个输入的某个子集, 而这个子集

必须满足某些事先给定的条件即约束

条件, 满足约束条件的子集称为该问

题的可行解. 一般来说可行解不是唯

一的, 为衡量可行解的优劣, 以函数

的形式给出一定的标准, 这些函数称

为目标函数,使目标函数取极值(极大

或极小)的可行解就称为最优解.

谈心方法得出次优解的原因:

①背包容量消耗过快②容量在慢慢消

耗的过程中效益值却没有迅速增加。

定理5.1: 如果p1/w1 ≥p2/w2 ≥…

≥p n/w n,则算法GREEDY-KNAPSACK

对于给定的背包问题实例生成一个最

优解。

定理证明:

设X=(x1,…,x n )是GREEDY-KNAPSACK算

法所生成的解。如果所有的x i 等于1,

显然这个解就是最优解,否则,设j是

使x j ≠ 1的最小下标, 由算法可知:对

于1≤i

i=j ,0 ≤ x j<1若X不是最优解, 则必存

在一个最优解Y= (y1,…,y n),使得∑p i y i >

∑p i x i 。假定∑w i y i =M,设k是使得y k

≠ x k的最小下标,则可以推出y k

立。y k

的情况分别证明:1. 若k

因y k≠x k ,则y k

∑w i x i =M, 且对于1≤i

对于jx k , 则有∑

w i y i >M, 这与Y是可行解矛盾若y k=x k ,

则与假设y k ≠ x k 矛盾, 故只有y k

立3. 若k>j, 则∑w i y i >M, 这与Y是可

行解矛盾。因此y k

定把y k 增加到x k , 那么必须从

(y k+1,…,y n) 中减去同样多的量, 使得所

用的总容量仍为M。这导致一个新的

解Z = (z1,…,z n), 其中z i= x i, 1≤i≤k,并且

∑w i (y i-z i )= w k (z k-y k)。

定理5.3: 设J是k个作业的集合,

б=i1,i2,…,i k是J中作业的一种排列, 它

使得d i1≤d i2≤…≤d ik。J是一个可行解, 当

且仅当J中的作业可以按照б的次序而

又不违反任何一个期限的情况来处理。

一种更快的作业排序算法算法思想:

对作业i分配时间时, 分给它一个时间

片, 在这个时间片里作业i能完成。时

间片是一个时间范围, 在考虑已经分

配的时间片的基础上, 时间上界应尽

可能的取大(可能的话尽量将作业向后

排)

********************************

第六章

有这样一类问题, 它们的活动过程可

分为若干个阶段, 在任一阶段后的行

为都依赖于i 阶段的过程状态,而与i

阶段之前的过程无关, 这样就构成了

一个多阶段决策过程;

动态规划的目标: 在所有允许选择的

决策序列中选取一个会获得问题最优

解的决策序列,即最优决策序列。

最优性原理(Principle of Optimality) 过

程的最优决策序列具有如下性质: 无

论过程的初始状态和初始决策是什么,

其余的决策都必须相对于初始决策所

产生的状态构成一个最优决策序列

多段图问题是求由s到t的最小成本路

径。

向前处理法从最后阶段开始,以逐步

向前递推的方式, 列出求解前一阶段

决策值的递推关系式,

向后处理法从初始阶段开始, 以逐步

向后递推的方式, 列出求解后一阶段

决策值的递推关系式, 即根据x1, … x i-1

的那些最优决策序列来列出求取x i决

策值的关系式

多段图:

设P(i, j)是一条从V i中的节点j 到汇点

t 的最小成本路径, COST(i, j)表示这条

路径的成本, 根据向前处理方法有公

式4.5 : COST(i, j)= min{ c(j, l )+

COST(i+1, l)}其中: l∈V i+1,边

∈E, c(j, l)表示该边的成本

在计算每个COST(i, j)的同时, 记下每

个状态(结点j)所做出的决策(即l 的取

值),令D(i, j)= l, 则容易求出这条最小

成本的路径

二分检索:

R(i,j)是使C(i,j)=min{C(i, k-1)+C(k, j)}+W(i,

j)取最小值的k值)

支配规则:如果S i-1 和S i1中一个有

(P j,W j), 另一个有(P k,W k), 并且在W j

≥W k的同时有P j≤P k, 那么, 序偶

(P j,W j) 被放弃;

设S i-1表示f i-1的所有序偶的集合, S i1表

示f i-1(X-w i)+p i 的所有序偶的集合, 将

(p i,w i)加到S i-1的每一对序偶上就得到

S i1, 然后在支配规则下将S i-1和S i1归并

成S i

序偶对方法的正确性证明:S i中序偶

(P,W)表示KNAP(1,i,W) 的最优解为P;

S i的构成(参考动态规划一般方法):

若x i为0,则为S i-1中序偶;若x i为1,

则为S i-1中序偶加(p i,w i),即S1i

货郎担问题就是求取具有最小成本的

周游路线问题,g(i,S)表示由结点i经过

S中所有结点到结点1的最短路线长

度g(i,S)=min{c ij +g(j,S-{j})} j∈S

********************************

第八章

什么是回溯法:回溯法是一个既带有

系统性又带有跳跃性的的搜索算法。

回溯法是以深度优先的方式系统地搜

索问题的解, 它适用于解一些组合数

较大的问题。思想:不断地用修改过

的限界函数P i(x1,…,x n)去测试正在构造

的n元组的部分向量, 看是否可能导

致最优解, 如果不能, 就将可能要测

试的m i+1… m n个向量略去

回溯法的解需要满足一组综合的约束

条件, 通常分为: 显式约束(限定每个

x只从一个给定的集合上取值, 满足显

式约束的所有元组确定一个可能的解

空间)和隐式约束(描述了x i必须彼

此相关的情况)

解空间树(状态空间树)的术语

问题状态: 树中的每一个结点确定所

求解问题的一个问题状态

状态空间: 由根结点到其他结点的所

有路径确定了这个问题的状态空间

解状态: 是这样一些问题状态S, 对于

这些问题状态, 由根到S的那条路径

确定了这个解空间中的一个元组

答案状态: 是这样的一些解状态S, 对

于这些解状态而言, 由根到S的这条

路径确定了这问题的一个解

2

2

)

(

)2/

(

8

)1(

)

(

2>

=

+

=

n

n

n

O

n

T

O

n

T

∑∞

=

=

+

+

+

+

=

3

2

!

!3

!2

1

i

i

x

i

x

x

x

x

e

6

2

4

5

11

M

M

M

M

C+

-

+

=

2

1

12

M

M

C+

=

4

3

21

M

M

C+

=

7

3

1

5

22

M

M

M

M

C-

-

+

=

相关文档
最新文档