——《编程珠玑》读后感
因为时间原因,现在只读了书的前四章以及关于代码优化的第九章,虽然感觉因为语言文化的差异或者翻译的问题,行文感觉十分别扭,但是仍是收益良多。
开篇提出的问题的解决方式令人印象深刻,巧妙地利用位图的方式解决了一个电话号码的排序问题,并且大大降低了时间与空间复杂度。其实引人深思的不仅是这样一种算法,而是文中告诫大家,我们不应当看到问题的第一时间就在脑中搜索我们学习的相关知识,这样很容易搜寻到不是最适合此问题的解决办法。作者在获取更多关于问题的信息后,得到了这个问题数据独有的特征,数据大小在0到10000000之间,不会重复,内存有限,至多1M左右,运行时间在1min以内,在提取出这样的特征之后,想到位图的数据结构几乎是顺理成章了。这也告诫我们,碰到问题之后,我们应当花更多的时间去了解问题。
第二章则又提出了三个问题,提到了二分查找的广泛应用,打破了对二分查找的狭隘理解,以及一种旋转矢量的巧妙算法(感觉用到了数论的一些知识)。感觉最巧妙的还是对与查找字典中所有变形词集的巧妙解法,其采用利用签名归类的方法,然后对签名进行排序,我之前从来没有遇到过,感觉十分新奇。
第三章讲了一些数据结构的技巧,展现了其在简化代码上的重要作用,主要展示了数组在数据统计的应用,但是这一章大部分感觉读来不是很通顺,不知道是不是翻译的原因。
第四章再次讨论了二分查找,这无疑是我看的最开心的一章,特别是读到一个测试中,半小时内只有10%的程序员写出了对大部分数据可以使用的二分查找算法,而且算法的提出是在1946年,但是第一个没有bug的二分查找算法在1962年才出现。不由让我想起在学习数据结构时,我曾经尝试编写二分查找却花费了比我预想的多的多的时间,这么看来,自己并没有自己想的那么挫。
第九章讲了代码优化的许多小技巧,其中一个例子十分有意思,研究基因与全球位置的关系时候,将经纬度更换为xyz坐标,这样有关三角函数的运算都转化为了加减法,运算量大大降低并且举了循环展开的例子,对简单函数用宏定义方法替代等技巧。
总体感觉还是比较有意思的,但是语言风格真的不是很适合国人,下周应该不会看下去了。