acm-header
登录

ACM通信

BLOG@CACM

制定正确的计划(3)


Bertrand Meyer

这是关于一个看似naïve的问题的第三篇文章:我们如何编写二进制搜索程序?第一篇文章在这里

第一次程序尝试出错了。的第二篇文章介绍了一个新的:

程序尝试#2。

I:= 1;J:= n

直到I = j结果> 0循环

m:= (i + j) // 2——整数除法

如果T [m]≤x然后

I:= m + 1

elseifT [m] = x然后

结果m: =

其他的——在本例中,t [m] > x

J:= m - 1

结束

结束

问题是:对吗?

又没有。一个简单的例子可以证明:N = 1,数组t只包含一个元素T [1] = 0, x= 0.然后初始化设置两者而且j1,I = j在进入循环时保持,循环立即停止,但是结果是0,而它应该是1 (wherex出现)。

现在是第三次尝试,让我们看看效果是否更好:

程序尝试#3。

I:= 1;J:= n

直到I = j循环

M:= (i + j + 1) // 2

如果T [m]≤x然后

I:= m + 1

其他的

J:= m

结束

结束

如果1≤我而且n然后结果: =我结束
——如果不是,结果仍然是0。

这个怎么样?周三回答。

出版报告:已公布的第四篇(“星期三”)文章已发表在这里

Bertrand Meyer首席技术官是埃菲尔铁塔的软件(Goleta, CA),沙夫豪森理工学院(瑞士)的教授和教务长,以及Innopolis大学(俄罗斯)软件工程实验室的负责人。


没有找到条目

登录全面存取
忘记密码? »创建ACM Web帐户
Baidu
map