周伟明的专栏

<<软件测试实践>> 已上市

周伟明ID:drzhouweiming
183236次访问,排名365好友1人,关注者10
软件技术爱好及研究者
drzhouweiming的文章
原创 48 篇
翻译 0 篇
转载 0 篇
评论 314 篇
周伟明的公告
一书已上市, 欢迎大家提出意见!
最近评论
drzhouweiming:因为sections语句后面有隐含的barrier
如果要将其变成并行的话,需要使用nowait子句
kuangxiangjie:这种方式和前面那种方式的区别是,两个sections语句是串行执行的,即第二个sections语句里的代码要等第一个sections语句里的代码执行完后才能执行。

您好,我对这句话不是很明白....parallel不是并行的么,怎么在它里面的两个ses会是串行的呢
algcfx:Wow gold
dimire:LZ你好,我参考你的第一个测试程序int main(int argc, char* argv[])
{
#pragma omp parallel for
for (int i = 0; i < 10; i++ )
{
printf("i = %d\n", i);
}
……
dimire:学习了
文章分类
    收藏
      相册
      最近文章
      1、多核新观念-象使用内存一样使用CPU?
      2、多核编程中的任务随机竞争模式的概率分析
      3、OpenMP创建线程中的锁及原子操作性能比较
      4、多核编程中的任务分组竞争模式
      5、称球问题的测试解法
      90%程序员写不出无BUG的二分查找程序?
      C/C++代码检视实例
      多核编程中的负载平衡难题
      多核编程中的锁竞争难题
      微软过桥问题与测试人员素养
      接口关系稳定原理探索
      接口设计定理
      模块分解原理与三权分立
      模块分解原理的探索
      测试驱动需求分析
      筑一座坝治好中国的沙漠
      存档
      软件项目交易
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      原创  90%程序员写不出无BUG的二分查找程序?收藏

      新一篇: 多核编程中的负载平衡难题 | 旧一篇: 多核编程中的锁竞争难题

        90%程序员写不出无BUG的二分查找程序?

      相关文章链接如下:
      《编程珠玑》(第二版)一书第四章中提及过100多名专业程序员使用两个小时的充足时间编写一个简单的二分查找程序,结果发现90%的人编出的代码都有BUG,Knuth也在他的《Sorting and Searching》一书中提过,第一个二分查找程序在1946年已经公布,但是到了1962年才出现第一个没有BUG的二分查找程序,期间经历了16年的时间。那么为什么一个简单的二分查找程序会这么容易出错呢?看一看有序表的查找的测试用例设计也许能明白为什么。
      要对有序表查找进行用例设计,我们可以先分析输入域,实际上有两个输入域,一个是要查找的数据,另外一个是有序表,可以先对有序表数据的个数进行分类,有序表中可能有0,1,2,3,…个数据。因此我们可以将目标数据分为以下几个类:
       
      完成第1级分类后,我们可以再对数据的特点进行分类,因为有序表是一个有顺序的表,是有大小顺序的,因此可以根据数据特点再进行分类,以3个数据为例可以进行以下分类:
      有序表有0、1、2、4个以上数据的情况都可以按照以上的类似的方式进行再分类。
      当按有序表中分类好后,可以再按要查找的数据进行分类
      当对查找的数据和有序表分别分好类后,就可以把这两种分类组合起来,比如将有序表有3个数据的分类情况和查找数据的分类情况组合起来就可以得到以下的分类:
       
      组合完后,还需要将一些不可能或不需要的组合删除掉,比如在3个数据都相等的情况下,查找数据介于集合两个相邻数据之间的情况就不存在,需要删除掉这种情况,查找数据在有序表中的3种分类也由于集合中数据都相等而变成了一个分类,下图便是3个数据都相等情况下的一个分类:
      这样7个最终分类减少到只有4个最终分类,查找数据为空的情况并不是所有情况下都需要测试的,其实只要测试有序表中有数据和没有数据两种情况就够了,因此查找数据为空的情况如果在其他情况中有了分类,那么也可以将其删去,这样3个数据都相等的情况就只有3个最终分类,如下图所示:
      有序表有0个数据时可以所见成测试两种情况,一种是查找的数据为空,一种是查找的数据不为空。
      有序表中有1个数据时的分类可以缩减成以下3种分类情况:
       
      有序表中有2个数据的分类可以缩减成以下8种分类:
      这样一来,即使不考虑4个以上数据以及3个数据在有两个数据相等情况下的分类,总共的最终分类也有20多种,每种分类至少需要设计一个测试用例,总共至少需要20多个测试用例,一个简单的二分查找的测试用例都至少需要20多个,看到这里大家也许会明白为什么90%的专业程序员写不出一个无BUG的二分查找程序来。
       

      发表于 @ 2007年04月12日 21:58:00|评论(loading...)|编辑

      新一篇: 多核编程中的负载平衡难题 | 旧一篇: 多核编程中的锁竞争难题

      评论

      #lanphaday 发表于2007-04-13 10:32:17  IP: 218.107.55.*
      深入浅出,字字珠玑!
      #chai2010 发表于2007-04-13 10:51:59  IP: 218.106.120.*
      确实复杂.
      不过我觉得掌握二分法的思想就可以了,
      实际开发的时候可以用库函数.

      《编程珠玑》确实很多经验,但如果中是从小处
      着手可能对做大的东西造成障碍.

      我觉得把它看作是hack的文化可能比较好,
      就像<Hackers Delight>一样.

      ==
      http://chaishushan.googlepages.com/
      #leonhonda 发表于2007-04-13 16:56:14  IP: 211.94.138.*
      学习
      #wxt 发表于2007-04-13 17:41:54  IP: 61.129.98.*
      SO,依靠测试来保证软件质量根本就是痴人说梦。
      任何一个具有实用价值的软件,它的测试规模就达到天文数量级了。
      保证软件质量的最后出路还是还是在设计上。
      正如没听说过盖房子的时候,房子的质量是靠不断敲打墙面来保证的。
      #cxz7531 发表于2007-04-13 18:16:23  IP: 61.114.254.*
      瞎扯什么呀!真是扯淡到了极点。
      测试用例分一万种都可以。但程序设计则很简单。

      更荒唐地把0个、1个数据也分成所谓情况。什么“这个等那个不等”分出无数种情况,“等不等”是要考虑的,但根本没有必要分成那么多种情况。


      我编这个程序的时候只考虑2个元素及其以上。而且根本不用再单独考虑3个、4个、5个。 更不会出现3个元素是前两个还是后两个相等的无聊的分类。

      作者竭力铺张夸大到了惊人的程序







      #cxz7531 发表于2007-04-13 18:18:05  IP: 61.114.254.*
      “第一个二分查找程序在1946年已经公布,但是到了1962年才出现第一个没有BUG的二分查找程序,期间经历了16年的时间”
      -------------------------------
      这种话,会有人相信吗?除非全世界的人都是白痴
      #cxz7531 发表于2007-04-13 18:30:33  IP: 61.114.254.*
      “第一个二分查找程序在1946年已经公布,但是到了1962年才出现第一个没有BUG的二分查找程序,期间经历了16年的时间”
      ------------------------------------
      请不要信口开河、张嘴就来。
      十六年时间全世界各地成千上万的程序员用各种不同的语言编写过无数个二分法程序,你是不是用你的“20多个测试用例”都一一测试过。
      #Zricepig 发表于2007-04-13 20:23:37  IP: 61.49.99.*
      见过一篇文章说过2分查找的bug问题,但是好像重点不是lz说的这个方面。
      要把Use Case弄得这么复杂我实在是佩服得五体投地~~~
      #obafgkm 发表于2007-04-13 21:31:02  IP: 218.59.72.*
      写不出来又怎么样呢?
      奇技淫巧害死人,玩物丧志,干点实实在在的事吧!
      #hacker47 发表于2007-04-14 09:23:57  IP: 220.179.165.*
      关键是没有必要记住啊,
      知道哪里能找到就行了,
      这是编程(准确的说是数学)
      不是英语,不需要背诵。
      #asj 发表于2007-04-14 10:04:48  IP: 221.197.230.*
      看CSDN的回复也是一项很好的学习
      有些bug不需要写代码就已经由程序员决定了
      #conanhawke 发表于2007-04-14 10:24:35  IP: 222.240.167.*
      听说过“第一个二分查找程序在1946年已经公布,但是到了1962年才出现第一个没有BUG的二分查找程序,期间经历了16年的时间”,没有什么完美的程序,你能每个程序都像数学家那样给出系统的证明你的算法是对的吗?不能,所以我们只能尽量减少bug,测试重要,但是也没有说一定要把测试和开发的比例做到2比1的。
      #whalefish2001 发表于2007-04-14 10:30:52  IP: 127.0.0.1, 221.*
      大家认为二分查找就是最好的吗?
      我就想出了一个算法,比二分查找还要科学,不过,是建立在二分查找的基础上的,我给取的名字,一:优化的二分查找,二:直接定位查找法(当然了,不会一两次就能直接定位的,但是在10亿条以上的数据量,并且每条数据之间的间隔不是很悬殊时,比二分查找的效率不知道要高多少倍)。

      程序一直没有时间写。不过基于二分查找的思想。

      换句话说吧,如果一个间隔比较平均的大序列,1000亿条数据(当然要排好序了),用二分查找最后一个和最先一个或者第500亿+1个,都需要X次(2^X = 1000亿),而用我的方法,应该比较不会超过3次。
      但在小数据量上,优势就小多了。更小数据量上,原始的二分查找快。

      估计说到这里,大家也都知道我的设计方案了吧。
      #whalefish2001 发表于2007-04-14 10:34:00  IP: 127.0.0.1, 221.*
      # asj 发表于2007-04-14 10:04:48 IP: 221.197.230.*
      看CSDN的回复也是一项很好的学习
      有些bug不需要写代码就已经由程序员决定了


      呵呵
      确实如此
      有些bug程序员知道,但是测试人员却测不出来。
      有些存在的bug,100年也未必会有人发现。
      #ROCKET001 发表于2007-04-14 10:38:50  IP: 58.251.47.*
      开始看完楼主的帖子给我吓了一大跳

      如果二分查找法不好写,看完他的帖子,
      我咋还没看明白怎么才能写好二分查找法
      汗啊!!!

      看了他的最好一句话,感觉还有点道理
      再想想,真她妈的不沾边

      #Solstice 发表于2007-04-14 10:39:30  IP: 123.112.30.*
      to cxz7531:
      “十六年时间全世界各地成千上万的程序员用各种不同的语言编写过无数个二分法程序” ?!

      请不要信口开河、张嘴就来。这句话是 Don Knuth 说的,见《The Art of Computer Programming vol.3 Searching and Sorting 2nd ed.》 第 422 页。

      1946 ~ 1962 那 16 年是什么年代?
      1945 第一台电子计算机ENIAC才发明。
      过了 10 多年,第一个高级语言Fortran才问世(1957年),在此之前,程序员基本使用机器语言和汇编语言来写程序。
      那会儿全世界拥有电子计算机的国家屈指可数,计算机本身也贵得惊人,全世界有没有“成千上万的程序员”还是个问题呢。
      那会儿哪有“各种不同的编程语言” ?算来也就Fortran、Lisp(1959年)、COBOL(1960年)、ALGOL(1960年)等寥寥数种。

      有没有“无数个二分法程序”被编写出来我不知道,不过据Knuth考证,第一个提出折半查找的是John Mauchly,第一个正确实现的是D. H. Lehmer。如果你能找到更早的编写正确的折半查找程序,就能推翻他的说法了。

      另: Nearly All Binary Searches and Mergesorts are Broken by Joshua Bloch : http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html
      #Solstice 发表于2007-04-14 10:48:44  IP: 88.198.180.*
      to whalefish2001:

      你说的方法叫 Interpolation Search,如果数据大致是均匀分布的,比较次数大约为 log log N 。
      #lovekatherine 发表于2007-04-14 11:48:02  IP: 202.113.25.*
      看《Programming Pearls》,看这个帖子,看这个帖子的回复,都挺有收获的。
      #myan 发表于2007-04-14 11:52:21  IP: 221.218.163.*
      说90%,不是低估了,而是高估了我们的developer们。99.9%可能差不多。

      不过,今天的developer与当年的programmer本质上从事的是两个不同的行业,倒也不必苛求。有更急迫的任务等着他们来完成。算法基本功扎实现在只能算是一个小小的优势了。
      #石雕 发表于2007-04-14 12:12:43  IP: 222.178.10.*
      作者所说的所有的20个测试用例, 将其全部并起来, 作为自动的测试集:测试值分别取 (min(R)-1,max(R)+1)∪{0,_MAX,_MIN,}∪{R.+_PRECISE_MIN}
      R数据集. _MAX, _MIN为系统所能接受的最大值,最小值
      _PRECISE_MAX为精度最小值
      #bzstar 发表于2007-04-14 14:16:06  IP: 123.113.14.*
      回字的四种写法,你会吗?
      #zCheng 发表于2007-04-14 14:47:41  IP: 219.140.245.*
      寒一个,原来还有这种说法……
      #Fufay 发表于2007-04-14 15:02:40  IP: 59.49.40.*
      实际运用中能有那么理想执著在算法的优秀上么?
      能么?

      大部分软件公司都为了在糊口,有些算法即便很优秀,客户不用,奈何?
      #Ndingding 发表于2007-04-14 17:47:39  IP: 222.90.77.*
      我想找份做算法的工作,谁能帮推荐一下
      #Piao_Polar 发表于2007-04-14 19:21:17  IP: 218.5.2.*
      ...

      个人窃不以为然...

      二分都说得这样,那quicksort和KMP是不是更少人写对 -_-||

      按照这个逻辑,在比较两个人的是不是同名同姓的时候,是不是还要比较身份证号码,族谱?
      #cxz7531 发表于2007-04-14 21:15:47  IP: 58.100.52.*
      “不过据Knuth考证,第一个提出折半查找的是John Mauchly,第一个正确实现的是D. H. Lehmer。如果你能找到更早的编写正确的折半查找程序,就能推翻他的说法了”
      -----------------------------------
      因为Knuth下的结论是:16年时间没有出现过一个无bug的二分法程序。

      那他就必须把这16年间所有的程序员都走访一遍,把它们写的二分法程序都测试一遍,才能得出这个吓人的结论。他能提供证据证明他做过这个走访测试工作,那他的话就算有根据,否则就是屁话。

      把自己认识的几个程序员当成世界上所有的程序员 ,真是太不自量力了。
      #cxz7531 发表于2007-04-14 21:25:27  IP: 58.100.52.*
      “不过据Knuth考证,第一个提出折半查找的是John Mauchly,第一个正确实现的是D. H. Lehmer。如果你能找到更早的编写正确的折半查找程序,就能推翻他的说法了”
      -----------------------------------
      据我所知,我的大学同学和同事们都编写过二分法程序,那16年出现过多少程序员我虽然不知道具体数目,但成千上万总有吧!说无数二分法程序丝毫不为过。Knuth能去把成千上万个程序员的程序都测试一遍,未免是奇之又奇的天大笑话了。

      在这个问题上,举证责任在Knuth。
      1 他如何证明“第一个提出折半查找的是John Mauchly”
      2 他如何证明“第一个正确实现的是D. H. Lehmer”

      我很想知道他下这个结论的根据是什么?是不是可以把提出二十多种测试用例的劲头用于证明自己这两个结论,把找别人程序bug的精力用于查找自己说话的bug上。
      #cxz7531 发表于2007-04-14 21:27:13  IP: 58.100.52.*
      奉劝那些整天拿雕虫小技自娱自乐的人干点正事,别整天不务正业研究回字四种写法
      #dukang_2005 发表于2007-04-14 21:29:43  IP: 61.50.138.*
      ft! 16年?至于吗!
      #MONOLINUX 发表于2007-04-14 21:37:54  IP: 219.233.37.*
      切,吹牛B

      最近思维很混乱,本来用 C 语言做搜索引擎的,搞着搞着一不小心,用C做起 winform程序来了!
      练习程序:http://www.freewebs.com/killgoogle/form.rar

      我完了,windows彻底把我毒害了呀。。。。。。

      哎呀,不知道原来没有界面的搜索,现在套个Winform界面是什么效果!欢迎做C的兄弟们救救我啊,本人搜索引擎完全自主构思自主开发,杜绝一切垃圾开源软件!
      全部用 C语言实现 有兴趣多联系 QQ: 99923309 MSN: erp_mrp@hotmail.com 只对用 C语言开发搜索引擎的有兴趣,其它语言包括 C++ 一律免谈!

      不用数据库,就算有也是自定义的那种:)

      代码:http://hi.baidu.com/earthsearch
      #g9yuayon 发表于2007-04-14 22:16:31  IP: 74.123.144.*
      这些测试用例的设计本来是基础:按测试数据和算法的特征把无穷的测试数据划分为有限的集合。要攻击别人,也去看看作者的划分是不是遗漏或者重复了。攻击别人算什么?而且还攻击错了。什么叫雕虫小技啊?二分法被成千上万用户使用,几乎每个稍微复杂点的软件都要用到。严格测试本来就是该的。作者的测试数据还没包括搜索对象的边界呢,而恰恰因为这样,JDK5以前的二分搜索是错的。攻击作者的人没写过关键应用的库吧?我们公司的基础库函数就是这么设计测试用例的。很新鲜么?再说,我们不必为二分法设计测试用例了。那垃圾处理呢?数据流分析呢?程序优化呢?模型验证呢?调度优化呢?测试稍微复杂点有点关键应用的算法/程序,划分测试集合不过是基本要求。

      至于说“把0,1分成单独的情况很荒唐”才是真的荒唐。边界情况检查不过是基本要求中的基本要求。都什么年代了,还拿这个说事?学习的一门编程课没讲测试设计?

      至于Knuth的说法。拜托老大,仔细读一下Drzhouweiming的帖子,再读一下Knuth原文,再学一下历史。Knuth的判定标准很简单,看发表的文献就行了。而且Knuth的原文也说明了,从文献的发表记录看二分法经过16年才写对。Drzhouweiming也是这个意思。1946到1962年间,计算机编程的研究刚萌芽。连顺序查找都可以写成论文发表的。我们不能从Knuth的话得出结论说1946年到1962间没有人写对二分法,不过我们至少可以推断二分法不容易写对。

      签名:看不懂别人的帖子不是你的错。看不懂还跳出来指点江山就是你的错了。戴着在什么井什么天的帽子在口水里游泳很爽么?
      #g9yuayon 发表于2007-04-14 22:18:55  IP: 74.123.144.*
      最近RPWT严重。是"学校的第一门编程课没讲测试设计”,不是“学习的一门编程课没讲测试设计”
      #cxz7531 发表于2007-04-14 22:34:48  IP: 58.100.52.*
      划分测试集合不过是基本要求。
      ---------------------
      测试集合的种类并不是编程要考虑的种类,你划分多少种是你的事情,跟程序员无关。

      “把0,1分成单独的情况很荒唐”
      ----------------
      任何合格的程序员一开始就把0、1这两种情况都首先排除了。才进行下一步的二分法。

      Knuth的判定标准很简单,看发表的文献就行了
      ------------------
      Knuth居然能看完所有的文献?单凭自己看过的论文就下这个结论,这不是滑天下之大稽吗?
      #cxz7531 发表于2007-04-14 22:40:44  IP: 58.100.75.*
      划分测试集合不过是基本要求。
      ---------------------
      测试集合的种类并不是编程要考虑的种类,你划分多少种是你的事情,跟程序员无关。难道你划分二十多,我也要划分那么多种?

      “把0,1分成单独的情况很荒唐”
      ----------------
      任何合格的程序员一开始就把0、1这两种情况都首先排除了。才进行下一步的二分法。

      Knuth的判定标准很简单,看发表的文献就行了
      ------------------
      Knuth居然能看完所有的文献?单凭自己看过的论文就下这个结论,这不是滑天下之大稽吗?
      #songge09 发表于2007-04-14 23:05:55  IP: 218.76.21.*
      to cxz7531

      Knuth居然能看完所有的文献?单凭自己看过的论文就下这个结论,这不是滑天下之大稽吗?

      你说这个话连我都看不下去了,你去查查Knuth的生平再说吧.
      #HaoyuTan 发表于2007-04-15 02:46:04  IP: 218.199.31.*
      建议那些连Knuth都不知道的人,还是不要在这里评论了,没资格的说
      #future0906 发表于2007-04-15 09:42:46  IP: 121.32.89.*
      cxz7531 别说太多废话了,写一个折半查找出来。如果有错的,我想你也不应该在这里JJYY的了
      #cxz7531 发表于2007-04-15 10:37:17  IP: 58.100.54.*
      to songge09
      ------------------------
      我对Knuth的生平不感兴趣,我只想知道,他说“第一个正确实现的是D. H. Lehmer”的证据是什么?

      1 他看过所有的文献吗?
      2 有多少程序员写的二分法程序会发表到文献上去?

      如果下这个结论连起码的证据提不出,还有什么资格牛皮哄哄地拿一堆测试用例去测试别人的程序。
      #mhmdanger 发表于2007-04-15 10:42:25  IP: 222.209.102.*
      书中是举的一个例子,并不是说每个程序员都需要去准确无误的写出这个东西,没有那个必要。二分查找思想其实很简单,我想大多数程序员在实际工作中写的很多东西都比它复杂得多。何必在哪浪费时间,世界上已存的算法其实都不需要大家去写出对应的程序,工作中拿来主义最适用,linux还是从unix拿来的呢
      #cxz7531 发表于2007-04-15 10:42:49  IP: 58.100.54.*
      to # HaoyuTan
      ------------------------
      你判断一个论断正确与否,难道就是看是谁说的吗?只要是某人说的就一定正确!如果是这样,那就真没有任何必要理你了,你也没有资格在这里辩论任何问题了。
      #cxz7531 发表于2007-04-15 10:50:15  IP: 58.100.54.*
      难怪有一公司的技术总监说:
      “中国人只会编程序,不会做软件,更不会创造一流的软件技术”,这话有些片面,打击面过大,但也不无道理。
      有些程序员深受谭浩强教授的毒害,只会在小程序的细枝末节上纠缠不清,真是不可救药了。
      #1111111 发表于2007-04-15 11:18:57  IP: 203.86.76.*
      这样是不是很无聊呢?
      孔乙己不是说过么?你知道几种茴香豆的茴字写法?

      任何事情,完全的理解了,才是最重要的。如果不理解,也还是会做错。
      #hankcy 发表于2007-04-15 14:49:51  IP: 219.239.5.*
      危言耸听
      #chchzh 发表于2007-04-15 17:15:20  IP: 59.44.19.*
      如果在程序或函数里,你把每一个If语句配成完整的If..Else..则可以保证没有bug。不信,你就试试。
      #lightray 发表于2007-04-15 19:11:31  IP: 59.59.24.*
      第一次听说...
      #zaizai2008 发表于2007-04-15 22:09:03  IP: 60.21.112.*
      大家知道AYA吗 如果您已经厌烦QQ等即时聊天软件 请您进来了解一下
      软件介绍地址:http://bbs.aq78.com/index.php?fromuid=14309
      #cwhwin 发表于2007-04-15 23:09:26  IP: 218.107.24.*
      真TMD恶心
      #HaoyuTan 发表于2007-04-16 02:59:36  IP: 218.199.31.*
      to cxz7531:

      记得当年我在《电脑爱好者》杂志上看到一个编程题,要求输入三角形的三边长度,程序输出三角形的面积。就是这么一个“简单”的题目,投稿的程序有没有上千我不清楚,但至少不少于三位数,结果最后只有两个程序能够通过所有的测试用例,而且其中一个也并不完全正确(找到这个程序的bug的程序员正是最终获奖的那个)。你敢写一个贴出来么?

      你是谁呢?我想你一定不会比Knuth更有资格来发表对“二分查找算法”的观点,更进一步,你也绝对写不出一个没有bug的“二分查找算法”。我敢下这个结论,是因为你的说话方式已经暴露了你的真实水平。

      至于“中国人只会编程序,不会做软件,更不会创造一流的软件技术”这句话,我不知道是哪位牛人说的。我认同其中的2/3,我觉得这句话应该改成“中国人连程序都编不好,更不用说做软件、创造一流的软件技术了”。中国缺的是务实的程序员、一流的算法专家、顶级的计算机科学家。别跟我说什么软件工程,什么设计什么管理,没有扎实的基础,做什么都是没有技术含量的。

      不知天高厚的你,还是不要在这里高谈阔论了,你即将说出的每一个字,都只会给自己丢脸而已。你不信?尽管试试好了……
      #Solstice 发表于2007-04-16 09:21:37  IP: 149.9.0.*
      不知道Knuth是谁没关系,却说他“太不自量力了”、“滑天下之大稽”、“奇之又奇的天大笑话”,嗯,你太有才了。btw, 如果你能证明他说错了,他老人家会寄给你一张$2.56的支票。

      《数据结构》课程必讲的快速排序算法(quicksort)是Hoare于1961年发明的。

      按照某人的逻辑,“我的大学同学和同事们都编写过快速排序程序”,“这些年间有成千上万的程序员写过无数的快速排序程序”,“有多少程序员写的快速排序程序会发表到文献上去?”,难道这就能否定Hoare发明了quicksort?

      同样的例子还有Adelson-Velsky和Landis于1962年发明的AVL平衡二叉树,这也是《数据结构》必讲的内容。

      本来嘛,不了解历史也算不上什么过错,想当然地认为自己所学的知识是自古以来一直就有的,这就多少有点………
      #daly888 发表于2007-04-16 10:20:56  IP: 202.97.68.*
      对某位CXxxxx人兄真是看不过眼,
      关于文献,计算机历史的基本常识都没有就在这里乱吼~~
      非常佩服其无知者无畏的精神
      #daly888 发表于2007-04-16 10:25:36  IP: 202.97.68.*
      不知Knuth是谁都算了,这里不是搞个人崇拜。

      "据我所知,我的大学同学和同事们都编写过二分法程序,那16年出现过多少程序员我虽然不知道具体数目,但成千上万总有吧!"

      第一台微机诞生在1971年,46~62年间全世界见过电脑的人都没有上万。这样的logic, 怎么去program?
      同样的logic, 牛顿有什么厉害的,我的大学同学都用过牛顿定律解决过问题,我们也会相对论,他会么。
      #laznhr 发表于2007-04-16 14:42:35  IP: 218.19.206.*
      利用热气球升上天空这一理论在中国很早就有人提出了。。。可是从当时到真正有人用热气球升上天时这几百年的时间都没有人能实现过。。。。。由此可见。。人要升天真的是很难很难。。。。除非他去自杀就能升天了。
      #laznhr 发表于2007-04-16 14:43:50  IP: 218.19.206.*
      由此得出的理论。。全世界99.9%的人类不会用热气球升天。。
      #kurapika5 发表于2007-04-16 16:13:02  IP: 219.137.201.*
      确实,差不多又99.99%的人类不会用热气球升天
      #DVD_01 发表于2007-04-16 19:44:35  IP: 121.201.29.*
      能解决实际的问题在主要。这样的挑剔在很多时候浪费很多的时间。现实中是不存在最好的,只存在更好的。
      #roger_77 发表于2007-04-17 09:35:00  IP: 218.242.253.*
      如此详尽的系统分析,好!
      #chenshaoying 发表于2007-04-18 16:22:36  IP: 211.167.69.*
      真能吵!其实高深的道路应该更容易理解。
      挺一下g9yuayon 和HaoyuTan 。

      不过总算明白了“曲高和寡”。
      #liaohanxin 发表于2007-04-18 16:34:03  IP: 221.5.42.*
      追求完美时,会发现完全越来越远...
      #summersnowgieno 发表于2007-04-18 16:42:58  IP: 131.107.0.*
      90%的 程序员 写 不出 没有 错误 的 2分法 查找 不是 问题 ~
      没有 一个 coder 可以 说 自己 能 写 没有 错误 的 code ~
      凡是 认为 自己 code 没有 问题 的 人 都有 巨大 的 问题 ~
      事实上 软件 行业 真正 的 问题 是 90% 的 需求 到 产品 ship 之后 仍然 不能 fit 市场 需求~

      单 从 程序 角度 看 产业 , 你 就 把 这个 问题 看得 太小 了。
      #chai2010 发表于2007-04-30 13:54:36  IP: 218.106.120.*
      这么多人在讨论啊

      最近打算五一去买knuth的第二卷来看看。

      不过对二分法bug的问题,确实从不同角度
      得到的结论也是不一样的。

      当然,knuth作为一个计算机方面的科学家,
      需要从逻辑上证明才能说一个程序是没有bug的。

      但是,作为一个普通的程序员,我想没有bug就是
      指程序的应用中不会产生错误就可以了。

      就像一个操作系统,如果是50年才产生一次的错误,
      那也就可以说不是bug了。

      我想大家肯定都abs这个函数,求一个整数的绝对值。

      int abs(int n) { return (n>0)? n: -n; }

      但是这个函数就对吗?

      基本上对吧!

      其实这种实现也是有问题的:int为一个二进制补码形式,
      因此,int中的正数肯定就会比负数少一个(多了一个0)。
      那么INT_MIN的绝对值必然也不能用int表示。

      但是这些都不妨碍我们使用abs这个函数,
      我只要心里知道就可以了。

      ==
      http://chaishushan.googlepages.com
      #rh 发表于2007-06-01 23:57:40  IP: 59.51.227.*
      @cxz7531:
      您太有才了。衷心对你无语。
      #alen88 发表于2007-10-03 19:17:15  IP: 121.228.42.*
      了解一下也是不错的
      发表评论  


      当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
      Csdn Blog version 3.1a
      Copyright © 周伟明