《编程珠玑》心得
2015-04-11 01:30
183 查看
每月一本,老规矩,还是先谈总体感受,这是一本将优化进行到底的书,经典之中的经典,对算法有很强的启迪性,面试大公司的必读书籍之一,总之就是不错。还是分别讲要点吧
第一章:千万级大数据排序问题引出位图算法(其中提到了快速排序,由于内存1MB限制,需要输入40次),分三个阶段,将位图所在数组全部中置0,将所有数据导入一遍,然后遍历数组,将为1的数据输出
第二章:
1、40亿数据找出不在的数据(足够内存显然是位图算法),但只有几百字节内存的情况下找一个数,用二分搜索,先将最高位为0的找到分到一个文件里面去,再将最高位为1的找到,分到一个文件里面去,只是缺失了一个整数,所以必然只有一个文件不满,下面就只剩N/2个数排除了,总复杂度nlog2N
2、N元一维向量左旋转i位置,比如abcdefg变成cdefgab,只有数十个大小额外的存储空间,这个简单,分别求逆之后再整体求逆即可
3、寻找变位词,就是先按照字母顺序排列,然后逐一左旋,其中有一个垂直翻手的机会,就是翻转对调,abc换成cba
第三章:信函式编程思想,将重复的代码for循环化
第四章:编写正确程序的经验。程序验证思想
其中断言,Assert程序条件为真的时候正常运行,断言assert 是仅在Debug版本起作用的宏
第五章:程序脚手架(用户界面):计时、自动测试程序
第六章:程序优化,算法调优,数据结构重组,代码调优,硬件
第七章:初略估算,little定律,系统物体的平均数量=物体离开的平均速率×每个物体在系统中停留的平均时间
第八章:算法设计
问题,连续数的最大和
解法1:穷举,最大穷举,外面两个循环代表0-n,sum[i+j]
解法2:两个平方算法:第一个循环0-n,第二个循环i-n,累加
解法3:分冶算法,左右最大及现有最大相比,这样分成各个部分
解法4:扫描算法,在一重循环内,使用两个大小比较,比较所积累到向量和零比较,大于零继续积累,否则放弃从新从零开始
第九章:条码优化过程(注意度量工具及版本备份,监控函数调用及性能工具)
1、减法替代取模,速度提高一倍
2、宏和内联代码替换函数,再提高一倍
3、近似计算,代替复杂的平你及取方根值运算
第10、11、12、13、14章,排序, 取样、搜索、堆
实际都是数据和算法的问题
其中排序方法:
冒泡排序,直接排序,插入排序,堆排序,快速排序,归并排序
第十五章节 字符串
其实字符串是个大问题之一,光字符串的比较问题就能搞出一大堆事情
ok,综述一下,本书关注三个问题,算法、数据结构、程序性能优化,其中作者提的比较多的就是二分搜索,还有各种程序优化思路,这才是宗旨,对菜鸟比较新的就是分冶思路和位图算法,需要多注意使用调试手段,比如监控函数性能,比如计时、统计的工具,谢谢
第一章:千万级大数据排序问题引出位图算法(其中提到了快速排序,由于内存1MB限制,需要输入40次),分三个阶段,将位图所在数组全部中置0,将所有数据导入一遍,然后遍历数组,将为1的数据输出
第二章:
1、40亿数据找出不在的数据(足够内存显然是位图算法),但只有几百字节内存的情况下找一个数,用二分搜索,先将最高位为0的找到分到一个文件里面去,再将最高位为1的找到,分到一个文件里面去,只是缺失了一个整数,所以必然只有一个文件不满,下面就只剩N/2个数排除了,总复杂度nlog2N
2、N元一维向量左旋转i位置,比如abcdefg变成cdefgab,只有数十个大小额外的存储空间,这个简单,分别求逆之后再整体求逆即可
3、寻找变位词,就是先按照字母顺序排列,然后逐一左旋,其中有一个垂直翻手的机会,就是翻转对调,abc换成cba
第三章:信函式编程思想,将重复的代码for循环化
第四章:编写正确程序的经验。程序验证思想
其中断言,Assert程序条件为真的时候正常运行,断言assert 是仅在Debug版本起作用的宏
第五章:程序脚手架(用户界面):计时、自动测试程序
第六章:程序优化,算法调优,数据结构重组,代码调优,硬件
第七章:初略估算,little定律,系统物体的平均数量=物体离开的平均速率×每个物体在系统中停留的平均时间
第八章:算法设计
问题,连续数的最大和
解法1:穷举,最大穷举,外面两个循环代表0-n,sum[i+j]
解法2:两个平方算法:第一个循环0-n,第二个循环i-n,累加
解法3:分冶算法,左右最大及现有最大相比,这样分成各个部分
解法4:扫描算法,在一重循环内,使用两个大小比较,比较所积累到向量和零比较,大于零继续积累,否则放弃从新从零开始
第九章:条码优化过程(注意度量工具及版本备份,监控函数调用及性能工具)
1、减法替代取模,速度提高一倍
2、宏和内联代码替换函数,再提高一倍
3、近似计算,代替复杂的平你及取方根值运算
第10、11、12、13、14章,排序, 取样、搜索、堆
实际都是数据和算法的问题
其中排序方法:
冒泡排序,直接排序,插入排序,堆排序,快速排序,归并排序
第十五章节 字符串
其实字符串是个大问题之一,光字符串的比较问题就能搞出一大堆事情
ok,综述一下,本书关注三个问题,算法、数据结构、程序性能优化,其中作者提的比较多的就是二分搜索,还有各种程序优化思路,这才是宗旨,对菜鸟比较新的就是分冶思路和位图算法,需要多注意使用调试手段,比如监控函数性能,比如计时、统计的工具,谢谢
相关文章推荐
- SAP 顾问心得 (转自 SAP 人才社区群共享:68106787)
- 在美做开发多年,写给国内apple开发新手的一些心得(转)
- Android开发心得-多线程处理初步
- “什么黑白”上线 APP STORE后的心得(模仿别踩白块、钢琴2)
- 关于10月17日#6的五道数据结构题的心得与感悟
- 学习angularjs的总结与心得-hide/show
- 心得丨程序员们,AI来了,机会来了,危机也来了,我们该咋办?
- LCD & framebuffer开发心得(转)
- 创业思考学习心得 推荐
- VC++6.0MFC编程心得
- 看板游戏的心得总结
- iOS开发心得记录1
- 【管理心得之六十四】非官场人士,如何选择“站队” ---- 培 陪 赔
- Python学习心得
- 【转】顶级程序员的心得–Coders at Work
- java邮件开发--心得1-入门1
- JSP学习心得
- ReactJs 使用心得
- 一个清华学子写的关于directshow的学习心得