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

2024-02-15 15:20
文章标签 斯特拉 迪克

本文主要是介绍迪克斯特拉_迪克斯特拉错了,我也是,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

迪克斯特拉

我为使用基于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

迪克斯特拉

这篇关于迪克斯特拉_迪克斯特拉错了,我也是的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/711772

相关文章

基于二叉堆优化的迪杰斯特拉算法

前言介绍 迪杰斯特拉(Dijkstra)算法是1959年由荷兰计算机科学家Dijkstra提出的算法,用于在加权图中计算从单个源点到其余节点的最短距离。采用贪心策略,每次选取到源点最近且未被访问的节点,遍历它的邻居节点更新它们到源点的最短距离,直到扩展完成。 算法诞生 在迪杰斯特拉算法出现,有这样一个问题:在荷兰的任意选取两个城市,它们的最短距离是多少?在当时,这个问题最好的算法运行时间随着

数据结构之---C语言实现最短路径之Dijkstra(迪杰斯特拉)算法

此处共有两段代码: 一、 这段代码比较全面,其中参考了github上的相关源码。可以说功能强大。 //Dijkstra(迪杰斯特拉算法)#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 100 // 矩阵最大容量#define INF

最短路径之迪杰斯特拉算法(Dijkstra)

1.迪杰斯特拉(dijkstra)算法简介 Dijkstra算法是由E.W.Dijkstra于1959年提出,又叫迪杰斯特拉算法,它应用了贪心算法模式, 是目前公认的最好的求解最短路径的方法。算法解决的是有向图中单个源点到其他顶点的最短 路径问题,其主要特点是每次迭代时选择的下一个顶点是标记点之外距离源点最近的顶点。但 由于dijkstra算法主要计算从源点到其他所有点的最短路径,所以算法

算法学习笔记--狄克斯特拉算法

算法学习笔记–狄克斯特拉算法 主要内容 加权图:提高或降低某些边的权重介绍狄克斯特拉算法,能找出加权图中前往X的最短路径图中的环会导致狄克斯特拉算法不管用,如果有负权重也不适用 如果要处理负权重的图,可以使用贝尔曼-福德算法 狄克斯特算法的四个步骤 找出最便宜的节点,即可在最短时间内到达的节点对于该节点的邻居,检查是否有前往它们的更短路径,如果有,就更新其开销。重复这个过程,直到对图中的

js迪杰斯特拉算法求最短路径

1.后台生成矩阵 名词解释和下图参考:https://blog.csdn.net/csdnxcn/article/details/80057574   double[,] arr = new double[allVertices.Count(), allVertices.Count()]; //矩阵  //allVertices所有三维坐标点的集合 //lines 所有两点

【QuikGraph】C#调用第三方库实现迪杰斯特拉(Dijkstra)算法功能

QuikGraph库介绍 项目地址:https://github.com/KeRNeLith/QuikGraph API地址:https://kernelith.github.io/QuikGraph/api/index.html QuikGraph为.NET提供了通用的有向/无向图数据结构和算法。 QuikGraph提供了深度优先搜索、广度优先搜索、A*搜索、最短路径、k最短路径,最大流量、

L2-001 紧急救援(迪杰斯特拉应用)

作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。 输入格式: 输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市

最短路径问题——(弗洛伊德算法与迪杰斯特拉算法)

最短路径问题——(弗洛伊德算法与迪杰斯特拉算法)【板子】 题目: 对于下面的图片所给出的关系,回答下面两个问题: 利用迪杰斯特拉算法求点A到每一个点之间的最小距离。利用弗洛伊德算法求每两个点之间的最短路径。 (注意图中的A~E,分别用1~5来代替) 对于问题1(Dijkstra): 第一行输入三个数n,m,q分别表示一共有n个点,m条边,q个查询 接下来的m行每行输入三个数i,j,

算法图解 第7章 狄克斯特拉算法

本章内容 继续图的讨论,介绍加权图------提高或降低某些边的权重。介绍狄克斯特拉算法,让你能够找出加权图中前往X的最短路径。介绍图中的环,它导致狄克斯特拉算法不管用。   在前一章,你找出了从A点到B点的路径。 这是最短路径,因为段数最少------只人三段,但不一定是最快路径。如果给这些路段加上时间,你将发现有更快的路径。 你在前一章使用了广度优先搜索,它找出的是段最少的路

【图论】Dijkstra单源最短路径-朴素方法-简单模板(迪杰斯特拉算法)

Dijkstra单源最短路径 问题描述 输入n 表示n个结点,m表示m条边,求编号1的结点到每个点的最短路径 输出从第一个点到第n个点的最短路径 思路 将图g[][]中所有的权值初始化为0x3f表示正无穷 将dist[]中所有的值初始化为0x3f表示从第一个点到所有点的距离默认为无穷 将dist[1]设置为0表示从第一个点到它自己距离为零 执行n(也就是处理n个点的次数)次如