算法设计与分析讲义.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、1算法与程序 算法:是由若干条指令组成的的有穷序列,且满足下述儿条性质 输 入:有零个或多个外部量作为算法的输入。 输 出:算法产生至少一个量作为输出。 确定性:组成算法的每条指令淸晰、无歧义。 有限性:算法中每条指令的执行次数有限,执行每条指令的时间也有限。 程序:是算法用某种程序设计语言的具体实现。 程序可以不满足算法的性质(4)即有限性。 1、2算法复杂性分析 算法复杂性:是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性,需 要的空间资源的量称为空间复杂性。 这个量应该只依赖于算法要解的问题的规模、算法的输入和算法本身的函数。 算法复杂性的函数表示: 如果分别用N、I和A表示算法要解问题的规模、算法的输入和算法本身,而且用C表示复 杂性,那么,应该有C=F(N,I,A)o 一般把时间复杂性和空间复杂性分开,并分别用T和S来 表示,则有:T=T(N,I)和S=S(N,I) o (通常,让A隐含在复杂性函数名当中) 我们只考虑三种情况下的吋I可复杂度: 最坏情况下: T証冈=曾 T(NJ) = max 工?阳(N.I) = £ 佔(N,门= 疋乩 圧鸟,=1 2-1 最好情况下: T^(N)二 mm T(NJ) = n)ni £亿(NJ) = f g(NJ) = f (N,I) 胆 2 圧 Q* 2=1 2=1 平均情况下: J(N)二工 p⑴丁(N、D =工卩 /ePv 2=1 其中Dn是规模为N的合法输入的集合;I*是Dn中使T(N, I*)达到Tmax(N)的合法输入; 是 中使T(N,)达到Tmin(N)的合法输入;而P(l)是在算法的应用中出现输入I的槪率。 算法复杂性在渐近意义下的阶: 渐近意义下的记号:O、Q、8、o 设f (N)和g (N)是定义在正数集上的正函数。 0的定义:如果存在正的常数C和自然数No,使得当NNo时有f (N)£Cg(N),则称函数f(N) 当N充分大时上有界,且g(N)是它的一个上界,记为f (N)二0(g(N))。即f (N)的阶不高于g(N) 的阶。 根据0的定义,容易证明它有如下运算规则: (1 )O(f)+O(g)=O(max(f,g)); O(f)+O(g)=O(Rg); O(fO(g)=O(fg); 如果 g(N)=O(f(N)),则 O(f)+O(g)=O(f); O(Cf(N))=O(f(N)),其中C是一个正的常数; ⑹ f=O(f)。 Q的定义:如果存在正的常数C和自然数No,使得当N二No时有f(N)=Cg(N),则称函数f (N) 当N充分大时下有界,且g(N)是它的一个下界,记为f (7) = Q(g(N))。即f(N)的阶不低于 g(N)的阶。 0的定义:对于任意给定的e 0,都存在正整数No,使得当屮N0时有f(N)/Cg(N)£ e ,则称 函数f (N)当N充分大时的阶比g (7)低,记为f (N)二0(g(N))。 。的定义:定义 f(N)= 0 (g(N))当且仅当 f(N)=O(g(N))且 f(N)二 Q(g(N))。此吋称 f(N) 与g(N)同阶。 例如,4NlogN+7二0(3N2+4NlogN+7)。 第2章递归与分治策略 算法总思路:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,分而治 之。对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如 此递归的进行下去,直到问题规模足够小,很容易求出其解为止。将求出的小规模的问题的 解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。将求出的小规模的问 题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。 2、1递归的概念 直接或间接地调用自身的算法称为递归算法。 用函数自身给出定义的函数称为递归函数。 由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在 这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最 终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。 例1 例1:阶乘函数 I J 1 7? = 0 边界条件 [〃(〃一1)! 72 0 递归方程 边界条件与递归方程是递归函数的二个要素,递归函数只有具备了这两个要素,才能在有限 次计算后得出结果。 递归函数 int Factorial(int n) { if(n==0) return 1; return n*Factorial(n-1); } 例 2: Fibonacci 数列 无穷数列1, 1, 2, 3, 5, 8, 13, 21, 34, 55,…,被称为Fibonacci数列。它可以递归 地定义为: n = 0 n = 0 [ n = l p—边界条件 斤1

文档评论(0)

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

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

1亿VIP精品文档

相关文档