离散数学算法.pptVIP

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
离散数学算法

离散数学 黄晓宇 HuangSir@ 本讲内容 算法简介 算法例子 算法分析 递归算法 算法-一组有限的指令集合 算法示例-三数排序 跟踪 算法正确性证明 算法描述:在数列s1,..., sn 中找出最大的一个。 输入:s, n 输出:large(序列s 中的最大值) max (s, n){ large = s1 for i = 2 to n if (si large) large = si return large } 算法正确性证明(二) 循环不变式:在循环的每次迭代前后均为真的谓词 large=max{s1,..., sn } 算法正确性证明(三)-归纳 平凡情况(i = 1)large 是序列中的最大值。 假设large是子序列s1,..., si 中的最大值。 假如i n 成立,i 变成i + 1。 (1)si+1 large,赋值large =si+1; (2)si+1 ≤ large,算法不改变large 的值。 因此, large=max{s1,..., sn } 是一个循环不变量。 for 循环在i = n 时结束,算法正确。 文本有哪些信誉好的足球投注网站 假设给定一个文本t(例如一个文档),在t 中找出特定词组p 首次出现的位置。 插入排序 假设插入排序的输入是s1,..., sn,目标是按非递减顺序将数据排序。 在插入排序的第i 次迭代后,序列的前一部分s1,..., si会被重新安排使得它有序。插入排序接下来将s i + 1插入s1,..., si,使得s1,..., si, si+1 也是有序的。 时空分析 在插入排序算法中,for 循环执行n - 1 次,但是对于一个特定的i 值,while 循环执行的次数依赖于输入。 例如,如果输入的序列已经按非递减顺序排列,val sj总是false,while 的循环体永远不被执行,称这个时间为最好情形执行时间;另外,如果这个序列是按递减顺序排序的,val sj, 总是true,while 的循环体执行最大次数。(当第i 次迭代时for 循环中while 循环执行i - 1 次)。称这个时间为最坏情形执行时间。 随机算法 一个随机算法(randomized algorithm)并不要求每一步的执行中间结果被惟一决定且只依赖于输入和前面步骤的执行结果。 根据定义,当执行一个随机算法时,在某些点上,算法做出随机选择。 随机算法(二) rand (i, j):返回在整数i 和j 之间的(包含i 和j)一个随机整数。 算法的分析 一个计算机程序,即便是正确的,也可能是不可用的,因为执行这个程序需要的时间或者存储这个程序的数据、变量等需要的空间太大了。 例:列举一个N元集合的所有子集(编程实现) 确定一个计算机程序性能 数学定义 数学定义(二) 数学定义(三) 如果f (n) = O(g(n)),可得出结论除了对某些常量因子和有限数之外,f 的上界是g,所以g 至少和f 的增长一样快。例如,如果f (n) = n, g(n) = 2n,那么f (n) = O(g(n)),但是g 比f 增长快得多。另一方面,如果f (n) = ?(g(n)),可得出结论:除了对某些常量因子和有限数之外,f 的上下界是g,所以f 和g 的增长一样快。注意n = O(2n),但是n ≠ ?(2n)。 复杂度计算:夹逼法 f(n)=?(g(n)) iff f(n)=O(g(n)) and f(n)=? (g(n)) 例1:P163 例4.3.3 60n2+5n+1 = ?(n2) 例:给出语句x = x + 1 的执行次数关于n 的?表示 例:给出语句x = x + 1 的执行次数关于n 的?表示 Input: s1,s2,…,sn, n, key Output : index of key procedure linear_search(s,n,key) for i:= 1 to n do if key = si then return(i) return(0) end linear_serach 讨论 P174 -30 算法的思路 复杂度 P176-69 递归算法 一个递归函数(伪代码)是调用自身的函数。一个递归算法是包含递归函数的算法。 递归算法的基本思想:分而治之。 即将问题分解成与初始问题同类型的子问题来求解,每一个子问题又可以继续分解……依次类推,直到这个过程得到的子问题可以通过一个直接的办法求解。 最后,通过组合子问题的解就可以得到初始问题的解。 阶乘计算: n! n! = n(n - 1) (n - 2)?2·1 阶乘计算(二) N!?(N-1)! ? (N-2)! ?(

文档评论(0)

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

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

1亿VIP精品文档

相关文档