- 1、本文档共97页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信息学奥赛基本算法I
第0讲:算法设计概论 时间复杂度 空间复杂度 调试方法与技巧 时间复杂度 O(1)常数阶 O(log N)对数阶 O(N)线性阶 O(N^2)平方阶 O(N^3)立方阶 …………………… 空间复杂度 O(1)常数阶 O(log N)对数阶 O(N)线性阶 O(N^2)平方阶 O(N^3)立方阶 …………………… 调试方法与技巧 Break Point Watch Table Data Check Code 问题分析 分析题目的模型 考虑要用的算法 分析算法的时空复杂度 如果符合要求即可 Coding 第一讲:递归 什么是递归? 递归就是指一个函数直接或者间接地调用自身。 问题的求解过程?划分成相同性质的子问题的求解,而小问题的求解过程可以很容易的求出,这些子问题的解就构成里原问题的解。 总体思想 待求解问题的解?输入变量x的函数f(x) 通过寻找函数g( ),使得f(x) = g(f(x-1)) 且已知f(0)的值,就可以通过f(0)和g( )求出f(x)值 推广 扩展到多个输入变量x,y,z等,x-1也可以推广到 x - x1,只要递归朝着“出口”的方向即可 递归的三个要点 递归式:如何划分子问题 递归边界:递归的终止条件,也就是最小的子问题 界函数:问题规模变化的函数,保证递归向边界靠拢 求n! #include iostream.h int F(int n) { if (n == 0) return 1; else return n * F(n - 1); } 栈 递归的实现是需要栈的,这里所使用的栈是系统自带的栈 栈是一种数据结构,它符合先入后出的原则 解决递归问题的关键 找出递推公式:即如何将问题划分为小规模的问题 找到边界条件 NOTICE:由于函数中的局部变量是存在系统的栈上的,如果你的局部变量过大,如较大的数组,将有可能栈溢出,这个时候要考虑全局变量和人工栈的使用。 汉诺塔问题 现在有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动,并输出步骤。 汉诺塔问题 void hanoi(int n,char A,char B,char C) { if(n==1) { printf(Move disk %d from %c to %c\n,n,A,C); } else { hanoi(n-1,A,C,B); printf(Move disk %d from %c to %c\n,n,A,C); hanoi(n-1,B,A,C); } } 前序中序求后序 树中已知先序和中序求后序。 如先序为:abdc,中序为:bdac . 则程序可以求出后序为:dbca 。 前序中序求后序 算法思想:先序遍历树的规则为中左右,则说明第一个元素必为树的根节点,比如上例中的a就为根节点,由于中序遍历为:左中右,再根据根节点a,我们就可以知道,左子树包含元素为:db,右子树包含元素:c,再把后序进行分解为db和c(根被消去了),然后递归的进行左子树的求解(左子树的中序为:db,后序为:db),递归的进行右子树的求解(即右子树的中序为:c,后序为:c)。如此递归到没有左右子树为止。 前序中序求后序 void pronum(char pre[],int pre_s,int pre_e,char in[],int in_s,int in_e) { char c; int k; if(in_sin_e) return ; /* 非法子树,完成。 */ if(in_s==in_e){printf(%c,in[in_s]); /* 子树子仅为一个节点时直接输出并完成。 */ return ; } c=pre[pre_s]; /* c储存根节点。 */ k=find(c,in,in_s,in_e); /* 在中序中找出根节点的位置。 */ pronum(pre,pre_s+1,pre_s+k-in_s,in,in_s,k-1); /* 递归求解分割的左子树。 */ pronum(pre,pre_s+k-in_s+1,pre_e,in,k+1,in_e); /* 递归求解分割的右子树。 */ printf(%c,c); /
您可能关注的文档
- 作业:论文提纲并文献阅读摘要(格式示例)I.ppt
- 低年级看图写话有范文I.ppt
- 低能耗居住建筑设计I.pptx
- 作图示各杆的扭矩图I.ppt
- 作文 层进式结构课件I.ppt
- 作文5关于人物的语言描写I.ppt
- 体育卫生与运动环境卫生.I.ppt
- 作文--人物的细节描写I.ppt
- 作文中的细节描写I.ppt
- 低段识字黎静改课件I.ppt
- 城市公共文化设施在促进社会公平正义中的作用探讨教学研究课题报告.docx
- 金融科技在金融风险管理中的市场风险防范策略研究教学研究课题报告.docx
- 增强现实与人工智能在小学科学课堂中的个性化教学效果研究教学研究课题报告.docx
- 人工智能技术在校园智能学习环境自适应调整中的应用与教育改革趋势教学研究课题报告.docx
- 《生态农业模式下的农业生态系统碳汇功能评估与碳减排潜力分析》教学研究课题报告.docx
- 合规性与风险管理实践培训.pptx
- 《艺术市场与艺术批评互动中的艺术投资策略研究》教学研究课题报告.docx
- 2025年文化自信心系未来班会.pptx
- 《区域金融生态环境与实体经济协同发展模式实证分析》教学研究课题报告.docx
- 老旧小区楼梯加装智能助力扶手对社区环境与居住安全的影响教学研究课题报告.docx
文档评论(0)