最短路径-迪杰斯特拉(Dijkstra)和弗洛伊德(Floyd)算法JS实现

【JavaScript算法实践】最短路径算法 目录前言一、Dijkstra算法算法实现二、Floyd-Warshall 算法算法实现 前言 最短路问题是图问题中的经典问题,这类问题在生活中非常常见,我们(特别是生活在大城市的人)出门在外,无论是驾车还是乘坐公共交通工具,甚至步行,都会求助于高德地图、百度地图等定位和导航程序。我们可能会有其他的考虑:例如如何乘车、换乘?如何避开拥堵路段?但根本的问题仍然是:哪条路径最短? 在图问题中,这一问题对应的算法被称为最短路径算法。本文介绍其中两种非常著名算法的JavaScript实现: Dijkstra算法和F 阅读详情

1 测试图建立(邻接矩阵)

在这里插入图片描述

class Graph{
	constructor(v,vr){
		let len = v.length
		this.vexs = [].slice.apply(v);
		let arcs = [];
		for (let i=0;i<len;i++){
			arcs[i] = new Array(len);
			for (let j=0;j<len;j++){
				arcs[i][j] = i===j ? 0 : 65535;
			}
		}
		for (let arc of vr){
			let v1 = v.indexOf(arc[0]);
			let v2 = v.indexOf(arc[1]);
			arcs[v1][v2] = arcs[v2][v1] = arc[2] || 1;
		}
		this.arcs = arcs;
	}

}

let a = new Graph(['v0','v1','v2','v3','v4','v5','v6','v7','v8'],[['v0','v1',1],['v0','v2',5],['v1','v3',7],['v1','v4',5],['v1','v2',3],['v2','v4',1],['v2','v5',7],['v3','v6',3],['v4','v6',6],['v4','v7',9],['v5','v7',5],['v6','v8',7],['v7','v8',4],['v6','v7',2],['v3','v4',2],['v4','v5',3]]);
console.log(a);

在这里插入图片描述

2 Dijkstra算法

迪杰斯特拉(Dijkstra)算法是一个按路径长度递增的次序产生最短路径的算法。当计算图中顶点v0至图中另一顶点vn的最短路径时,其算法思路是先将v0与各顶点的距离放入一个数组A,然后找到离v0距离最近的顶点v1,然后更新数组A,比较顶点v0至顶点v1距离加上顶点v1至所有顶点距离和与原本数组对应值的大小,若距离更小,则替换之。接着寻找下一个离v0最近的顶点v2,然后重复以上过程,最终数组A就保存着顶点v0到图中所有顶点的最短距离。

如下图,计算顶点v0至顶点v3的最短路径
在这里插入图片描述
首先初始化数组A,存储放v0与各顶点的距离,此时数组为:

01565535

可以得知,顶点v1距离v0最近,因此比较顶点v1至所有顶点的距离,更新数组A,发现v0-v1-v2的距离比v0-v2更短,替换后,数组A如下:

0147

寻找下一个离v0距离最近的顶点,即v2,重复以上过程,更新数组为:

0146

找到最后一个顶点v3,所有顶点已经遍历完成,得出顶点v0至v3的最短路径值为6

完整的算法如下:

function Dijkstra(G,v0){
	let shortPath = new Array(G.vexs.length); //用于存储顶点v0到各顶点的路径值
	let path = new Array(G.vexs.length);      //用于储存顶点v0到各顶点的路径
	let visited = new Array(G.vexs.length);   //用于指示图中的顶点是否访问过
	for (let i=0;i<G.vexs.length;i++){
		shortPath[i] = G.arcs[v0][i];    //初始化为顶点v0到各顶点的边权值
		path[i] = 0;                     //初始化为0
		visited[i] = false;              //初始化未访问过
	}

	var mini,closestVex;    //用于记录当前最近的节点距离值和节点序号
	shortPath[v0] = 0;      //v0到自身的距离为0
	visited[v0] = true;     //v0自身已经访问过
	for (let i=1;i<G.vexs.length;i++){   //遍历其余顶点
		mini = 65535;    //初始距离值为无穷
		closestVex = v0;   
		for (let j=0;j<G.vexs.length;j++){  //寻找当前未访问过且离v0最近的节点
			if (!visited[j] && shortPath[j] < mini){
				mini = shortPath[j];
				closestVex = j;
			}
		}

		visited[closestVex] = true;  //将当前离v0最近的节点设置为已访问

		for (let j=0;j<G.vexs.length;j++){   //更新距离数组
			if (!visited[j] && mini+G.arcs[closestVex][j] < shortPath[j]){
				shortPath[j] = mini+G.arcs[closestVex][j];   //替换为更近的距离值
				path[j] = closestVex;    //记录节点序号
			}
		}
	}

	console.log(shortPath);
	console.log(path);
}

Dijkstra(a,0);

结果如下图所示,第一个数组中表示顶点v0到各顶点的最短距离值,而第二个数组则为路径,例如查询v0到v8的路径,则从数组第8个元素开始向前追溯,为8-7-6-3-4-2-1-0
在这里插入图片描述
从循环嵌套可以看出,此算法的时间复杂度为O(n2)

3 Floyd算法

Floyd算法是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法。假设求从顶点vi到vj的最短路径,那么不包含头尾顶点,该路径最多可路过了k个顶点( k = n-2,n为图的顶点数),对于第k个顶点,最短路径是否经过该节点取决于起点vi到第k个节点的最短路径加上第k个节点到终点vj的路径长度和与不经过第k个节点的最短路径长度的大小关系,即(vi, vk)+ (vk, vj)与(vi, vj)的路径长度,而要知道这两者谁大谁小,那么又必须知道起点vi到节点vk的最短路径,此最短路径又与起点到第k-1节点的最短路径加上第k-1个节点到第k个节点的路径长度和与不经过第k-1个节点至第k个节点的路径长度的大小关系有关,即(vi, vk-1)+ (vk-1, vk)与(vi, vk),依次类推。

该算法从最初的邻接矩阵D开始,遍历每个节点,对于当前节点k,若存在D(v,w) > D(v,k)+ D(k,w),那么就将D(v,w)值替换为D(v,k)+ D(k,w),这样一步一步替换每个节点,最终得出图中所有顶点到所有顶点的最短路径。

function Floyd(G){
	let D = [];     //用于存储图中所有顶点到所有顶点的最短路径值
	let P = [];     //用于存储图中所有顶点到所有顶点的最短路径序列
	for (let i=0;i<G.vexs.length;i++){   //初始化矩阵D和P
		D[i] = new Array(G.vexs.length);
		P[i] = new Array(G.vexs.length);
		for (let j=0;j<G.vexs.length;j++){
			D[i][j] = G.arcs[i][j];    //D矩阵与图的邻接矩阵相同
			P[i][j] = j;               //P矩阵每列的值相同
		}
	}

	for (let k=0;k<G.vexs.length;k++){   
		for (let v=0;v<G.vexs.length;v++){
			for (let w=0;w<G.vexs.length;w++){  
				if (D[v][w] > D[v][k] + D[k][w]){
					//如果经过下标为k顶点路径比原两点间路径更短
					D[v][w] = D[v][k] + D[k][w];   //替换权值
					P[v][w] = P[v][k];   //路径设置为经过下标为k的顶点
				}
			}
		}
	}

	console.log(D);
	console.log(P);
}

最终D和P矩阵结果如下,D矩阵中存储着图中所有顶点到所有顶点的最短路径值,而矩阵P的存储着各顶点的最短路径序列,例如要查询顶点v0到顶点v8的路径序列,P[0][8]=1, P[1][8]=2, P[2][8]=4, P[4][8]=3, P[3][8]=6, P[6][8]=7, P[7][8]=8,于是序列为0-1-2-4-3-6-7-8
在这里插入图片描述
从循环嵌套来看,该算法的时间复杂度为O(n3)

javascript:实现图-弗洛伊德FloydWarshall算法(附完整源码) 阅读详情

相关推荐

Floyd-Warshall算法的JavaScript实现

通过以上代码,我们成功地实现了Floyd-Warshall算法的JavaScript版本。这个算法在解决图中所有节点对的最短路径问题时非常高效,尤其适用于处理稠密图或带有负权边的图。使用这个算法,我们可以在一张图中轻松地找到任意两个节点之间的最短路径长度。Floyd-Warshall算法是一种用于解决图中所有节点对最短路径的经典算法。例如,节点1到节点2的最短路径长度为2,节点3到节点4的最短路径长度为1。然后,我们遍历图的每个节点,并根据图中的边的权重来初始化。数组,即可得到图中所有节点对的最短路径。

laugh666的博客 215

最短路径——Floyd算法

第1行:2个空格分开的整数n(2

m0_73731708的博客 504

js最短路径算法

通过网页展示最短路劲算法的过程,js完成

数据结构のJavaScript实现之最短路径(Dijkstra算法和Floyd算法)

Dijkstra算法——求某一个点到其他所有点的最短路径 Dijkstra算法和最小生成树的Prim算法又有异曲同工之妙。都是要将顶点分成两坨,一坨未访问的,一坨已访问的,通过循环将未访问的一次次拉下水,变成访问过的,在这个过程中,每次都找权值最小的路径。 以A点为例: 初始化A点到所有其他点的距离dis = [0, ∞, ∞](依次代表[【AA】【AB】【AC】]); 设当前点为A,...

等时钟成长 1789

Dijskra算法 floyd算法

使用c语言,基于win32的工程,实现从文件读取弧段到图,然后实现Dijskra算法和floyd算法,并将结果写入txt文件

js版dijkstra算法实现

javascript实现的dijkstra算法

弗洛伊德算法和迪杰斯特拉算法相比有什么优势?_javascript使用弗洛伊德算法计算最短路径...

弗洛伊德(Floyd)算法介绍1.和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名2.弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径3.迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径。4.弗洛伊德算法 VS 迪杰斯特拉算法:迪杰...

weixin_35782250的博客 1900

数字电路基础(CMOS电路、低功耗方法)

文章目录一、CMOS器件1.1.CMOS反相器1.2. CMOS与非门1.3.CMOS或非门1.4 CMOS与门和CMOS或门二、CMOS电路参数——功耗 一、CMOS器件 1.1.CMOS反相器 CMOS反相器实现非门功能,由一个PMOS管和一个NMOS管组成,其逻辑电路图如下: 其真值表如下: In PMOS NMOS Out 0 √ 导通 ×关闭 1 1 ×关闭 √...

Mr.翟的博客 1万+

Dijkstra, SPFA, Floyd 三种最短路及优化【模板】

求最短路的基本算法有三种 Dijkstra算法,Floyd算法, Spfa算法。 其中Djs和Spfa都是单源最短路算法一般用于求从单一源点出发到其他点的最短距离,Floyd是多源最短路算法,可以求出任意两点的最短距离。 其次这三种算法的基本原理都是通过中转点达到缩短两点距离的目的。例如:1->2 距离为5、1->3距离为1、3->2距离为2.那么1->2的最短距离就可以通过中转点3来缩短,1->3->2 距离为3,比直接1->2的5要小。 Dijkstra算法(堆

梅子酒的博客 419

Proteus 8.15仿真STM32F103C8,ADC采样总为0?别急着换芯片,先检查这3个配置

本文详细解析了在Proteus 8.15中仿真STM32F103C8时ADC采样值为0的常见原因及解决方法。从供电网络配置、时钟设置到ADC参数调整,提供了系统性的排查指南,帮助开发者快速定位问题,避免不必要的硬件更换。重点关注供电网络、时钟分频和ADC配置等关键环节。

weixin_30425949的博客 366

在已有win10系统下安装Ubuntu,最后出现执行‘grub-install/dev/nvme0n1p5‘失败的致命错误的解决方案

本人电脑型号戴尔灵越,两个SSD512G固态硬盘,c盘为系统盘. Ubuntu版本为20.04LTS,在官网下载https://ubuntu.com/download/desktop/thank-you?version=20.04.3&architecture=amd64 系统盘制作工具为Rufus-3.15http://rufus.ie/zh/ 安装过程网上很多,在这里就不赘述了. 其他安装过程都很顺利,直至安装最后出现这个 本来安装了到最后还以为成了,结果又不行...... 后.

XiaoChen_gugugu的博客 1万+

判断有向图g中顶点i到顶点j是否有路径_JavaScript实现最短路径算法

一 迪杰斯特拉算法(Dijkstra)Dijkstra 算法是一种计算从单个源到所有其他源的最短路径的贪心算法 这意味着我们可以用它来计算从图的一个顶点到其余各顶点的 最短路径。考虑上面这个图 , 我们首先分析一下 dijkstra 的使用过程 我们封装的 dijkstra 函数 需要传入 两个参数 1 : 图 grahp (我们用邻接矩阵表示) ,2 : 源顶点src (即算法开始的起点...

weixin_39662594的博客 174

实战!在 AMD RX 9070 XT (16G) 上使用原生 Windows ROCm 7.1 部署 ComfyUI + Z-Image-Turbo

本文详细介绍了如何在Windows系统下为AMD Radeon RX 9070 XT显卡配置Z-Image-Turbo AI绘图环境。主要内容包括:安装VS Build Tools和最新显卡驱动,配置Conda Python 3.12环境,安装ROCm 7.1.1 SDK及PyTorch适配版本,部署ComfyUI可视化界面。重点解决了AMD显卡在AI绘图中的适配问题,通过--use-split-cross-attention参数优化显存使用,最终成功搭建了可在消费级16G显存设备上运行的AI绘图环境

qq_33614778的博客 4689

最短路径算法实战指南:Dijkstra、Bellman-Ford与Floyd核心原理与Python实现

图论是计算机科学中研究图结构及其性质的基础领域,而最短路径问题是其核心课题之一,旨在寻找图中两点间权重总和最小的路径。其基本原理是通过迭代松弛或动态规划策略,逐步逼近最优解。该技术具有极高的工程价值,是优化网络传输、资源调度和空间导航等问题的关键。在应用场景上,迪杰斯特拉算法适用于边权非负的导航与路由,贝尔曼-福特算法能处理金融网络中的负权与套利检测,弗洛伊德算法则用于计算小规模图的全源最短路径。本文聚焦于Dijkstra、Bellman-Ford和Floyd这三种经典算法,通过对比其核心思想、适用场景,并

weixin_30650039的博客 408

【目标跟踪】多目标跟踪的评价工具motmetrics怎么使用?

多目标跟踪,通过motmetrics测试评价对应的视频。

聿默的博客 5368

利用蓝牙低功耗技术与位置数据,提升邮政运输工具及笼车追踪的效率

BLE 即蓝牙低功耗技术,与无线音箱或各类电脑配件所用的技术类似。正如其名,BLE 的特点是:在实现相近传输范围的同时,功耗显著更低。这让它能应用于对电池续航要求极高的场景。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 779

数学建模必备:Dijkstra、Bellman-Ford与Floyd三大最短路径算法详解与实战

图论是描述实体间关系的基础数学模型,广泛应用于交通、社交网络、资源分配等领域。其核心原理是通过顶点和边构建网络,并利用权重量化关联成本。最短路径算法作为图论的关键技术,能高效找到两点间成本最低的路径,具有重要的工程价值。在交通物流规划、网络路由、金融套利检测等场景中,算法选择直接影响求解效率与准确性。本文聚焦于迪杰斯特拉、贝尔曼-福特和弗洛伊德这三大经典算法,深入剖析其适用场景与实现细节。针对数学建模中的常见需求,如**单源最短路径**和**多源最短路径**问题,文章提供了清晰的算法选择指南和Python代

weixin_33910385的博客 447

新手必读!2025最全AI智能体入门手册,50个问题全讲透

感知(Perception):能读取环境,比如读取网页数据、识别用户输入、接入 API;思考(Reasoning/Planning):理解任务目标,规划出行动步骤;行动(Action):调工具、查资料、发消息、写入数据库……直接执行任务。有了这三步,智能体才不是“一个会说话的大模型”,而是真正的“能落地执行的工作代理人”。多个 Agent 分工协作,每个智能体负责一个角色或任务节点,像一个“虚拟团队”。一个爬数据的 Agent,一个提炼要点的 Agent,一个撰写报告的 Agent,

互联网架构师笔记 1968

<span class=“js_title_inner“>百度10年最终还是被裁。。</span>

很多人以为只要在公司干的时间够长,就不会被裁,这是一种严重误区,因为我经历过多次裁员,有时候裁员并不是只裁某几个人,而是把整个项目组都砍掉,很快的,基本上连交接都不需要,最多也就交接一些电脑以及办公用品。我记得2020年当时是疫情的时候,我们整个子公司都全部裁掉,所以被裁掉不一定是你的问题,即便没人能接手你的工作,即便公司离不开你,但当整个项目组被砍掉的时候你也一样逃不掉。--------------下面是今天的算法题--------------城市 1 -> [城市 0, 城市 2, 城市 3]

tanqingbo的博客 39

2万字长文:海豚调度器(DolphinScheduler)面试题深入了解

DAG图(有向无环图)是海豚调度器中表示工作流任务依赖关系的一种方式。在DolphinScheduler中,每个任务是一个节点,任务之间的依赖关系通过有向边连接这些节点来表示。无环:保证了工作流的执行顺序是确定的,避免了无限循环的问题。有向:箭头指示了任务的执行方向,即上一个任务的输出可以作为下一个任务的输入。依赖表示:通过图形化界面,用户可以通过拖拽连接线来定义任务之间的先后顺序和依赖关系。并行处理:DAG图可以表示出任务的并行关系,允许多个任务在没有直接依赖关系的情况下同时执行。条件分支。

大模型大数据攻城狮的专栏 1330

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

弗洛伊德(Floyd)算法——javascript的实现

//html //html //javascript var floyd = function(){ console.time(&amp;amp;amp;quot;floyd&amp;amp;amp;quot;); for(k=1;k&amp;amp;amp;amp;lt;=9;k++){ for(i=1;i&amp;amp;amp;amp;lt;=9;i++){ for(j=1;j&am

hhthht8888的博客 779

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JavaScript数据结构-7-5Floyd-所有顶点最短路径-邻接矩阵表示

<!DOCTYPE html> <html> <head> <title>Floyd算法计算最短路径</title> <meta charset="utf-8"> <script type="text/javascript" src="Floyd.js"></script> </head&...

qq_34153210的博客 226

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

数据结构——Floyd算法(寻找最短路径)

Floyd算法 Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。 在计算机科学中,Floyd-Warshall算法是一种在具有正或负边缘权重(但没有负周期)的加权图中找到最短路径的算法。算法的单个执行将找到所有顶点对之间的最短路径的长度(加权)。 虽然它不返回路径本身的细节,但是可以通过对算法的简单修改来重建路径。 ...

邓占勇的博客 5628

3、无人驾驶--路径规划算法:Floyd算法

Floyd算法是一种动态规划算法,稠密图效果最佳,节点间的连接权值可正可负。此算法简单有效,由于三重循坏结构紧凑,对于稠密图,效果要高于Dijkstra算法。

kevin的博客 3927

理解最短路径算法之Dijkstra(迪杰斯特拉算法)以及JS代码实现

本篇记录了Dijkstra最短路径原理的简单理解和js的代码实现,如有错误,欢迎斧正!

sxww_zyt的博客 1619
上一篇: 最小生成树-普里姆(Prim)和克鲁斯卡尔(Kruskal)算法JS实现
下一篇: 拓扑排序JS实现
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值