l自制07工硕算法分析参考资料.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  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文档。上传文档
查看更多
l自制07工硕算法分析参考资料

算法的知识结构 算法概述 1. 什么是算法: 书本:算法是由若干条指令组成的有穷序列。具有性质:输入、输出、确定性、有限性(程序与算法的主要区别)、能行性。 课堂:寻找解的过程(Search);递归反复的寻找最优解(research)。 算法复杂性:算法所需的计算机资源,包括时间复杂度(T(n),计算所用的时间)和空间复杂度(S(n),计算所用的内存空间),n是输入量的规模。 问题的复杂性与算法复杂性区别:问题复杂性是固定的,涉及NP完全性理论;算法复杂性依据算法不同而不同,一个问题可以有多种算法。 2. 复杂度表示方式: O(n)渐近复杂度上界 Ω(n)渐近复杂度下界 o(n)非紧上界 ω(n)非紧下界 Θ(n)/θ(n)紧渐近界(确界/紧渐近:即上界与下界紧夹住中间范围,使得得到的复杂性分析结果较为精确。) 3.算法性质 (1)传递性: f(n)= Q(g(n)), g(n)= Q(h(n)) T f(n)= Q(h(n)) f(n)=O(g(n)), g(n)=O(h(n)) T f(n)=O(h(n)) f(n)= W(g(n)), g(n)= W(h(n)) T f(n)= W(h(n)) f(n)=o(g(n)), g(n)=o(h(n)) T f(n)=o(h(n)) f(n)= w(g(n)), g(n)= w (h(n)) T f(n)= w (h(n)) (2)反身性: f(n)= Q(f(n)) f(n)=O(f(n)) f(n)= W(f(n)) (3)对称性: f(n)= Q(g(n)) ? g(n)= Q (f(n)) (4)互对称性: f(n)= O(g(n)) ? g(n)= W (f(n)) f(n)=o(g(n)) ? g(n)= w (f(n)) (5)算术运算: O(f(n))+O(g(n)) = O(max{f(n),g(n)}) O(f(n))+O(g(n)) = O(f(n)+g(n)) O(f(n))*O(g(n)) = O(f(n)*g(n)) O(cf(n)) = O(f(n)) g(n)= O(f(n)) T O(f(n))+O(g(n)) = O(f(n)) 4. 复杂度排序: O(1)O(C)O(loglogn)O(logn)O()O()O(n)O(nlogn) O(n2)O(n3)O(2n)O(3n)O(n!)O() 常用排序算法的复杂度: 线性检索算法(O(n))、二叉检索算法(O(logn))、堆排序(复杂度最优排序O(nlogn))、改进的冒泡算法(O(n2))、 f(n) O(n) Ω(n) θ(n) f(n)=c O(1) Ω(1) θ(1) f(n)= an+b O(n) Ω(n) θ(n) f(n)=an2+bn+c O(n2) Ω(n2) θ(n2) f(n)=a2n+bn2 O(2n) Ω(2n) θ(2n) f(n)=log n2 =2logn O(logn) Ω(logn) θ(logn) f(n)=log1+log2+…+logn O(nlogn) Ω(nlogn) θ(nlogn) 递归和分治 1. 知识点 递归:直接或间接调用自身。递归算法往往复杂度较高,但程序简单容易理解。 分治策略:将一个规模为n的问题分解为k个规模较小的子问题,子问题相互独立并且与原问题相同可以递归地解出,然后再合并为原问题的解。即把大问题分为小问题来解。 递归与分治策略常常一起使用,贯穿于许多经典算法之中。(我的理解:动态规划、贪心法、回溯法及分支限界法等其实都是分治思想,书上的“分治法”的案例是那些不具备动态规划等算法的前提条件的一些案例,但又可以用分治思想特殊处理。动态规划等算法,终归也是可以用递归来写的。) 可以通过一些方法将递归算法拆解为非递归算法(解递归):生成函数、特征方程、人工栈、递推、换名法等。 2. 解递归的过程(按pdf的例子) 生成函数法 递归函数(汉诺塔问题):h(n)=2h(n-1)+1,h(1)=1 解:构造生成函数:G(x)=h(1)x+h(2)x2+h(3)x3+…… 则G(x)-2xG(x)=h(1)x+(h(2)-2h(1))x2+(h(3)-2h(2))x3+…… //这步是数学技巧,按照h(n)-2h(n-1)=1的特点变换 则(1-2x)G(x)=x+x2+x3+……=x(1+x+x2+x3+……) //由h(n)-2h(n-1)=1 则(1-2x)G(x)=x/(1-x) TG(x)=x/((1-2x)(1-x)) //由生成函数z变换的性质1+x+x2+x3+……=1/(1-x)

文档评论(0)

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

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

1亿VIP精品文档

相关文档