Dijkstras algorithm All In One

news/2024/10/11 2:27:32

Dijkstra's algorithm All In One

迪杰斯特拉算法

Dijkstra

Dijkstra's algorithm (/ˈdaɪkstrəz/ DYKE-strəz) is an algorithm for finding the shortest paths between nodes in a weighted graph, which may represent, for example, road networks.

Dijkstra 算法是一种用于查找加权图中节点之间最短路径的算法,该算法可以表示例如道路网络

image

https://en.wikipedia.org/wiki/Dijkstra's_algorithm

https://zh.wikipedia.org/wiki/戴克斯特拉算法

image

https://en.wikipedia.org/wiki/Edsger_W._Dijkstra

demos

leetcode

function maxProbability(n: number, edges: number[][], succProb: number[], start: number, end: number): number {let map = {};for (let i = 0; i < edges.length; i++) {let [f, t] = edges[i];if (map[f] === undefined) {map[f] = {};}if (map[t] === undefined) {map[t] = {};}map[f][t] = succProb[i];map[t][f] = succProb[i];}if(map[end] === undefined) {return 0;}let res = dijkstra(n, map, start, end);return res;
};// 迪克斯特拉
let dijkstra = (n: number, map: any, s: number, d: number) => {let visited = new Array(n).fill(0);let costs = new Array(n).fill(0);costs[s] = 1;while(true) {let node;for(let i=0; i<visited.length; i++) {if(visited[i]) {continue;}if(node === undefined) {node = i;} else {node = costs[node] < costs[i] ? i: node;}}if(node === undefined) {break;}if(node === d) {return costs[d];}visited[node] = 1;if(map[node] === undefined) {continue;}let adjNodes = Object.keys(map[node]);for(let adj of adjNodes) {if(visited[adj]) {continue;}let w = map[node][adj] * costs[node];costs[adj] = Math.max(costs[adj], w);}}return costs[d];
}

"use strict";/**** @author xgqfrms* @license MIT* @copyright xgqfrms* @created 2024-08-27* @modified** @description 1514. Path with Maximum Probability* @description 1514. 概率最大的路径* @difficulty Hard* @ime_complexity O(n)* @space_complexity O(n)* @augments* @example* @link https://leetcode.com/problems/path-with-maximum-probability* @link https://leetcode.cn/problems/path-with-maximum-probability* @solutions** @best_solutions**/export {};const log = console.log;function maxProbability(n: number, edges: number[][], succProb: number[], start: number, end: number): number {let map = {};for (let i = 0; i < edges.length; i++) {let [f, t] = edges[i];if (map[f] === undefined) {map[f] = {};}if (map[t] === undefined) {map[t] = {};}map[f][t] = succProb[i];map[t][f] = succProb[i];}if(map[end] === undefined) {return 0;}let res = dijkstra(n, map, start, end);return res;
};// 迪克斯特拉
let dijkstra = (n: number, map: any, s: number, d: number) => {let visited = new Array(n).fill(0);let costs = new Array(n).fill(0);costs[s] = 1;while(true) {let node;for(let i=0; i<visited.length; i++) {if(visited[i]) {continue;}if(node === undefined) {node = i;} else {node = costs[node] < costs[i] ? i: node;}}if(node === undefined) {break;}if(node === d) {return costs[d];}visited[node] = 1;if(map[node] === undefined) {continue;}let adjNodes = Object.keys(map[node]);for(let adj of adjNodes) {if(visited[adj]) {continue;}let w = map[node][adj] * costs[node];costs[adj] = Math.max(costs[adj], w);}}return costs[d];
}/*undirected weighted graph
无向加权图*//*https://leetcode.com/problems/path-with-maximum-probability/description/?envType=daily-question&envId=2024-08-27*/

(🐞 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 https://www.cnblogs.com/xgqfrms/ 查看原创文章!

refs

https://www.geeksforgeeks.org/dijkstras-shortest-path-algorithm-greedy-algo-7/

https://medium.com/@alejandro.itoaramendia/a-guide-to-dijkstras-algorithm-all-you-need-99635dcd6d94



©xgqfrms 2012-2021

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/53667.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Datawhale X 李宏毅苹果书AI夏令营 Task1打卡

3.1 局部极小值与鞍点 3.1.1 临界点及其分类参数对于损失函数的微分为零时,就无法进一步优化了,训练即停止了。所以我们把这些梯度为零的点统称为临界点 。 临界点可以分为两类:极值点 (局部极小值)和 鞍点 。 鞍点就是指那些梯度为零但不是局部极小值或者局部极大值的点,…

纪念第一次在 Github 上提 ISSUE 得到了老哥的回复

背景 第一次在 GitHub 上提 ISSUE,提问的内容就是我的上一篇博文 rustlings v6.0 运行时出现 “ You are trying to run Rustlings using the old method before version 6”,当时搞了好长时间都没思绪,然后就抱着试一试的心态在上面提了一个 ISSUE。 提问之后,又慢慢理了一…

sky-take-out chapter 5

微信登录 商品浏览 HttpClient (1)介绍 就是一个客户端编程工具包,更直白点就是我们可以在java程序中通过HttpClient这个工具包来构造http请求,并且可以来发送http请求;要使用httpclient就需要再java程序中导入maven坐标。 核心API:HttpClient 实际上是一个接口,使用它可…

可拖拽表单设计器都有哪些突出特点?

一起来了解低代码技术平台、可拖拽表单设计器的多个优势特点为了提高效率、降低开发成本,利用低代码技术平台的优势特点可以实现这一目标。究竟什么是低代码技术平台?都有哪些值得夸耀的特点和优势?今天,我们就带着这些问题,一起来了解低代码技术平台、可拖拽表单设计器的…

找到喜欢的事情,坚持去做!

村上春樹:临近三十岁的时候,我依旧一无所成, 我意识到自己并没有经营的才能,又不善于应酬,不喜欢社交,也不太喜欢认识新的东西。我酷爱音乐,但是在这个方面,也谈不上有什么成就。我似乎唯有的优点,就是喜欢的事,总能坚持去做。--- 自己的智力水平一般般,情商不高,也…

2024.8.27

DATE #:20240827 ITEM #:DOC WEEK #:TUESDAY DAIL #:捌月廿肆TAGS< BGM = "Dragonflame--Kirara Magic" > < theme = oi-contest > < theme = oi-data structure Segment > < [空] > < [空] >``` 渊沉鳞潜,冻血锈骨闭魂眼;披风游焰…

Datawhale X 李宏毅苹果书 AI夏令营 Task1.2 笔记

《深度学习详解》3.2节中关于批量和动量的主要内容总结:批量的概念:在深度学习训练过程中,数据不是一次性全部用于计算梯度,而是被分成多个小批量(batch),每个批量包含一定数量的数据。每个批量的损失函数用于计算梯度并更新模型参数。 批量大小对梯度下降法的影响:两种…

两个月Crypto从入门到进阶专题

前言: 作为我最开始主要的方向Crypto,好多基础的原理没有搞懂,只知道要这样用,俗话说"基础不牢,地动山摇",这样就导致一些会做的题在比赛中一旦提升一点点难度就出事故,我又是一个懒虫,借着这次带新生的机会,我将用两个月将Crypto从入门到进阶来一遍,以便新…