编程珠玑第三部分随笔——十一至十五章

第三部分是《编程珠玑》的精华,对于这块内容我建议是边读边结合实际。最好是在项目中用到了作者给出的方法,这样的理解会更加深入。我在这一部分统一做一个简单的总结,恰好很多内容曾经遇到过,不论是在项目中还是编程竞赛中。作者给出了很多经典的解决方案看起来似曾相识,这也说明了好的方法渊远流长,可能以前有人拜读过此书,并且把解决方案早早应用在了自己的项目之中。

Read More

编程珠玑第十章探讨

这一章的内容很贴近实际。一方面我们的确要面对现实,不可能永远都有充足的存储空间;另一方面,数据空间的压缩有时不是只有单一的含义,这里的数据可能指代状态空间的总数,也就是说,此时对于数据空间的优化,是与时间挂钩的。不过,更常见的情景依旧是时间换空间,空间换时间。鱼和熊掌不可得兼,考虑哪个更加重要进而作出优化的判断。

Read More

编程珠玑第九章探讨

本章的内容让我想到了去年参加超算大赛的经历。当时所做的诸多事务中有一环就是代码调优,列举一下调优的经过大概就是:分析代码,找到热点,重构函数,调优参数。在这一章中,热点的寻找和重构函数都有提及,因为是一篇介绍性质的文章所以没有说明怎样调优一个系统。不过书中对于最基础的调优的介绍已经充分了,而且在更多的情况下,代码调优也差不多就是指代这些。

Read More

树莓派上手记录

Raspberry - Flash 播放器支持

这些天上手了 Raspberry Pi 2 Model B,非常mini跟一张信用卡差不多大,适合学习Linux和做一些好玩的玩意儿。考虑到是ARM架构的设备,必然很多应用是用不了的。它非常吸引我的有两点,一是支持 PythonWin10 ,二是居然有树莓派版本的 Minecraft 。除了以上这些,因为树莓派本身很小巧,可以做很多玩具,比如遥控车之类的,作为一个开发工具也是一种选择。

Read More

海外留学申请计划

新春第一更。海外留学申请是一项系统工程,知己知彼,百战不殆。利用互联网做充分调查是必要的。比如国外大学的基本要求和申请流程等等。还需要通过一些早年申请者的结果来判断申请难易程度,正确的判断对于战略战术准备很有帮助,错误的判断可能导致最终全军覆没。

申请方式:DIY

Read More

编程珠玑第八章探讨

这一章节给出的问题让人从直觉上判断就是动态规划。不过,本章的分治算法也非常的巧妙,他们的优势都是避免了一些重复计算。动态规划本质也就是对于穷举法的优化。作者在指出这些算法时,由简单到困难的描述了复杂的算法有时能让效率大幅提高。对于O(n^2)的暴力来说,O(nlogn)的分治算法的确印证了这一点。但是O(n)的动态规划却不算复杂,相反,比起暴力他还来的简单些。而除了这道特定的题目以外,其他凡是用到DP的地方都能够反映出动态规划的简洁美,不失为一种优美且高效精巧的解决方案。

Read More

再谈计算机的无上心法

以前说过这个话题,现在看看当时真是肤浅了,首先这个问题挺空的,而且只有当时所诉说的技能很难称之为计算机的无上心法。单说代码实现的无上心法都差强人意,这里面需要的能力不仅仅是抽象,还包括设计。而设计恰恰又是很容易被忽略的,怎样定义一个好的设计我觉得这是因需求和领域而异的。参考艺术界,不同时代所流行的元素和主义在变化,比如最近备受推崇的极简主义。

Read More

编程珠玑第七章探讨

本书的粗略估计看起来肤浅实则非常重要,有些问题不是估着玩的,比如桥梁设计时。本书举出的估计内存的例子,结构体是有对齐的,这样简单的估计是会失准的。还有类似「舍9法」「72法则」「Little定律」这些小技巧,在「安全系数」这一节中,我想起了以前我的做法:比如写线段树的时候,因为写的是静态存储结构的,所以我用结点数乘以四来开辟数组空间,而不是用一个恰好精确的值。

Read More

编程珠玑第六章探讨

这一章的内容刚好让我联想到以前参加过的超算大赛,优化是一个需要从理论层面直到硬件层面多个角度同时考虑的系统工程。作者也提到了设计层面的问题,有时候一个好的设计恰恰能避免很多问题,譬如说遇到一个问题,你看了一眼就开始写DFS,其实那个问题有规律可循,最终可以得到一条优雅的通项公式。

Read More

编程珠玑第五章探讨

本章着重谈论一些小事,测试、调试、计时。说是小事其实也是大事,想想自己曾经为调试一个程序而彻夜难眠的经历吧。这里面又有断言大法的叙述,「在测试时使用断言,而在产品发布时把断言关闭的程序员,就像是岸上操练时穿着救生衣,而下海时将救生衣脱下的水手」。在计时部分,作者展现了老练的洞察力,不过缓存溢出这种错误现在可能少见多了。

Read More