算法

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

算法是对问题求解过程的准确描述,由有限条指令组成,这些指令能在有限时间内执行完毕并产生确定性的输出。

算法需满足的4个性质:

输入:零个或多个外部量作为输入。

输出:至少产生一个量作为输出, 它(们)与输入量之间存在某种特定的联系。

确定性:组成算法的每条指令都是清晰、无歧义的。

有限性:每条指令的执行次数有限,执行每条指令的时间也有限。

程序与算法的区别:

程序是算法用某种程序设计语言的具体实现。

程序可以不满足算法的有限性性质。

算法复杂度:

复杂度:算法运行时需要耗费计算机资源的量,可以分为时间复杂度和空间复杂度。

算法复杂度依赖于三个方面:待求解问题的规模、算法的输入和算法本身。

用n,I,A分别表示问题的规模、算法的输入和算法本身,用表示C复杂度,则有:C=F(n,I,A)。如果将时间复杂度和空间复杂度分开,则有T=T(n,I,A)和S=S(n,I,A)。通常,我们让A隐藏在复杂度函数名中,所以有T=T(n,I)和S=S(n,I)。

由于时间复杂度和空间复杂度概念类似,计量方法类似,且空间复杂度分析相对简单,因此本课程主要讨论算法的时间复杂度。

4种阶:O, Ω, Θ,和o

定义1 (O):如果存在正的常数C和自然数n0,使得当n≥n0时,有f(n)≤C·g(n),则称函数f (n) 在n 充分大时有上有界,且g(n) 是它的一个上界,记做f (n) = O(g(n)) ,并称f (n) 的阶不高于g(n) 的阶。

定义2(Ω):如果存在正的常数C 和自然数n0 ,使得当n ≥ n0时,有f(n)≥C·g(n),则称函数f (n) 在n 充分大时有下有界,且g(n) 是它的一个下界,记做f (n) = Ω(g(n)) ,并称f (n) 的阶不低于g(n) 的阶。

下界的阶越高,则评估精度越高,也就越有价值。

定义3(Θ):f (n) = Θ(g(n)) ,当且仅当f (n) = O(g(n)) ,且f (n) = Ω(g(n)) ,称f (n) 和g(n) 是同阶。

定义4( o ) :对于任意给定的ε > 0 ,存在正整数n0 ,使得当n ≥ n0 时,有f (n) / g(n) ≤ε ,则称函数f (n) 在n 充分大时的阶比g(n) 低,记为f (n) = o(g(n)) 。

估算算法的时间复杂度方法:

计算迭代次数

使用递归方程

频度分析

算法复杂度分析的意义:

已知待求解问题的多种算法时,挑选复杂度尽可能低的算法进行应用。

给定待求解的问题,设计复杂度尽可能低的算法。

设计出算法后,不要急于实现,而是先进行复杂度分析后;若该算法确实可行,才有实现的价值与必要。

分治:

maxmin算法用分治法如何求解?

当n=2时,一次比较即可找到最小、最大值。

当n>2时,可以把n个数据元素分为大致相等的两半,

一半有 n/2 个数据元素,而另一半有 n/2 个数据元素。

先分别找出各自组中的最大元素和最小元素,然后

将两个最大元素进行比较,就可得n个元素的最大元素;

将两个最小元素进行比较,就可得n个元素的最小元素。

分治策略的思想:把规模较大的问题分解为若干个规模较小的子问题,这些子问题相互独立且与原问题同类;(该子问题的规模减小到一定的程度就可以容易地解决)

依次求出这些子问题的解,然后把这些子问题的解组合起来得到原问题的解。

由于子问题与原问题是同类的,故分治法可以很自然地应用递归。

深度优先搜索:

给定有向或是无向图G=(V,E),DFS工作过程如下:

1. 将所有的顶点标记为”unvisited”。

2. 选择一个起始顶点,不妨称为v ∈V,并将之标记为”visited”。

3. 选择与v相邻的任一顶点,不妨称之为w,将w标记为”visited”。

4. 继续选择一个与w相邻且未被访问的顶点作为x;将x标记为”visited”。继续选择于x相邻且未被访问的顶点。

此过程一直进行,直到发现一个顶点y,邻接于y的所有顶点都已经被标记为”visited”。此时,返回到最近访问的顶点,不妨称之为z,然后访问和z相邻且标记为”unvisited”的顶点。

6. 上述过程一直进行,直到返回到起始顶点v。

回溯:

1.回溯法工作原理:

回溯法的基本做法是搜索,是一种组织得井井有条,能避免不必要搜索的穷举式搜索法。

回溯法按深度优先策略搜索问题的解空间树。算法搜索至解空间树的任意一节点时,先判断该节点是否可能包含问题的解:1) 如果肯定不包含,则跳过这个节点;2) 如果可能包含,进入该子树,继续按深度优先策略搜索;3) 若某节点i 的所有子节点都不可能包含问题的解,则回溯到i 的父节点,生成下一个节点,继续搜索。

贪心算法:

贪心策略总是做出在当前看来最好的选择,并且不从整体上考虑最优问题,所

做出的每一步选择只是局部意义上最优选择(因而效率往往较高),逐步扩大解

的规模。当然,希望贪心策略得到的最终结果也是整体最优的(上面的解法得到

的恰好是最优解),但不能保证必定得到最优解。

NP完全问题

对判定问题求解,可以采用确定性算法

定义9.1(确定性算法): 设A是求解问题∏的一个算法,如果在算法的整个执行过程中,每一步只有一个确定的选择,则称算法A是确定性算法。

特点:对同一输入实例,运行算法A,所得结果是一样的。

定义9.2(P类问题): 如果对于某个判定问题∏,存在一个非负整数k,对于输入规模为n的实例,能够以O(nk)的时间运行一个确定性算法,得到yes或no的答案,则称该判定问题∏是一个P(Polynomial)类问题。

相关文档
最新文档