为什么数组下标从0开始而不是1?Dijkstra的权威解答
创作时间:
作者:
@小白创作中心
为什么数组下标从0开始而不是1?Dijkstra的权威解答
引用
1
来源
1.
https://fushidao.cc/wangluobiancheng/588.html
很多初学者在学习编程时都会被数组下标从0开始而不是1的问题困扰。这个问题的答案,早在1972年就由图灵奖得主Dijkstra给出了。
Dijkstra,全名Edsger Wybe Dijkstra,是一位在计算机科学领域做出卓越贡献的荷兰科学家。他不仅提出了著名的Dijkstra最短路径算法,还发明了信号量和PV原语、银行家算法等重要概念。在1972年获得图灵奖时,他就已经对数组下标从0开始的问题给出了令人信服的解释。
一个简单的例子
让我们通过一个具体的例子来理解这个问题。假设我们需要用一个不等式来表示以下连续的整数序列:
[2,3,4,5,6,7,8,9,10,11,12]
这是一个包含11个数的序列。我们可以写出以下四个符合要求的不等式:
2 <= i < 131 < i <= 122 <= i <= 121 < i < 13
这些不等式都正确地表示了上述序列,但是否有理由选择其中的一种而不是另一种呢?
选择最优雅的表示方式
Dijkstra指出,选择1和2这两个不等式的原因在于它们有一个突出的优点:不等式边界的差(不等式右边 - 不等式左边)正好等于连续序列的长度。
进一步分析1和2的区别:
- 对于第1个不等式,左边(下界)等于序列中的最小值,右边(上界)大于序列中的最大值。
- 对于第2个不等式,左边(下界)小于序列中的最小值,右边(上界)等于序列中的最大值。
如果我们的序列是[0,1,2,3,4],按照第2个不等式的写法,不等式的左边就会变成-1,这在表示全是自然数的序列时显得不够优雅。因此,第1个不等式是最优雅的选择。
数组下标的选择
接下来,我们需要决定数组的起始下标应该从1开始还是从0开始。根据不等式1的规则:
- 如果从下标1开始,下标范围是
1 ≤ i < N+1 - 如果从下标0开始,下标范围是
0 ≤ i < N
Dijkstra解释说,从下标0开始能够给出更好的不等式,因为元素的下标就等于序列中它前面的元素数(或者说“偏移量”)。
结论
通过这个简单的例子,我们可以看到为什么数组下标从0开始是一个更优雅的设计选择。这种设计不仅在数学上更加简洁,而且在实际编程中也更加直观和方便。
以下是Dijkstra的手稿,展示了他当年是如何思考这个问题的:
热门推荐
从山鸡哥到实力派:陈小春的演艺进阶之路
陈小春:用行动诠释公益精神
如何通过夜班管理提高员工的工作效率和服务质量
银行卡过期怎么办?教你轻松换卡
关于除夕的传统习俗、来历、寓意着什么精选大全
春节拜年新花样,南北大比拼!
冬季武功山徒步装备指南:从基础装备到安全提示
武功山徒步打卡绝美摄影点:发云界、千丈岩、云海日出
冬日武功山徒步攻略:绝美风光配美食
武功山徒步攻略:征服“云端草原”的N个理由
多肉刚剪下来能插吗(多肉叶片扦插方法步骤)
多肉叶片扦插方法:从选叶到养护的完整指南
在床上的72种扦插方法有哪些-如何通过这些方法快速繁殖植物
《红楼梦》里的“伏脉千里”有多绝?
长征路上周恩来病危,杨立三抬6天6夜,19年后总理亲自为他引棺
他可授元帅却客死外国,周总理亲自为他抬棺,五大元帅送殡
氯疹会持续多久?
湿疹怎么治?全面解析湿疹的治疗方法
成语“五花八门”最初来源是哪里?它是怎么演变而来的?
燃气灶灶头打火原理解析:工作原理与常见问题解决方案
家电维修:从自助到专业,教你如何应对常见故障及预防技巧
科普|喝水能预防肾结石吗?该怎么喝才科学?
厨房燃气灶一打火老是容易灭?学会这3招,连维修老师傅都服!
厨房燃气灶的总阀门需要每天关吗?听师傅说完,发现自己做错了
健康科普丨幽门螺杆菌检测方法大盘点
宁静致远:大楷书法,沙孟海、赵朴初、启功、舒同等名家作品欣赏
诸葛亮到底会不会打仗?李世民的评价,一针见血,直指要害
从诸葛亮的《出师表》看忠诚教育的力量
《出师表》中的语言魅力分析
台北故宫展出唐代《出师表》真迹:字字生辉,引发书坛热议