[工学]2-算法与数据结构.pptVIP

  • 2
  • 0
  • 约6.61千字
  • 约 59页
  • 2018-03-28 发布于浙江
  • 举报
[工学]2-算法与数据结构

计算机算法与 数据结构 郭东伟 总目录 by skywind 程序设计与计算机科学 计算机科学的根本问题是能行性问题 程序设计是操纵计算机的根本方法 程序设计融入到计算机科学的各个领域 成为一个合格的计算机人才,必须熟练掌握程序设计技术 by skywind 程序设计艺术 作为艺术的程序设计 程序设计艺术与软件工程 编程语言与编程工具 Programming=Algorithm+Data Structures by skywind 算法+数据结构=程序 算法: 程序灵动的源泉 程序设计过程中的 工艺 数据 程序处理的对象 数据结构 存放数据的容器 提供数据封装和数据抽象 by skywind 算法概述 算法的特性与复杂度 算法的设计思想 直接法 贪心法 分治与递归 动态规划 搜索与穷举 by skywind 算法Algorithm 算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。 算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。 by skywind 算法的特性 1、有穷性: 一个算法必须保证执行有限步之后结束; 2、确切性: 算法的每一步骤必须有确切的定义; 3、输入: 一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件; 4、输出: 一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的; 5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。 by skywind 衡量算法的指标 时间复杂度 执行算法所耗费的时间 这个时间是问题输入x的函数f(x) 一般情况下只和x的规模n有关,记做f(n)。 当不考虑其中一些细节时,记做T(n)=O(f(n)) 当问题的规模n足够大是,算法执行时间的增长取决于f(n) 的主要部分,称作渐进时间复杂度(Asymptotic Time Complexity)。 by skywind 算法复杂度 空间复杂度 执行算法所耗费的存储空间 最好、最坏、平均复杂度(不同概率意义上) 多项式时间与指数时间 by skywind 复杂度的增长 by skywind 不同计算模型复杂度的关系 CPU速度的增长和存储容量的增长 并行计算 不同计算模型 如不同语言的转换、翻译 NP问题简介 by skywind 程序优化 体系结构的优化更加重要 要优化关键代码(80-20原则) 优化算法复杂度的阶,而不是系数 使用公认的,成熟的技术 避免过度优化 保证优化不影响可读性 by skywind 算法设计1-直接法 递推法 利用问题本身所具有的一种递推关系求问题解的一种方法。它把问题分成若干步,找出相邻几步的关系,从而达到目的,此方法称为递推法。 迭代法 通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的过程。 by skywind 算法设计2-贪心 以当前情况为基础作最优选择,而不考虑各种可能的整体情况。如要获得全局最优解时,需要进行证明 每次都选取最好的解元素加入解中 一般来说是一种快速、直接的方法 不保证得到正确解或最优解 算法的正确性需要数学的保证 by skywind 贪心法应用:选择排序 每次选取剩余元素中的最小元素 简单选择排序: 简单地从剩余元素中选择最小的元素 堆排序: 将所有元素构造成一个min堆 每次从堆中取出堆的头元素,加入到排序后的数组中 调整堆,保持堆的结构 by skywind 算法设计3-分治法 把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。 by skywind 分治的过程 将问题划分为一个或若干个子问题 一般结构: 如果问题规模较小,直接解决 否则,将问题进行划分 递归解决划分后的子问题 将子问题的答案进行合并,得到原问题答案 by skywind 分治法与递归 问题分解是人类思考的一种基本方式 分治法是这种思考方法的抽象 递归是支持这种方法的程序设计技术 递归技术的设计思路 坚持问题分解的思考模式 抽象、忽略细节问题 不机械地将递归转化为迭代方法 对于不合适的问题重新考虑其他方法 by skywind 简单分治法应用 二叉搜索问题 查找X在有序数组A[n]中的出现 若X==A[n/2],找到 若XA[n/2]则只需要查找前半部分 若XA[n/2]则只需要查找后半部分 by skywind 分治法应用-I:合并排序 问题:将A[n]的数据进行排序 解答: 若n==1,返回 将

文档评论(0)

1亿VIP精品文档

相关文档