开学后复习的第一门课程是C语言,选择翻看这本经典的《c programming language 》。目前看到第三章3.3。书中介绍了两种用C语言实现的折半查找法。看到第一个算法的时候自己感觉很容易理解,随即向后看去,后面的一道习题,让用另外的一种策略来实现改进现有的折半查找,要求只用一次判断来实现,实验比较一下这两个算法的执行效率上是否存在差异。此时心想着这一定是一个比前面那个更高明的算法,于是乎,兴奋的去翻看了答案,看着答案的实现感觉理解起来还行,代码比原有的长,比原来的逻辑复杂。心想着,这就是高明的算法的啊。谁知道后面的解析对答案的评价是:“两种方案的执行时间几乎没有什么差异。我们并没有得到多大的性能改进,反而失掉了代码可读性。教材原有的代码更容易阅读和理解”。
看到这句话后,立马有一种被欺骗的感觉,我上当了。可仔细想想,这难道不是因为我自己的意识在作怪吗。自己干嘛不亲自将两种代码都做做实验呢。做个test,看看两种方法的执行时间的话,也许自己会确定自己的答案。永远不要跟着自己的习惯走,让自己认为答案永远都是好的。有时候自己动动手,会有更大的收获。自己最近想的太多了,可是动手的时间少了。平衡一下自己的实践和理论学习也是必须的。
下面我把两段代码都写出来共大家参考,也算是一次练手的机会吧。
int binsearch(int x ,int v[],int n) { int low ,high,mid; low =0 ; high=n-1; while(low<=high) { mid = (low+high)/2; if(xv[mid]) low=mid+1; else return mid; } return -1; }
int binsearch(int x ,int v[],int n ) { int low ,high ,mid; low = 0 ; high = n-1; mid = (low+high)/2; while(low< =high&&x!=v[mid]) { if(x<v[mid]) high=mid+1; else low = mid-1; mid = (low+high)/2; } if(x==v[mid]) return mid; else return -1; }
呵呵,看了一会脑袋都大啦。。呵呵不是一般人可以研究的。。博主厉害哟!
博客不错,路过!