《编程珠玑》心得

6 篇文章 0 订阅
5 篇文章 0 订阅

每月一本,老规矩,还是先谈总体感受,这是一本将优化进行到底的书,经典之中的经典,对算法有很强的启迪性,面试大公司的必读书籍之一,总之就是不错。还是分别讲要点吧

第一章:千万级大数据排序问题引出位图算法(其中提到了快速排序,由于内存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,综述一下,本书关注三个问题,算法、数据结构、程序性能优化,其中作者提的比较多的就是二分搜索,还有各种程序优化思路,这才是宗旨,对菜鸟比较新的就是分冶思路和位图算法,需要多注意使用调试手段,比如监控函数性能,比如计时、统计的工具,谢谢




           


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值