是的,我知道,这事拖得太久了。但这是想法的一部分:显示出如果你只是凭你的直觉判断一个程序是多么困难。也许这次我们能做对?
这是关于一个看似naïve的问题的第五篇文章:我们如何编写二进制搜索程序?第一篇文章出现了在这里.前三次程序尝试都是错误的。的第四条摒弃了另一种变体,又引入了另一种:
——程序尝试4号。
从
I:= 0;J:= n + 1
直到我=我循环
M:= (i + j) // 2
如果T [m]≤x然后
I:= m + 1
其他的
j: = m
结束
结束
如果1≤我而且我≤n然后结果: =我结束
我们到了吗?这个说法最终正确了吗?
抱歉让你失望了,但是不行。考虑一个双元素数组T = [0 0],所以n = 2,和一个搜索值x = 1(是的,和上次一样的反例,虽然这里我们也可以用x = 0).变量和表达式的连续值为:
M I j I + j
在初始化:0 3 3
我≠j,因此输入loop:12 35——第一个分支如果"
我≠j,再次输入loop:23.3.6——又是第一个分支
I = j,退出循环
“最后的条件”如果是真的,所以结果获取值3。这是完全错误的,因为位置3没有元素,而且在任何情况下x不会出现在t.
但是我们已经很接近了!某物就像这应该工作,不是吗?
所以耐心点,耐心点,让我们再稍微调整一下,好吗?
——程序尝试5号。
从
I:= 0;j: = n
直到我≥j或结果> 0循环
M:= (i + j) // 2
如果T [m] < x然后
I:= m + 1
elseifT [m] > x然后
j: = m
其他的
结果m: =
结束
结束
现在有用吗?周一的答案。(对生命中终极真理的探索没有周末,但我必须等待ACM友好的工作人员,确保每篇文章都正确注册和链接。)
出版报告:宣布的第六篇(“星期一”)文章已经发表在这里.
Bertrand Meyer首席技术官是谁埃菲尔铁塔的软件(Goleta, CA),沙夫豪森理工学院(瑞士)教授和教务长,俄诺波利斯大学(俄罗斯)软件工程实验室负责人。
没有发现记录