这个专栏主要强调了写出正确无误的程序。
看了一个很有趣的故事:原来写出一个正确的二分搜索的算法是这么地难,作者曾经给一些专业的程序员布置了二分搜索的题目,允许他们选择自己的语言甚至高级的伪代码,而结果却是几乎所有的程序员(90%)交上的代码都有错误,只有不到10%的程序员能够准确无误地写出这个小程序。我也震惊了,当然下面一个小故事也很有趣:Knuth指出来二分搜索最开始是1946年被发表的,但是第一个发表出的没有bug的二分搜索直到1962年才出现。。
回到宿舍,我也尝试了一下用C++实现了一个二分搜索的小程序:
可惜的是,我倒不是算法出错了,倒是在其他一些小细节上犯错。。可见长时间不写代码真的真的会生疏啊!!!
其实呢,这段代码就是传说中的典型的错误的二分搜索的代码,出错的地方在于其中的整数溢出:mid = (low+high)/2;
low+high这里极易导致整数溢出,因此这句话最好写成这样: mid = low + (high-low)/2;
这个二分搜索还可以更一步的挖掘,一些思考在这里可以看到。
文章的后来主要是在强调断言(assertion)和程序的verification。
断言也是个好东西,因为它可以保证你在程序出错时能够理解代码同时不会陷入那种消极的状态:即只要不断地修改代码直至运行为止(understand the code at all times, and resist those foul urges to “just change it until it works”)。
全文完。EOF
/* 原创文章,本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: Swarm’s Blog*/
0 Comments.