编程珠玑摘录

第一部分 基础

第1章 开篇

结构简单、部件很少、易于维护、非常坚固。

正确的问题,位图数据结构,多趟算法,时间-空间折中与双赢,简单的设计,程序设计的阶段。

 

第2章啊哈,算法

看起来很困难的问题也可以有一个简单的、意想不到的答案

 

第3章 数据决定程序结构

恰当的数据视图实际上决定了程序的结构

为什么程序员非要编写大程序呢?一个原因是他们缺少在2.5节中提到的重要的惰性。他们急于完成其最初的想法。在前面描述的两个问题中,有更深层次的原因:程序员在考虑问题时受到了语言的限制。

概念壁垒

能用小程序实现的,就不要编写大程序

程序员在节省空间方面无计可施时,将自己从代码中解脱出来,退回起点并集中心力研究数据,常常能有奇效。(数据的)表示形式是程序设计的根本。

 

第4章 编写正确的程序

二分搜索的挑战

提供充足的时间,竟然约有10%的专业程序员能够将这个小程序编写正确。

 

第5章 编程小事

程序员都是乐观主义者,他们总是试图走捷径:编写函数代码,并将其插入到系统中,然后热切地期望它能运行。

5行语句的C语言脚手架就可以完成该工作。

断言的艺术

在测试是使用断言,而在产品发布时将断言关闭的程序员,就像是在岸上操练时穿着救生衣,而下海时将救生衣脱下的水手。

最好的脚手架通常是最容易构建的脚手架。

无论系统的行为乍看起来多么神秘莫测,其背后总有合乎逻辑的解释。

IBM站着可以登录系统而坐着不能登录系统的轶事。有两个键的键帽被换了位置

 

第二部分 性能

一个简单而又功能强大的程序,令用户欣喜又不令开发者烦恼,这正是程序员的终极目标。

第6章 程序性能分析

算法和数据结构

算法调优

数据结构重组

代码调优

硬件

上面描述的所有改进累积起来就得到了总的加速系数400.

良好的问题定义可以避免用户对问题需求的过高估计。

计算机系统中最廉价、最快速且最可靠的无件是根本不存在的。

简单设计的重要性怎么强调都不过分。

 

第7章 粗略估算

粗略估算在工程院校中是标准课程,对多数从业工程师来说则是谋生的必备技能。

两个答案比一个答案好

快速检验

经验法则

实践

安全系数

Little定律队列中物体的平均数量为进入速率与平均停留时间的乘积

在进行粗略估算的时候,要切记爱因斯坦的名言:任何事都应尽量简单,但不宜过于简单。

 

第8章 算法设计技术

复杂深奥的算法有时可以极大地提高程序性能。

要解决规模为n的问题,可递归地解决两个规模近似为n/2的子问题,然后对它们的答案进行合并以得到整个问题的答案。

合适的算法设计可以极大地减少运行时间。

 

第9章 代码调优

由于太在乎细小的“优化”,他们编写出的程序过于精妙,难以维护。

代码调优的最重要的原理就是尽量少用它——效率的角色,度量工具,设计层面,双刃剑

 

第10章 节省空间

简单性可以衍生出功能性、健壮性以及速度和空间。

简单性还可以减少代码长度。

在真实系统中,快速的查找时间非常关键,一方面是为了满足用户交互的需求,另一方面是因为其他函数需要通过同一个界面来查找点。

不存储,重新计算。稀疏数据结构。数据压缩。分配策略。垃圾回收。

 

第三部分 应用

第11章 排序

使用库排序函数

快速排序接近最优算法

 

第12章 取样问题

小的计算机程序往往能够寓教于乐。

打破概念壁垒

正确理解所遇到的问题,提炼出抽象问题,考虑尽可能多的解法,实现一种解决方案,回顾。

 

第13章 搜索

库的作用。空间的重要性。代码调优方法。

 

第14章 堆

用堆来解决 排序 优先级队列

每个数据结构都可以从两方面来看,从外部来看,它的规范说明了它做什么——队列通过通过insert和extract操作来维护元素序列。从内部来看,它的实现说明了它如何做。

优先级队列的堆实现了两种顺序结构之间折中方案。

原理:正确性、抽象性、过程抽象、高效性、抽象数据类型。

 

第15章 字符串

如何生成随机文本?一种比较经典的方法是让一只可怜的猴子在旧打字机上敲击。

 

附录D 代码调优法则

空间换时间法则

时间换空间法则

循环法则

逻辑法则

过程法则

表达式法则

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值