计算机算法设计与分析总复习.ppt

  1. 1、本文档共87页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机算法设计与分析总复习

计算机算法设计与分析 1.1 算法的定义和特征 1) 什么是算法? 算法是求解某一特定问题的一组有穷规则的集合,它是由若干条指令组成的有穷符号串。 算法和程序的区别 程序:一个计算机程序是对一个算法使用某种程序设计语言的具体实现 任何一种程序设计语言都可以实现任何一个算法 算法的有穷性意味着不是所有的计算机程序都是算法 问题求解(Problem Solving) 1)上界函数 定义1 如果存在两个正常数c和n0,对于所有的n≥n0,有 |f(n)| ≤ c|g(n)| 则记作f(n) = Ο(g(n)) 含义: 如果算法用n值不变的同一类数据在某台机器上运行时,所用的时间总是小于|g(n)|的一个常数倍。所以g(n)是计算时间f(n)的一个上界函数。 f(n)的数量级就是g(n)。 f(n)的增长最多像g(n)的增长那样快 试图求出最小的g(n),使得f(n) = Ο(g(n))。 算法分类(计算时间) 多项式时间算法:可用多项式(函数)对其计算时间限界的算法。 常见的多项式限界函数有: Ο(1) Ο(logn) Ο(n) Ο(nlogn) Ο(n2) Ο(n3) 指数时间算法:计算时间用指数函数限界的算法。 常见的指数时间限界函数: Ο(2n) Ο(n!) Ο(nn) 说明:当n取值较大时,指数时间算法和多项式时间算法在计算时间上非常悬殊。 典型的计算时间函数曲线 定义1.2 如果存在两个正常数c和n0,对于所有的n≥n0,有 |f(n)| ≥ c|g(n)| 则记作f(n) = Ω(g(n)) 含义: 如果算法用n值不变的同一类数据在某台机器上运行时,所用的时间总是不小于|g(n)|的一个常数倍。所以g(n)是计算时间f(n)的一个下界函数。 f(n)的增长至少像g(n)的增长那样快 试图求出“最大”的g(n),使得f(n) = Ω(g(n))。 定义1.3 如果存在正常数c1,c2和n0,对于所有的n≥n0,有 c1|g(n)| ≤|f(n)| ≤ c2|g(n)| 则记作 含义: 算法在最好和最坏情况下的计算时间就一个常数因子范围内而言是相同的。可看作: 既有f(n) = Ω(g(n)),又有f(n) = Ο(g(n)) 记号表明算法的运行时间有一个较准确的界 最优算法 问题的计算时间下界为?(f(n)),则计算时间复杂性为O(f(n))的算法是最优算法。 例如,排序问题的计算时间下界为?(nlogn),计算时间复杂性为O(nlogn)的排序算法是最优算法。 合并排序 快速排序 线性时间选择问题 问题描述:给定线性集中n个元素和一个整数k,要求找出这n个元素中第k小的元素,即如果将这n个元素依其线性序排列时,排在第k个位置的元素即为我们要找的元素。 当k=1时,即找最小元素;当k=n时,即找最大元素;当k=(n+1)/2时,称为找中位数。 线性时间选择问题算法 上述Partition算法可用来求选择问题的有效解。如果划分元素v测定在A(j)的位置上,则有j-1个元素小于或等于A(j),且有n-j 个元素大于或等于A(j)。因此,若kj,则第k小元素在A(1:j-1)中,再对之进一步划分。 若k=j,则A(j)就是第k小元素 若kj,则第k小元素在A(j+1:n)中,再对之进一步划分。 动态规划算法的两个基本要素 对于一个多阶段过程问题,最优决策是否存在,不仅依赖于该问题是否有最优子结构性质,而能否采用动态规划的方法,还要看该问题的子问题是否具有重叠性质。 最优子结构性质:原问题的最优解包含了其子问题的最优解。 子问题重叠性质:每次产生的子问题并不总是新问题,有些子问题被反复计算多次。 建立递归关系 令m[i][j] , 1≤i, j≤n,为计算A[i, j] 的最少数乘次数,则原问题为m[1][n]。 当i = j时,A[i, j]为单一矩阵, m[i][j] = 0; 当i<j时,利用最优子结构性质有: 消除重复的矩阵连乘算法 Void MatrixChain(int p, int n, int **m, int **s) { for (int i = 1; i = n; i++) m[i][i] = 0; //将对角线元素赋值为零,即单个矩阵计算量为0 for (int r = 2; r = n; r++) for (int i = 1; i = n – r +1; i++) { int j = i +

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档