- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法复杂度和问题求解
算法复杂度与问题求解 算法复杂度问题: 一般是指问题随规模的增长算法所需消耗的运算时间和内存空间的增长趋势。 因此不考虑计算机本身硬件的特质,一般也忽略算法所消耗的与问题规模无关的固定量的计算与空间。 如何描述增长趋势的高低? 不考虑不变量: C + f(n) ? f(n) 忽略不能与时俱进的因素 k * f(n) ? f(n) 区分同类型的增长方式的不同量级 f(n) = nk ? f(n) = nk+c 专注增长趋势中最本质的区别 C ? log n ? n ? nk ? kn (k 1) 算法复杂度的考察方法 考察一个算法的复杂度,一般考察的是当问题复杂度n的增加时,运算所需时间、空间代价f(n)的上下界。(Asymptotic upper or lower bound) 进一步而言,又分为最好情况、平均情况、最坏情况三种情况。通常最坏情况往往是我们最关注的。 算法复杂度的上界(大O表示法) 大O表示法是用一个函数f(n)来描写算法复杂度的上界的表示方式。记为:O(f(n)) 大Θ表示法 如果能同时找到算法复杂度的上下确界函数g(n),f(n)。 且g(n) = f(n),则算法复杂度能更精确的表达为Θ(f(n)) Bubble sort 算法复杂度的优化(fibonacci数列问题) 刚开始(零年)1对 一年后1对 二年后2对 三年后3对 … 今年的兔子对数 = 前年已经有的兔子总数 + 去年的兔子数 采用展开递推公式的方法 从fib(n)开始,自顶向下逐层展开。 直到fib(0) 或 fib(1)为止。 然后逐层计算上去。 递归算法的运算复杂度分析 T(n) = T(n-1) + T(n-2) +1 T(1) = T(0) = 1 使用双子星递归函数实现该算法: Fibonacci 数列的通项公式 Recursive powering(递归乘方法) Fibonacci 数列算法的优化 参考阅读:MIT教程第三讲 T(n) = O ( 1.618n) = O( n ) = O( logn ) 算法设计技术 贪心法:试图通过局部最优达到全局最优 分治法:划分成小问题,各个求解 回溯法:对多种可能性逐步试探,失败时回来选其它可能性 动态规划法:多路经的求解方式 分枝界限法:上下界+广度优先 算法与问题求解 问题: 为贫困地区儿童募捐: 10,000元。 解决方案: A:向遇到的每一个人尽可能的鼓动募捐,直到完成任务。 B:鼓动10个朋友,每人去… 募捐1000元。 鼓动10个朋友,每人去… 募捐100元… 鼓动10个朋友,每人捐10元。 分治算法要点: 要能够确定可以解决的 简单问题(base case) 要能够找到分解化简(recursive decomposition)问题的方法 例子2:求阶乘 设计递归算法的思考要点: Begin by checking for simple cases? Solved the simple cases correctly? Recursive decomposition make the problem easier? Can the process eventually reach the simple cases? 交通信号灯问题(贪心法) 问题求解分析(续) 从任意一个可通行线路开始,只要与该线路不冲突的线路都尽可能的归进一组。 节点表示通道,连线表示冲突 分析—分组 多种组合,如下是一种可能的组合(解): 绿 AB AC AD BA DC ED 蓝 BC BD EA 红 DA DB 紫 EB EC 两个问题: 如何表示节点集和边集?(数据结构) 如何实现分组?(算法) 算法的设计与实现 对集合和图的操作: 判断一个集合是否为空: issetempty(V1); 置一个集合为空: emptyset(NEW); 从集合中去掉一个元素: removefromset(V1,v); 向集合里增加一个元素: addtoset(NEW,v); 检查结点v与结点集合中各结点之间在图G中是 否有边连
您可能关注的文档
最近下载
- 国际商法 第四版 配套课件.ppt
- SYT 6270-2017 石油天然气钻采设备 固井、压裂管汇的使用与维护.docx VIP
- 2025年中考数学压轴训练:二次函数的图象与性质大题 (五大题型)教师版.pdf VIP
- 北大荒集团估值报告书.pdf
- 2025广东广州市黄埔职业技术学校招聘临聘教师4人考试备考试题及答案解析.docx VIP
- 估值报告书.PDF
- 2025年中考数学二轮压轴题型突破课件:含参数的二次函数问题-最值与取值范围问题.pptx VIP
- TCPIA 0112—2025《户用光伏发电系统全生命周期安全管理规范》.pdf
- 国家级生态农场申报表.docx VIP
- 住院病人健康教育技巧ppt课件.pptx VIP
文档评论(0)