本书封皮如下:
摘抄如下:
P23:表单字母模式
在通常情况下,用户的信息都是来自于数据库中的固定字段,程序通过读取这些字段与写死的表单项进行拼接构成完整的数据输出。使用表单字母模式的表单字母生成器能解决不少问题。
welcome back, $1!
we hope that you and all the members
of the $0 family are constantly
reminding your neighbours there
on $5 to shop with us.
As usual, we will ship your order to
$3 $1 $2. $0
$4 $5
$6, $7 $8
..
表示法$i表示记录中的第i个字段,解释该程序如下,自动填充数据
read fields from database loop from start to end of schema c=next character in schema if c!-'$' printchar c else c=next character in schema case c of '$': printchar '$' '0'-'9': printchar field[c] default: error("bad schema")
p28:数据结构原则
1、将重复性代码改写到数组中。使用最简单的数据结构【数组】来表示一段冗长的相类似的代码往往能达到最佳效果
2、封装复杂的结构。当你需要一个复杂的数据结构时,使用抽象的术语对它进行定义,并将那些操作表示成一个类
3、尽可能的使用高级工具。超文本,名称-值对,电子表格,数据库,语言以及类似的工具
4、让数据去构造程序。使用适当的数据结构去替换复杂的代码,这可以使数据起到构造某个程序的效果
p64:72法则
假定你投入了一笔钱,时间是y年,利率是每年r%。该规则在财务上的描述就是:如果y*r=72,那么大致来说你投入的钱就会翻番的。
72法则对于估计指数过程增长来说非常便利,如果盘子里的细菌每小时增长率是3%,那么每天它的量会翻倍
假设一个指数程序花了10秒钟来解决一个规模为n=40的问题,并且n增加1的话就增加12%的运行时间,72法则告诉我们,n每增加6,运行时间将翻倍
p68:利特尔法则
系统中物体的平均数量就是系统中物体离开系统的平均比率和每个物体在系统中所花费的平均时间的乘积。
例如这个地方可以容纳60个人,平均来说进入的人们会在里头待上大约三个小时,所以进入率大约是每小时20个人,队列上已经排了20个人了,所以我们还需要等一个小时。即队列中的平均物体数量是进入率和平均滞留时间之乘积。
p76:求最大和的扫描算法
问题:输入是一个具有n个浮点数字的向量x,其输出是在输入后任何相邻子向量中找出的最大和。
分析:从最左端开始,一直扫描到最右端,记下所碰到过的最大总和子向量,最大值最初为0,假设我们已经解决了针对x[0..i-1]的问题,我们使用类似分治算法中的道理:前i个元素中,最大总和子数组要么包含在i-1个元素中,要么截止到位置i
算法如下:
maxsofar=0 maxendinghere=0 for i=[0,n) maxendinghere =max(maxendinghere+x[i], 0) maxsofar=max(maxsofar,maxendinghere)
在循环的第一个赋值语句前,maxendinghere包含了截止于位置i-1的最大子向量的值,赋值语句修改过它以包含截止于位置i的最大子向量的值。只要这样做能够保持其为正值,当它为负值时,就将它重新设置为0.
p79:算法设计技术
1、保存状态,避免重新计算
2、将信息预处理到数据结构中
3、分治算法
4、扫描算法
5、累积
6、下限
以上就是这本书一些摘抄,每一章后面的问题确实很不错,如果时间充足真应该每一道都做一做。当然,如果想通过这本书学会算法或者数据结构还是不够的,这些短小的文章更像是一种开胃菜,但却能发人深思。