网站大量收购独家精品文档,联系QQ:2885784924

2-算法及与数据结构.pptx

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

计算机算法与数据结构郭东伟总目录by skywind程序设计与计算机科学计算机科学的根本问题是能行性问题程序设计是操纵计算机的根本方法程序设计融入到计算机科学的各个领域成为一个合格的计算机人才,必须熟练掌握程序设计技术by skywind程序设计艺术作为艺术的程序设计程序设计艺术与软件工程编程语言与编程工具Programming=Algorithm+Data Structuresby 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,返回将数组分解为A[0..n/2],A[n/2..n]两部分对这两个子问题分别进行合并排序合并排序后的两个数组,得到答案by skywind简单分治法-缩减问题规模将问题的规模缩小,直到能够直接解决搜索空间从树简化为链一般结构:如果问题规模较小,直接解决否则,将问题规模减小递归解

文档评论(0)

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

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

1亿VIP精品文档

相关文档