2008年12月19日星期五

[Computer]为什么计数应该从0开始?

例如, 为了表达自然数序列 2, 3, ..., 12
有下面4种惯用表示法:
a) 2 ≤ i < 13
b) 1 < i ≤ 12
c) 2 ≤ i ≤ 12
d) 1 < i < 13

选择哪种好呢?

a)和b)有个优势: 上界跟下界的差 = 序列的长度,
因此两个相邻的序列会有这样的特点:一个序列的上界=另一个序列的下界.
比如a) 2 ≤ i < 13, 13 ≤ j < 69
好像这个理由还不足于我们选择a)或b).

我们知道, 数学上有一个最小的自然数m. 如果序列的表示法把下界排除掉的话,
比如b)和d), 考虑一个从最小的自然数开始的序列, 那么表示这个序列的下界就是一个非自然数了.这是多么丑陋阿, 在下界表示这点上, 我们选择 a)和c).

再来看看上界,如果序列表示法把上界包含进来的话,表示长度为0的序列应该只能是这样: p ≤ i ≤ p-1,
假如p是最小的自然数的话,那么上界p-1又会落在非自然数领域去了, 同样丑陋.
因此上界的表示,我们选择a)和d). 综上,我们选择a)表示法.

下一个问题是:对于一个N个元素的序列,给起始元素下标赋予哪个值?

由a)表示法得出, 如果从下标1开始, 下表范围是: 1 <= i < N+1,
然而下标从0开始的话, 将得到一个更nice的范围: 0 <= i < N,
让序数从0开始, 得出: 一个元素的序数 = 它之前的元素个数.

prof.dr. Edsger W. Dijkstra 的手迹: why numbering should start at zero

没有评论: