算法复习提纲.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

复习

递归:

定义、递归算法的效率分析(时间的递推式)

蛮力法:

定义:

蛮力法是一种简单直接的解决问题的方法,常常直接基于问题本身设计算法。可以用“直接干吧!”来描述蛮力法策略,通常是最容易想到和采用的一种简单直接的算法设计策略。

特点:1.算法设计较为简单直接,相对容易;

通常,算法效率不高。因此,高效算法一般很少来自于蛮力法。

可以解决广泛领域的各种问题,几乎是唯一一种解决各种问题的

一般性方法。常用于一些非常基本而又十分重要的算法。比如:

计算n个数的和;求一个列表的最大元素,等等。

对于一些重要的算法(如排序、查找、矩阵乘法、字符串匹配),

蛮力法可以产生一些合理算法,多少具备一些实用价值,且并不限制问题的规模。

5对于规模不大的问题,蛮力法的计算速度可以接受时,设计一个

高效算法所花费的代价很可能不值得。(人力成本,算法复杂度)

6.蛮力法可为研究和教学服务,以它作为尺度,衡量该问题的其他

算法的效率。

例:选择排序、冒泡排序、顺序查找、字符串匹配、穷举查找(穷举查找是一种简单的蛮力法。)等、

分治法:

定义:

分治法是著名的通用算法设计技术,很多非常有效的算法实际上是这个通用算法的特殊实现。基本思想符合人们在解决复杂问题时,常常将其从大到小逐步分解,进而将较易求解的小问题解合并得到原问题的解。这即是分治法”的分而治之的思想。

分解原问题规模为较小的子问题,子问题最好有相同规模;

求解子问题;(1、2步“分解一求解”过程通常是递归的,直到子问题可简单求解为止)

合并子问题的解,得到原问题的解(必要的话)。

效率分析:

建立递归算法的递推式并求解得到增长函数的增长率类型:

分治法运算时间的通用分治递推式:

一个规模n的问题,每次被分为a个子问题,每个子问题规模n/b

(上例:a=2,b=2)。为简化分析,假定n是b的乘方即n=bk

k=1,2,3,...,通用分治递推式如下:

\c,nt

T(n)或 「

\aT(nlb)+f(n),nt

r

c:子集(规模为tr)求解时间(常量);(时间:基本操作数)

f(n):子集分解和子集解合并的时间。(本例比较1次即f(n)=1)解递推式,得到时间效率(主定理):若:

f(n)e?(nd),d0

0(nd), abd

T(n)=0(ndlogn),a=bd

0(孩师), abd

应用例:

折半查找、合并排序、快速排序、大整数乘法、在序列A[1..n]中找最大最小元素的问题、循环锦标赛问题等

减治法:

定义:

利用给定规模与较小规模问题解之间的关系,从顶至下(递归)或从底至上(非递归)求解问题的一种方法。减治法通常分为3种:

?减常量法:常量通常为1即减1法,也有减2的(如奇偶数分别处理)

?减常因子法:常因子通常为2(减半技术)。

?减可变规模法。

例:

插入排序、深度优先与广度优先搜索、拓扑排序等

减治与分治的区别

变治法:

定义:变治法是一种通用的算法设计技术,基于变换的思想。

?:?变:把问题变得更容易求解;

?:?治:对变换后的问题求解。

变治策略有3种主要类型:

实例化简:变换为更简单的实例。如预排序。

改变表现:变换为不同表现实例。如AVL树,2-3树,堆。

问题化简:变换为另一个问题的实例。如数学建模,将具体应用问题用变量、函数、方程这样的数学对象来表达。

动态规划:

定义:把求解过程分为一系列阶段,各个阶段依次按照最优性原则计算,最后阶段计算得到最优解。包括分段、求解两大步。(不能段化的问题不能用动态规划法求解)

动态的含义:

求解算法施加的状态是变化的。当前状态只与其直接前趋状态有关,对其直接前趋状态施加求解算法,成为当前状态。

最优性原则(PrincipleofOptimality)

一个最优问题任何实例的最优解,是由该实例的子实例的最优解组成的。子实例组成父实例,父实例分解为子实例。

动态规划法的特点:

分阶段(级)决策。对最优化问题,用最优性原则设计。

一般采用自顶向下分析(规模减小),自底向上计算(规模增加)。计算过程是一级一级(一阶段一阶段)地向前推进,直到最终状态。

动态规划算法的基本要素:

最优子结构性质和重叠子问题。

最优子结构性质:

问题的最优解包含着它的子问题的最优解。即不管前面的策略如何,此后的决策必须是基于当前状态(由上一次决策产生)的最优决策。

重叠子问题:

在用递归算法自顶向下解问题时,每次产生的子问题并不总是新问题,有些问题被反复计算多次。对每个子问题只解一次,然后将其解保存起来,以后再遇到同样的问题时就可以直接引用,不必重新求解。

解决问题的基本特征

动态规划一般解决最值(最优,最大,最小,最长……)问题;

文档评论(0)

zhuwo + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档