2011 年 04 月 14 日
by admin
接下来三个专栏都是围绕如何提升性能来讲的。
这个专栏讲了几个方面:系统结构(System Structure),算法和数据结构(Algorithms and Data Structures),代码调优(Code Tuning),系统软件(System Software),硬件(Hardware)。并给出了一个建议:如果只想加速一点,在最佳的层次优化;如果想要很大的性能优化,那就从很多个层次入手。(If you need a little speedup, work at the best level. If you need a big speedup, work at many lev[......]
Read more
读书笔记
2011 年 04 月 12 日
by admin
这个专栏继续深入讲解了assertion,同时也强调了Scaffolding的重要性。
实在也没什么好说的了,不过专栏最后关于Debug的一个小故事倒是挺有意思:讲的是IBM的Yorktown Heights研究中的一段轶事,有一个程序员刚刚装了一个新的工作站,当他坐着的时候所有的一切都正常,但是他站着的时候就不能登录到系统中去。而且这种行为可以百分百地重复:他总是坐着的能够登陆,站着的时候从来不能。
大多数人对于这个故事只有惊叹奇异的份了:“工作站到底是怎么知道这个家伙到底是坐着还是站着呢。。”一个好的debugger,却知道这其中一定有某种原因。最先想到的假设应该是电路的问题,[......]
Read more
读书笔记
2011 年 04 月 11 日
by admin
这个专栏主要强调了写出正确无误的程序。
看了一个很有趣的故事:原来写出一个正确的二分搜索的算法是这么地难,作者曾经给一些专业的程序员布置了二分搜索的题目,允许他们选择自己的语言甚至高级的伪代码,而结果却是几乎所有的程序员(90%)交上的代码都有错误,只有不到10%的程序员能够准确无误地写出这个小程序。我也震惊了,当然下面一个小故事也很有趣:Knuth指出来二分搜索最开始是1946年被发表的,但是第一个发表出的没有bug的二分搜索直到1962年才出现。。
回到宿舍,我也尝试了一下用C++实现了一个二分搜索的小程序:
可惜的是,我倒不是算法出错了,倒是在其他一[......]
Read more
读书笔记
2011 年 04 月 10 日
by admin
这个专栏顾名思义,着重讲了数据的结构化对程序的重要性。
开头就讲了一个很浅显的例子如下:
很显然应该用数组重新考虑这个问题。
另一个例子是Form-Letter Programming,一种常见的初级的输出语句可能如下所示:
这种方式不用动脑筋但是看起来很罗嗦,而且不够灵活。
如果要写出更加优雅的代码,首先要依赖于一个如下所示的form letter schema:
Welcome back,$1
We hope that you and all the members
of the $0 family are con[......]
Read more
读书笔记
2011 年 04 月 09 日
by admin
算法是一个程序员的基本功,在面对一个问题的时候,如果用常规的思维来思考,往往只能得到一个中规中矩甚至效率十分低下的解法。这个时候如果稍加思考,或者think out the box,就会灵光乍现,得到算法的aha! insights,想出十分巧妙的解法。这个专栏主要讲的就是思考后得到的aha! algorithms(巧妙的算法)。Martin Gardner说过:“A problem that seems difficult may have a simple,unexpected solution”。
提出了三个问题:
1. 有一个文件包含有至多40亿个32位整数,找出一个文件中[......]
Read more
读书笔记