为什么numbering 应该从0开始
竟然有Dijkstra关于这个问题的严肃活泼的阐述
why numbering should start at zero
还有其手稿
我来翻译一下.
在不用省略号的前提下表示自然数2,3,...,12 ,我们有四种方式
a) 2 ≤ i < 13
b) 1 < i ≤ 12
c) 2 ≤ i ≤ 12
d) 1 < i < 13
那么这里面有没有一个选项是比其他三个更好的呢?
是的,确实是的.
非常明显的,ab选项有一个又是在于上下限之差是等于数列的长度的.
另一个非常明显的点在于,对这两个表达式来说,任意两个相邻子序列一个的上界等于另一个的下界.
纵使我们的观察很有效,但这不能帮助我们从a,b当中选出来一个更好的.所以我们接着往下来
我们知道有一个最小的自然数.会被b,d天然的排除到下界之外,如果我们要包含这个最小的自然数在表示子序列过程中,我们必须使用非自然数,这是非常sb的行为.
所以我们在表示下界的时候更希望使用闭包,也就是≤ ,这一点a,c是满足的
现在我们继续思考,我们的子序列可以从最小的自然数开始了,表示子序列为空时,闭包的上界表达会让我们又不得不使用非自然数.这同样是sb的.所以对于上界,我们倾向于使用<.
这样我们得出a选项将会是最好的
当处理一个长度为 N 的序列时(希望通过下标来区分其中的元素) ,一个棘手的问题是为其起始元素赋什么下标值。根据 a表达式 ,当从下标1开始时,下标范围1≤ i < N + 1; 然而,从0开始,给出了更好的范围0≤ i < N。因此,让我们让序数从零开始: 元素的序数(下标)等于序列中它之前的元素数。这个故事的寓意是,我们最好把零当作一个最自然的数字ーー经过了这么多个世纪。
备注:很多编程语言没有很好的注意到这个细节,比如说Fortran ,Pascal....
上述情况是由最近的一起事件引发的。当时,我在纽约大学的一位数学同事(不是计算机科学家)情绪激动地指责一些年轻的计算机科学家“迂腐”,因为他们习惯性地开始数字为零。他把有意识地接受最明智的惯例当作一种挑衅。(另外,“结束... ...”的惯例被视为具有挑衅性; 但这个惯例是有用的: 我知道一个学生在一次考试中差点挂了,因为他默认题目在第一页的底部就结束了。)我认为Antony Jay的观点是正确的: “在企业宗教和其他宗教中,异教徒必须被驱逐出去,不是因为他有可能是错的,而是因为他有可能是正确的
Plataanstraat 5 11 August 1982
5671 AL NUENEN prof.dr. Edsger W. Dijkstra
The Netherlands Burroughs Research Fellow
网友评论