编程珠玑笔记八算法设计技术.docx

编程珠玑笔记八算法设计技术.docx

ID:59246348

大小:138.27 KB

页数:2页

时间:2020-09-08

编程珠玑笔记八算法设计技术.docx_第1页
编程珠玑笔记八算法设计技术.docx_第2页
资源描述:

《编程珠玑笔记八算法设计技术.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、8、编程珠玑笔记八算法设计技术本篇名言:“成大事不在于力量多少,而在能坚持多久。”算法上的灵机一动可以让程序更加简单。本章作者剑走偏锋,算法一个戏剧性贡献:复杂深奥的算法有时可以极大的提高程序性能。我们先来看下问题,如下图1:就是求任何连续子向量中的最大和。程序实现比较简单,但是简单程序可能很低效。伪代码如下,有3层循环,称为立方算法,标记为算法1。稍作修改就可以变成平方算法,标记为算法2。作者进一步进行分析。分治算法,标记为算法3:要解决规模为N的问题,可递归解决两个规模近似为N/2的子问题,然后对它们的答

2、案进行合并已得到整个问题的答案。该问题的算法3是将数组分成左右两边,那么左边得到最大向量,右边也得到最大子向量,那么最大子项量要么是左边,要么是右边,也有可能是跨越左右的子项量。当然跨越左右的子项量稍微负载一点(左边右边界最大子项量和右边左边界最大子项量的和及是)。这样复杂度变成了0(nlogn)继续,深入得到算法四一个完全线性的算法,标记为算法4。即扫描算法:从数组最左端元素x[0]开始扫描,一直到最右端元素x[i-1]为止,记下所遇到的最大总和子向量。这样运行时间为O(n).最后让蛤蟆惊讶的是,作者居然拿

3、出了古董机器来计算算法四,用比较高端的机器来计算算法1.古董计算性能比那个小机慢了整整3300万倍,但是也不能阻挡线性计算的后来居上。这个问题看似漫不经心的,其实大有来头,最早是布朗大学的Grenander同学在1977年处理模式匹配时候搞出了算法1,自己又开发了算法2。后来告诉了另一个同学Shamos,便开发了算法三。最后Shamos感觉天下无敌的时候去参加研讨会,现在统计学家Kadane居然在一分钟之内勾勒出了算法4.最后作者给出了几个重要的算法设计技术。保存状态,避免重复计算。算法2和算法4都进行保存中

4、间结果。将信息预处理至数据结构中。分治、扫描等算法。只有经过广泛的研究和实践,才能熟练地运用算法设计技术;但是大多数程序员仅仅是从有关算法的课程或教科书中获得这些知识的。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。