![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程珠玑
我叫龙傲天
相信微末的力量
展开
-
《编程珠玑》学习记录第八章算法设计技术
算法的设计这个问题太过庞大,对于一个程序员来说,最好的办法就是多接触不同的算法,并且时刻总结。 问题:一个一维的整数数组,有N个元素,元素有正数也有负数。找到数组中任意连续个元素最大和。 分析:其实这是一个典型的动态规划问题,但是书中给了好几种方法,虽然有些方法不是最优的,但是分析问题的过程是很值得借鉴的。 方法一:使用暴力法找到所有的子序列,并计算出所有子序列的和,结果自然就得到了。这种方法的事件复杂度是O(n*n) vector<int> testArray = {31, -41,原创 2020-09-21 21:18:57 · 250 阅读 · 0 评论 -
《编程珠玑》学习记录第三章数据决定程序的结构
这章讲的是数据结构对程序的影响: 使得程序代码简洁、已读。毕竟程序是给人看的,所以能被人看懂,才是代码的首要任务。 提高效率。不仅是代码的运行效率,还有代码的维护效率。 习题1:税收问题。题目中使用if-else的分支语句的缺点有两点: 代码太长,需要大概500行代码左右才能完成功能,也不利于之后的代码更新。 代码从上到下执行,是一个顺序查找的过程,效率太低。 问题分析:分段的税收问题。这个问题可以有两种方法进行处理: 递推公式法。很容易就可以得到分段税收的递推公式,但是对于一次税收结果的计算时间原创 2020-09-12 16:19:26 · 188 阅读 · 1 评论 -
《编程珠玑》学习记录第二章算法
本章通过三个小问题来引出算法这个概念。文中提出,有时候埋头苦干之前,如果能够静下心来找到一个合适的算法,将会事半功倍。但是埋头苦干和冷静思考的时机是一门大学问。 问题A:文件中包含最多40亿个随机排列的32位正整数,找出一个不在文件中的32位正整数。 分析:对于32位的正整数最大在42亿多,所以在只包含40亿的文件中一定会有一些正整数不包含在文件中。由于文件太大,很难将所有的数都吃进内存。 答案:二分查找的思想。第一步:遍历整个文件,对于每一个数进行判断,如果这个数的二进制第一位为1,将这个数存入文件原创 2020-09-09 09:58:46 · 181 阅读 · 0 评论 -
《编程珠玑》学习记录第一章开篇
开篇提出了一个排序问题 问题描述:在一个磁盘文件中存在10000000左右个正整数,不存在重复元素,每个数在区间[1, 10000000]中。 输出:将这些整数升序排列,并存到一个磁盘文件里。 约束:大约有1M的内存空间可用,运行时间在10秒左右。 分析:对于1千万左右的数字,我们至少要用4个字节来存储。如果同时将1千万个这样的数字读入内存,大约需要38M左右的内存, 这远远超过题目要求。这种情况下,需要对磁盘文件进行多趟的排序,这样的话代码会很复杂,而且很难满足时间要求。 解决方法:文中提出.原创 2020-09-03 20:14:29 · 114 阅读 · 0 评论