数据结构 - 引言学习 文档 参考.ppt

  1. 1、本文档共59页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 典型的增长率 c 常量 logN 对数 Log2N 对数的平方 N 线性 NlogN NlogN N2 平方 N3 立方 2N 指数 * 算法按时间复杂度分类 多项式时间:渐进时间复杂度有多项式时间限界的算法 指数时间算法:渐进时间复杂度有指数时间限界的算法 多项式时间复杂度的关系: O(1) O(logN) O(N) O(NlogN) O(N2) O(N3) 指数时间复杂度的关系: O(2N) O(N!) O(NN) * 算法分析 时间复杂度的概念 算法运算量的计算 渐进表示法 时间复杂度的计算 算法的优化 空间复杂度的概念 * 大O表示法的计算 时间复杂度的计算先定义标准操作,再计算标准操作的次数,得到一个标准操作次数和问题规模的函数。然后取出函数的主项,就是它的时间复杂度的大O表示。 简化方法:根据两个定理。 * 大O表示法的定理 求和定理:假定T1(n)、T2(n)是程序P1、P2的运行时间,并且T1(n)是O(f(n))的,而T2(n)是O(g(n))的。那么,先运行P1、再运行P2 的总的运行时间是:T1(n)+T2(n)=O(MAX(f(n),g(n))。 求积定理:如果T1(n) 和 T2(n)分别是O(f(n))和O(g(n))的,那么T1(n)×T2(n)是O(f(n)×g(n)) 的。 * 大O表示法的计算规则 规则1:每个简单语句,如赋值语句、输入输出语句,它们的运行时间与问题规模无关,在每个计算机系统中运行时间都是一个常量,因此时间复杂度为 O(1)。 规则2:条件语句,if 条件 then 语句 else 语句,的运行时间为执行条件判断的代价 ,一般为O(1),再加上执行 then 后面的语句的代价(若条件为真),或执行else 后面的语句代价(若条件为假)之和,即max(O(then子句),O(else子句))。 * 规则3:循环语句的执行时间是循环控制行和循环体执行时间的总和。循环控制一般是一个简单的条件判断,因此循环语句的执行时间是循环体的运行时间乘循环次数。 规则4:嵌套循环语句,对外层循环的每个循环周期,内存循环都要执行它的所有循环周期,因此,可用求积定理计算整个循环的时间复杂度,即最内层循环体的运行时间乘所有循环的循环次数。例语句: for (i=0; in; i++) for (j=0; jn; j++) k++; 的时间复杂性为O(n2) * 连续语句:利用求和定理把这些语句的时间复杂性相加。例程序段: for (i=0; in; i++) a[i]=0; for (i=0; in; i++) for (j=0; jn; j++) a[i]= i+j; 有两个连续的循环组成。第一个循环的时间复杂度为O(n),第二个循环的时间复杂度为O(n2)。根据求和定理,整段程序的的时间复杂性为O(n2) * 大O的简化计算 在程序中找出最复杂、运行时间最长的程序段,计算它的时间复杂度。也就是整个程序的时间复杂度 在max1中,最复杂的程序段是两个循环,这两个循环的时间复杂度都是相同的,为O(n),因此整个程序的时间复杂度是O(n)的 * 算法分析 时间复杂度的概念 算法运算量的计算 渐进表示法 时间复杂度的计算 算法的优化 空间复杂度的概念 * 典型实例--最大连续子序列问题 给定(可能是负的)整数序列 ,寻找(并标识) 的值为最大的序列。如果所有的整数都是负的,那么最大连续子序列的和是零。 例如,假设输入是{-2, 11, -4, 13, -5, 2},那么答案是20,它表示连续子序列包含了第2项到第4项(如粗体字部分)。又如第二个例子,对于输入{1, -3, 4, -2, -1, 6},答案是7,这个子序列包含最后四项。 * 解法一 – 穷举法 分别求子序列 [0,0],[0,1],。。。,[0,n] [1,1],[1,2],。。。[1,n] 。。。 [n,n] 的和,求出最大值 * int maxSubsequenceSum(int a[], int size, int start, int end) { int maxSum = 0; for (int i = 0; i size; i++ ) for( int j = i; j size; j++ ) { int thisSum = 0;

文档评论(0)

文人教参 + 关注
实名认证
内容提供者

老师教学,学生学习备考课程、成人语言培训课程及教材等为提升学生终身学习竞争力,塑造学生综合能力素质,赋能学生而努力

版权声明书
用户编号:6103150140000005

1亿VIP精品文档

相关文档