迪克斯特拉_迪克斯特拉错了,我也是

迪克斯特拉

我为使用基于0的数组而后悔,我错了。 让我与您分享为什么。

程序员应该使用索引符号 ,而不是偏移量符号。 偏移表示法是通过在连续内存的物理分配空间中从物理上分配的空间中的元素的对应位置来描述元素在数组中的位置的常用方法,该逻辑上从零开始。 否则它会缩短为“基于0的索引数组”,尽管它的误称实际上是偏移量。 我们应该改用1作为数组的开头,因为它具有以下优点:

  1. 自然,列表中的第一个元素基本对应于1 。 相反,即使JavaScript的官方文档也明确声明免责声明“数组的第一个元素实际上位于索引0”-这很容易被忘记,尤其是对于新手而言,并且可能导致错误。
  2. 在数学上,一个封闭的间隔在代码中正确表示为for(i = 1; i <= items.length; i++) ,因为它包含其端点。 偏移符号从技术上讲是一个左向右开的间隔集,在代码中表示为for(i = 0; i < items.length; i++) 。 这很重要,因为代码处理整数间隔,因为所有元素都有固定的大小-您无法访问元素的小数部分。 整数间隔是封闭间隔,因此可以证明这一点。
  3. 在数学上,矩阵符号也从1开始。
  4. 那么第0个项目应该代表什么? 数组本身如何? 特别是对于将0视为假值的语言,如果0 || true 0 || true表示您为true,认为foo[0]为您提供foo的根(即数组本身)并非没有道理。
  5. 列表中的最后一个元素基本对应于列表的长度,因此可以轻松地使用items.length进行访问,而无需在代码中的各处都使用令人沮丧的(items.length - 1)算法。
  6. 负指数与正指数对称。 这样-11分别引用最后一个元素和第一个元素,并且在列表中只有一个项目的情况下,它匹配相同的元素。 这种便利性允许不提供偏移量表示法的简单左右访问。
  7. 元素的不存在可以用0表示,它将方便地优雅地进行编码, if( !items.indexOf('z') ) return; 。 相反,必须决定是否if( items.indexOf('z') == -1 ) return; 从哲学if( items.indexOf('z') < 0 ) return;if( items.indexOf('z') < 0 ) return;更有意义if( items.indexOf('z') < 0 ) return; 尽管忽略了方程的不对称性,但使用偏移符号表示。

因此,我要求原谅我多年来天真,愚蠢和错误地强加给每个人的基于0的数组。 请原谅我,与我悔改,现在起来反抗! 分享,发推,HN / Reddit等动作,让我们再次使阵列变得很棒 ! 不,我不是在拖钓, 数学已经讲完了

翻译自: https://hackernoon.com/dijkstra-is-wrong-and-so-am-i-f36e2fbd5ae4

迪克斯特拉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值