- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
非递归算法的分析 1. 建立一个代表算法运行时间的求和表达式; 2. 用渐进符号表示这个求和表达式。 int ArrayMin(int a[ ], int n) { min=a[0]; for (i=1; in; i++) if (a[i]min) min=a[i]; return min; } 1. 决定用哪个(或哪些)参数作为算法问题规模的度量 可以从问题的描述中得到。 2. 找出算法中的基本语句 通常是最内层循环的循环体。 3. 检查基本语句的执行次数是否只依赖于问题规模 如果基本语句的执行次数还依赖于其他一些特性,则需要分别研究最好情况、最坏情况和平均情况的效率。 4. 建立基本语句执行次数的求和表达式 计算基本语句执行的次数,建立一个代表算法运行时间的求和表达式。 5. 用渐进符号表示这个求和表达式 计算基本语句执行次数的数量级,用大O符号来描述算法增长率的上限。 非递归算法分析的一般步骤 对递归算法时间复杂性的分析,关键是根据递归过程建立递推关系式,然后求解这个递推关系式。 递归算法的分析 void Hanoi(int n,char A,char B,char C) { if (n==1) printf (A—C); else { hanoi(n-1,A,C,B); printf(A—C); hanoi(n-1,B,A,C); } } H(1) = 1 (n=1) H(n) = 2*H(n-1)+1 (n1) 算法复杂度分析小结 基本技术: 根据循环统计基本语句次数 用递归关系统计基本语句次数 用平摊方法统计基本语句次数 渐近复杂度: ?、?、? 标准: 平均时间复杂 最坏时间复杂 最好时间复杂度 基本技术: 常用求和公式 定积分近似求和 递归方程求解 选取基本语句 统计基本语句频数 计算并简化统计结果 算法分析的核心——计数 渐近时间关注的是趋势 提锡壶,游西湖,锡壶掉西湖,惜乎锡壶。 听物理,如雾里,雾里看物理,勿理物理。 捧玉杯,看御碑,玉杯碎御碑,欲悲玉杯。 知后羿,有后裔,后裔源后羿,厚矣后裔。 学习技巧——模仿 从哲学角度看:算法是解决一个问题的抽象行为序列。 从技术层面上看:算法是一个计算过程,它接受一些输入,并产生某些输出。 从抽象层次上看:算法是一个将输入转化为输出的计算步骤序列。 从宏观层面上看:算法是解决一个精确定义的计算问题的工具。 你认为算法是什么? 第二章 算法分析基础 1 2 3 4 算法时间复杂性分析 算法空间复杂性分析 最优算法 小 结 公元5世纪末,我国古代数学家张丘建在他所撰写的《算经》中,提出了这样一个问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”意思是公鸡每只5元、母鸡每只3元、小鸡3只1元,用100元钱买100只鸡,求公鸡、母鸡、小鸡的只数。 思考如下问题 案例一——百鸡问题 令a为公鸡只数,b为母鸡只数,c为小鸡只数。列出约束方程: a+b+c=100 (1) 5a+3b+c/3=100 (2) c%3=0 (3) 分析: a、b、c的可能取值范围为0~100,对a、b、c的所有组合进行测试,满足约束方程的组合是问题的解。把问题转化为用 n 元钱买 n 只鸡,则上式变为: a+b+c=n (1) 5a+3b+c/3=n (2) 案例一——百鸡问题 算法1 百鸡问题 1. void chicken_question(int n,int k,int g[],int m[],int s[]) 2. { 3. int a,b,c; 4. k = 0; 5. for (a=0;a=n;a++){ 6. for (b=0;b=n;b++){ 7. for (c=0;c=n;c++) { 8. if ((a+b+c==n)(5*a+3*b+c/3==n)(c%3==0)) { 9. g[k] = a; 10. m[k] = b; 11.
您可能关注的文档
最近下载
- 2019主持人大赛总决赛第三轮巅峰对决王嘉宁VS邹韵演讲稿.doc VIP
- 《房屋建筑学》第6章 建筑构造概论.ppt VIP
- 2025年河北省涿州三中学初三九月月考物理试题含解析.doc VIP
- 超星尔雅学习通《通识写作怎样进行学术表达(复旦大学)》章节测试答案.docx VIP
- C++龟兔赛跑代码.docx VIP
- 人教新版英语九年级Unit1-4试卷.doc VIP
- C++书写日历代码.docx VIP
- 食品仓储安全保障措施.docx VIP
- 辽宁省抚顺市新抚区2024-2025学年八年级上学期10月月考语文试题.docx VIP
- 2025至2030中国桶装水行业调研及市场前景预测评估报告.docx
文档评论(0)