编程珠玑 读书笔记

6.程序性能分析

1.系统设计层面

1. 问题定义:良好的问题定义可以避免用户对问题需求的过高估计(越小的需求意味着越小的开发代价)
2. 系统结构:将系统分解成模块,对各模块进行粗略估算(性能分析)
3. 算法和数据结构:挑选合适的算法与DS
4. 代码调优:profiler,对关键部分进行改写
5. 系统软件:改变系统所基于的软件————数据库、操作系统、编译器优化等
6. 硬件

2.性能提升原则:

1. 仅需较小的加速--从效果最佳的层面做改进
2. 需较大的加速--从多个层面做改进

3.程序性能的度量方向

- 运行时效率
- 容错性
- 可靠性
- 安全性
- 开销
- 开销/性能
- 精度
- 对用户错误的健壮性/鲁棒性

7.粗略估算

1.基本技巧

1. 两个答案总比一个好:可用两种方式计算,相互验证
2. 快速检验:量纲检验,经验检验(结果符合常识)
3. 72法则

2.凡事都应该尽量简单,但不宜过于简单

8.算法设计技术

1.几个重要的算法设计技术:

1. 保存状态,避免重复计算
2. 将信息预处理存储于数据结构中
3. 分治算法:要解决规模为n的问题,可递归的解决规模两个规模近似为n/2的子问题,然后对他们的解答进行合并
4. 扫描算法:能否利用x[n-1],解决x[n]的问题
5. 累加数组:累加表
6. 确定问题的下界:优化极限

9.代码调优

1.如果程序的主要精力花在输入输出上,那么对程序中的计算进行加速是毫无意义的。在现代的体系结构中,如果对内存的访问占用了大量的运行时间,那么减少计算时间同样毫无意义。

2.代码调优的原理

1. 效率很重要,但不能危及程序的正确性、功能性以及可维护性
2. 度量工具:当效率很重要时,第一步就是对系统进行性能监控,以确定其运行时间的分布状况,确定性能瓶颈
3. 设计层面:效率问题可以从多个层面来解决。只有在确定无更好的解决方案时才选择代码调优
4. 代码调优是把双刃剑,某些情况下你调优的代码在另一种情况下的运行速度可能会更慢。

10.节省空间

1.数据空间技术:减少各种程序所需数据的存储空间的技术

- 不存储,重新计算:生成器
- 稀疏数据结构
- 数据压缩
- 分配策略:动态分配、可变长记录
- 垃圾回收

2.代码空间技术

- 函数定义
- 解释程序
- 翻译成机器语言

算法分类

1.排序

  1. 插入排序
  2. 快速排序
  3. 堆排序
  4. 希尔排序
  5. 选择排序
  6. 归并排序

2.搜索

  1. 顺序搜索
  2. 二分搜索
  3. 散列
  4. 二分搜索数

代码调优法则

1.空间换时间法则

  • 修改数据结构
  • 存储预先计算好的结果
  • 高速缓存
  • 懒惰求值:除非需要,否则不对任何一项求值

2.时间换空间法则

  • 堆积:密集存储表示可通过增加存储和检索数据所需要的时间来减少存储开销
  • 解释程序

3.循环法则

  • 将代码移出循环:每次都要使用的值可预先在循环外计算好
  • 合并测试条件:高效的内循环应该包含尽量少的测试条件,最好只有一个。如哨兵:在数据结构的边界防止一个哨兵以减少测试是否已结束的开销
  • 循环展开:
  • 删除赋值
  • 消除条件分支
  • 循环合并:

4.逻辑法则

5.过程法则

6.表达式法法则

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值