7.7最短路径

图之从一个顶点到其余各个顶点的最短路径(有向图) 目录 从一个顶点到其余各个顶点最短路径的简介 举例以及详细分析 代码块 测试结果 从一个顶点到其余各个顶点最短路径的简介1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论, 阅读详情

7.7最短路径

【最短路径问题】 如果将交通网络画成带权图,结点代表地点,边代表城镇间的路,边权表示路的长度, 则经常会遇到如下问题:两给定地点间是否有通路?如果有多条通路,哪条路最短?还可以 根据实际情况给各个边赋以不同含义的值。例如,对司机来说,里程和速度是他们最感兴趣 的信息;而对于旅客来说,可能更关心交通费用。有时,还需要考虑交通图的有向性,如航行时,顺水和逆水的情况。带权图的最短路径是指两点间的路径中边权和最小的路径。

1. 求某一顶点到其它各顶点的最短路径

设有带权的有向图 D=(V,{E}), D 中的边权为 W(e)。已知源点为 v0,求 v0到其它各顶点的最短路径。例如,在下图所示的带权有向图中,v0为源点,则 v0到其他各顶点的最短路径如表 7-3 所示,其中各最短路径按路径长度从小到大的顺序排列。
在这里插入图片描述
下面介绍由迪杰斯特拉(Dijkstra)提出的一个算法,来求解从顶点 v0出发到其余顶点的最短路径。该算法按照最短路径长度递增的顺序产生所有最短路径。

对于图 G=(V, E),将图中的顶点分成两组:

  • 第一组 S:已求出的最短路径的终点集合(开始为{v0})。
  • 第二组 V-S:尚未求出最短路径的顶点集合(开始为 V-{v0}的全部结点)。

算法将按最短路径长度的递增顺序逐个将第二组的顶点加入到第一组中,直到所有顶点都被加入到第一组顶点集 S 为止。

[定理]:
下一条最短路径或者是弧(v0,vx),或者是中间经过 S 中的某些顶点,而后到达 vx的 路径。

[证明]:
可用反证法:假设下一条最短路径上有一个顶点 vy不在 S 中,即此路径为(v0, …, vy, …, vx)。显然,(v0,…,vy)的长度小于(v0,…,vy,… ,vx)的长度,故下一条最短路径应 为(v0,…,vy),这与假设的下一条最短路径(v0,…,vy,…, vx)相矛盾!因此,下一条 最短路径上不可能有不在 S 中的顶点 vy,即假设不成立。

算法中使用了辅助数组 dist[ ], dist[i]表示目前已经找到的、从开始点 v0到终点 vi的当 前最短路径的长度。它的初值为:如果从 v0到 vi 有弧,则 dist[i]为弧的权值;否则 dist[i]为 ∞。

根据上述定理,长度最短的一条最短路径必为 ( v0, vk ),vk满足如下条件: dist[k]=Min{dist[i] | vi∈V-S}

求得顶点 vk的最短路径后,将 vk加入到第一组顶点集 S 中。

每加入一个新的顶点 vk到顶点集 S,则对第二组剩余的各个顶点而言,多了一个“中转” 结点,从而多了一个“中转”路径,所以要对第二组剩余的各个顶点的最短路径长度 dist[i] 进行修正。

原来 v0到 vi 的最短路径长度为 dist[i],加进 vk之后,以 vk作为中间顶点的“中转”路 径长度为:dist[k] + wki,( wki 为弧<vk, vi>上的权值),若“中转”路径长度小于 dist[i],则将 顶点 vi的最短路径长度修正为“中转”路径长度。

修正后,再选择数组 dist[ ]中值最小的顶点加入到第一组顶点集 S 中,如此进行下去, 直到图中所有顶点都加入到第一组顶点集 S 中为止。

另外,为了记录从 v0 出发到其余各点的最短路径(顶点序列),引进辅助数组 path[ ],path[i]表示目前已经找到的、从开始点 v0 到终点 vi 的当前最短路径顶点序列。它的初值为: 如果从 v0到 vi有弧,则 path[i]为(v0, vi);否则 path[i]为空。

【算法思想】
g 为用邻接矩阵表示的带权图。

  • (1) S←—{v0} ; dist[i]= g.arcs[v0][vi].adj; (vi∈V-S) (将 v0到其余顶点的最短路径长度初始化为权值)
  • (2)选择 vk,使得: dist[k]=min(dist[i] | vi∈V-S) vk 为目前求得的下一条从 v0出发的最短路径的终点。
  • (3)将 vk加入 S;
  • (4)修正从 v0出发到集合 V-S 上任一顶点 vi的最短路径的长度: 从 v0 出发到集合 V-S 上任一顶点 vi的当前最短路径的长度为 dist[i], 从 v0 出发,中间经过新加入 S 的 vk,然后到达集合 V-S 上任一顶点 vi的路径长度为: dist[k] + g.arcs[k][i].adj
    如果: dist[k] + g.arcs[k][i].adj <dist[i] 则: dist[i] = dist[k]+ g.arcs[k][i].adj
  • (5)重复(2) ~ (4) n-1 次,即可按最短路径长度的递增顺序,逐个求出 v0到图中其它每个 顶点的最短路径。

【算法描述】 图的最短路径算法

#define  INFINITY   32768             /*表示极大值,即∞*/ 
typedef  unsigned int  WeightType; 
typedef  WeightType  AdjType; 
typedef  SeqList     VertexSet; 
 
ShortestPath_DJS(AdjMatrix  g,  int  v0,   WeightType dist[MAX_VERTEX_NUM],   VertexSet  path[MAX_VERTEX_NUM] ) /* path[i]中存放顶点 i 的当前最短路径。dist[i]中存放顶点 i 的当前最短路径长度*/ 
{ 
	VertexSet  s;                  /*  s 为已找到最短路径的终点集合 */ 
	for ( i =0;i<g.vexnum ;i++)      /* 初始化 dist[i]和 path [i]  */   
	{ 
		InitList(&path[i]); 
		dist[i]=g.arcs[v0][i].adj;     
		if ( dist[i] < INFINITY) 
		{ 
			AddTail(&path[i],  g.vertex[v0]);  /* AddTail 是表尾添加操作*/ 
			AddTail(&path[i],  g.vertex[i]);          
		} 
	} 
	InitList(&s); 
	AddTail(&s,  g.vertex[v0]);      /* 将 v0 看成第一个已找到最短路径的终点*/ 
	for ( t = 1; t<=g.vexnum-1; t++)  /*求 v0 到其余 n-1 个顶点的最短路径(n= g.vexnum )*/ 
	{ 
		min= INFINITY; 
		for ( i =0; i<g.vexnum;i++) 
			if (! Member(g.vertex[i],  s) && dist[i]<min )  
			{
				k =i;  
				min=dist[i];
			} 
		AddTail(&s,  g.vertex[k]); 
		for ( i =0; i<g.vexnum;i++)     /*修正 dist[i],  i∈V-S*/   
			if (!Member(g.vertex [i], s) && g.arcs[k][i].adj!= INFINITY  && (dist[k]+ g.arcs [k][i].adj<dist[i]))       
			{ 
				dist[i]=dist[k]+ g.arcs [k][i].adj; 
				path[i]=path[k];         
				AddTail(&path[i],  g.vertex [i]);      /* path[i]=path[k]∪{Vi} */ 
			} 
	} 
} 

算法前半部分完成了对向量最短路径长度 dist[ ],路径 path[],顶点集 s[]的初始化工作。 算法后半部分通过 n-1 次循环,将第二组顶点集 V-S 中的顶点按照递增有序方式加入到集合 S 中,并求得从顶点 v0 出发到达图中其余顶点的最短路径。
显然,算法的时间复杂度为 O(n²)
在这里插入图片描述

2. 求任意一对顶点间的最短路

上述方法只能求出源点到其它顶点的最短路径,欲求任意一对顶点间的最短路径,可以 用每一顶点作为源点,重复调用狄杰斯特拉算法 n 次,其时间复杂度为 O(n³)。下面介绍一 种形式更简洁的方法,即佛罗伊德算法,其时间复杂度也是 O(n³)。
【算法思想】:
设图 g 用邻接矩阵法表示,求图 g 中任意一对顶点 vi、、vj 间的的最短路径。

  • (-1)将 vi 到 vj 的最短的路径长度初始化为 g.arcs[i][j].adj,然后进行如下 n 次比较和修正:
  • (0) 在 vi、vj 间加入顶点 v0,比较(vi,v0,vj)和(vi,vj)的路径的长度,取其中较短的路 径作为 vi到 vj 的且中间顶点号不大于 0 的最短路径。
  • (1) 在 vi、vj 间加入顶点 v1,得到(vi,…, v1)和(v1,…, vj),其中(vi,…,v1)是 vi 到 v1 的且中间顶点号不大于 0 的最短路径,(v1,…,vj) 是 v1到 vj 的且中间顶点号不大于 0 的最短路径,这两条路径在上一步中已求出。将(vi,…,v1,…,vj)与上一步已 求出的且 vi到 vj 中间顶点号不大于 0 的最短路径比较,取其中较短的路径作为 vi到 vj 的且中间顶点号不大于 1 的最短路径。
  • (2) 在 vi、vj间加入顶点 v2,得(vi,…,v2)和(v2,…,vj),其中(vi,…,v2)是 vi到 v2 的且 中间顶点号不大于 1 的最短路径,(v2,…,vj) 是 v2到 vj 的且中间顶点号不大于 1 的最 短路径,这两条路径在上一步中已求出。将(vi,…,v2,…,vj)与上一步已求出的且 vi 到 vj 中间顶点号不大于 1 的最短路径比较,取其中较短的路径作为 vi到 vj 的且中间 顶点号不大于 2 的最短路径。
    ………
    依次类推,经过 n 次比较和修正,在第(n-1)步,将求得 vi到 vj 的且中间顶点号不大 于 n-1 的最短路径,这必是从 vi到 vj的最短路径。

图 g 中所有顶点偶对 vi、vj间的最短路径长度对应一个 n 阶方阵 D。在上述 n+1 步中, D 的值不断变化,对应一个 n 阶方阵序列。
在这里插入图片描述
弗洛伊德算法可以描述如下
【算法描述】 弗洛伊德算法

typedef  SeqList  VertexSet; 
ShortestPath_Floyd(AdjMatrix  g,  WeightType  dist [MAX_VERTEX_NUM] [MAX_VERTEX_NUM],   VertexSet  path[MAX_VERTEX_NUM] [MAX_VERTEX_NUM] ) /* g 为带权有向图的邻接矩阵表示法, path [i][j]为 vi到 vj的当前最短路径,dist[i][j]为 vi到 vj的当前最短路径长度*/ 
{ 
	for (i=0; i<g.vexnumn; i++)    /* 初始化 dist[i][j]和 path[i][j] */ 
		for (j =0;j<g.vexnum; j++)   
		{              
			InitList(&path[i][j]); 
			dist[i][j]=g.arcs[i][j].adj;     
			if (dist[i][j]<INFINITY)   
			{
				AddTail(&path[i][j],  g.vertex[i]); 
				AddTail(&path[i][j],  g.vertex[j]);            
			}   
		} 
	for (k =0;k<g.vexnum;k++)   
		for (i =0;i<g.vexnum;i++)     
			for (j=0;j<g.vexnum;j++)        
				if (dist[i][k]+dist[k][j]<dist[i][j])           
				{ 
					dist[i][j]=dist[i][k]+dist[k][j];             
					paht[i][j]=JoinList(paht[i][k], paht[k][j]);            
				} /* JoinList 是合并线性表操作 */ 
}   

在这里插入图片描述

Floyd算法求图最短路径问题(基于邻接矩阵) Floyd算法的思想理解和代码实现 阅读详情

相关推荐

最短路径算法---Dijkstra---邻接矩阵

先放出原作者的链接:http://blog.51cto.com/ahalei/1387799以下仅是我的学习过程,以便用时方便查找。Dijkstra为“单源最短路径算法” 对应的邻接矩阵是----&gt;以1为起始地点,用Dijstra算法最终可以得到是到其他各点(2,3,4,5,6)的最短路径.e[6][6]:表示矩阵的大小 dis[6]:表示1到其他各点的距离,如:dis[3]:1到3的距离 ...

一直很安静Dcindy的博客 1万+

求有向图的最短路径

递归 深度搜索 最短路 图

sensern的博客 2775

6.7 DAG 上的最短路径

6.7 DAG 上的最短路径 目录 (1) 特殊 DAG 的最短路径 (2) 关键工程 (3) 街道 如果用动态规划求 DAG 上的最短路径,应该先进行拓扑排序。 (1) 特殊 DAG 的最短路径 【问题描述】下图的拓扑排序序列为 0,1,2……n-1,求结点 0 到其他各点的最短路径长。 邻接矩阵(未填充部分为∞) 【分析】 1. 状态表示:设 f(...

zhengheda的博客 604

详解图(性质,结构,遍历,最小生成树,最短路径)

图

qq_56663697的博客 1376

求平均最短路径长度的matlab编程代码

复杂网络平均路径长度的m文件,先将复杂网络存储为矩阵,再对其matlab编程,

【COMSOL】修改内置物理场方程 模拟水沸腾的蒸汽泡运动

在COMSOL中通过弱贡献(weak contribution)节点,可以向任何内置模型方程中添加约束。这里,以模拟水沸腾的蒸汽泡运动为例,来讲一讲当我们研究的方程与模块方程不一样时,应该怎么增加新的贡献项。

u012161192的博客 9011

7.7 最短路径

最短路径一般是基于网图来说的(带有权值的连通图),不带权值可以考虑权值为1来计算。最短路径是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点是源点,最后一个顶点是终点。求解最短路径的两种算法。迪杰斯特拉算法和弗洛伊德算法。1、迪杰斯特拉(Dijkstra)算法用来求某个顶点到其余所有顶点的最短路径算法介绍求V0到其余各个顶点的最短路径。(1)初始...

weixin_34405925的博客 170

Anylogic试用版密匙

#$%99dTMbLIj+hm/c9fn0suWlfQjdK9FzRH8oSbR Rbm3FEeONkF5mDLKHxhscEDBANDg4BSU2Oi6hErk TH/KzwiCtsM0jfD50uRsj60+gi9ifTlduwcpSr6a GtVSilXwF997xTVAoMLddqOzGQAbnSjBiJOBdm1Z 0QwwIEJynvYgckLfoEADzncIgNnJjYshWcmGh3s9 gTgyuQPlRBeTXfb+ZJPI1JGi4sAUljwdB53Df+AX SEf5FaIbih

qq_43939616的博客 8269

【algo&ds】7.最短路径问题

单源最短路径问题:从某固定源点出发,求其到所有其他顶点的最短路径 (有向)无权图:BFS (有向)有权图:Dijkstra算法 多源最短路径问题:求任意两顶点间的最短路径 直接将单源最短路算法调用|V|遍 Floyd算法 1.BFS算法求解单源无权图最短路径 1.1算法描述 广度优先搜索,开一个额外的数组存储每一个结点的访问状态,一层一层(取出队首元素,遍历所有相邻且未被访...

weixin_45855916的博客 310

GEE开发之ERA5(气温、降水、压力、风速等)数据获取和分析

前言:ERA5主要提供DAILY和MONTHLY两大类别数据,其中主要包括气温、降水、压力、风速等。

等待着冬天的风的博客 3万+

Ansys Circuit新手必看:IBIS模型导入时,Pin Import和Buffer Import到底怎么选?

本文详细解析了Ansys Circuit中IBIS模型导入时Pin Import与Buffer Import的选择策略,帮助SI/PI工程师根据仿真需求做出正确决策。通过对比两种方式的特性差异和应用场景,提供实用的选择指南和性能优化建议,提升信号完整性仿真效率。

weixin_26846533的博客 261

7-15 最短路径

给定一个有N个顶点和E条边的无向图,顶点从0到N−1编号。请判断给定的两个顶点之间是否有路径存在。如果存在,给出最短路径长度。这里定义顶点到自身的最短路径长度为0。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。

m0_63040123的博客 1084

vba 修改下拉列表_Excel联想式下拉菜单制作教程II

?点击关注Excel表哥公众号上期我们分享了Excel联想式下拉菜单制作教程,可以简化大家在下拉菜单过长时的数据录入工作。文章末尾给大家提出了一个问题:为什么下拉列表数据源需要先排序?今天我们继续分享一个不用对数据源排序也能实现的下拉列表制作方法。先看最终的效果动图:今日分享难度指数:★★★★☆01创建辅助列在需要设置下拉列表的工作表中创建一列辅助列,如下图所示:在辅助列F3单元格输入下...

weixin_39593718的博客 1576

7.6最短路径

最短路径问题:如果从图中某一顶点(称为源点) 到达另一个顶点(称为终点)的路径可能不止一条,如何找到一条路径使得沿此路径上各边上的权值总和达到最小。 求带权有向图最短路径问题分为两种情况: 求从一个顶点到其他顶点的最短路径,称为单源最短路径问题: 求每对顶点之间的最路径,称为多源最短路径问题 单源最短路径问题 问题的提法:给定一个带权有向图G与源点v,求从v到G中其他顶点的最短路径。限定各边上的权值大于或等于0. 为求得这些路径最短路径,迪杰斯特拉(Dijkstra)提出按路径长度的递增次序,逐步产生

Cikuio的博客 827

5nm制程的CV5芯片实测:用它给无人机做8K拍摄和实时避障,功耗和性能到底怎么样?

本文深度评测了5nm制程的CV5芯片在无人机8K拍摄和实时避障中的表现。通过实测数据展示了CV5的异构计算架构、8K视频编码性能和CVflow®AI引擎的加速效果,同时提供了开发中的优化技巧和散热建议,为无人机开发者提供了实用的参考。

weixin_30861797的博客 358

Dify 第 7 篇 Dify 应用介绍 + 聊天助手&Agent 应用关键点说明

本文介绍了Dify应用的核心概念与使用方法。Dify是基于大模型构建的实际场景应用,提供API、WebApp和易用界面。包含5种应用类型:聊天助手、文本生成、Agent、对话流和工作流。创建方式有模板创建、空白应用和DSL文件三种。重点讲解了聊天助手和Agent应用的关键功能:聊天助手支持提示词优化、知识库引用、文件处理等;Agent应用则强调推理能力、工具调用和任务自动化。文章还详细介绍了应用的调试、发布和管理工具,为开发者提供了全面的应用构建指南。

甘蓝的专栏 1886

7-2 最短路径

在n*n的方格中找出从起点到终点的最短路径。提示:每个节点的状态为该节点在地图中的坐标。每个节点扩展时最多有上下左右四个孩子节点。当扩展的节点为目标节点的作标时,遍历结束,最优解即为该节点在这个解空间树中的深度。

Zzz_zzzz_z_的博客 549

毕设助力!从0到1构建基于YOLO的家居安防异常活动监测系统,让你的毕设守护家庭安全

做完这个项目,你会发现自己完整走过了“数据采集→标注→模型训练→功能集成→界面开发”的毕设全流程,这不仅是技术能力的证明,更是对“技术守护生活”这一理念的实践。答辩时,你可以重点讲这几点:系统解决了家居安防的哪些痛点、对比了不同YOLO模型的性能差异、系统未来能怎么优化(比如对接智能门锁/报警器、实现语音交互)。未来,这个系统还能往“更智能”的方向发展:比如结合行为分析判断异常意图、开发移动端APP实现全屋设备联动、在智慧社区中实现多家庭联防……想象空间很大。

LXY_LOVE36的博客 124

NYOJ——7 街区最短路径问题

街区最短路径问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述一个街区有很多住户,街区的街道只能为东西、南北两种方向。 住户只可以沿着街道行走。 各个街道之间的间隔相等。 用(x,y)来表示住户坐在的街区。 例如(4,20),表示用户在东西方向第4个街道,南北方向第20个街道。 现在要建一个邮局,使得各个住户到

逝水流年轻染尘 1306

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

7.1最短路径问题

最短路径问题的抽象 在网络中,求两个不同顶点之间的所有路径中,边的权值之和最小的那一条路径 这条路径就是两点之间的最短路径 第一个顶点为源点 最后一个顶点为终点 问题分类 单源最短路径问题:从某固定源点出发,求其到所有其他顶点的最短路径 (有向)无权图 (有向)有权图 多源最短路径问题:求任意两顶点间的最短路径 无权图的单源最短路算法 按照递增(非递减)的顺序找到到各个顶点的...

Ke_vin_Xue的博客 700

深度学习工具包 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")

7-1 最短路径之Floyd

数据结构作业

weixin_55466841的博客 809

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

算法8-7:最短路径接口

最短路径问题就是给定一个图,这个图中的边是有方向和权重的。求s到t的最短路径。 最短路径问题其实分为很多种。按照起点和终点来分,可以分为: 从一个顶点到另一个顶点 从一个顶点到其他所有顶点 从所有顶点到所有顶点 按照边的权重来分可以分为: 非负权 任意权 欧几里德权 按照是否有环可以分为

白色咖啡 1163

算法笔记7-最短路径

最短路径 1.路径是有向的 2.权重不一定等价于距离 3.并不是所有顶点都是可达的 4.负权值会使问题更加复杂(下面不考虑负的) 两点之间,权值最小的路径。 Dijkstra算法 是一种单源(指定一个出发顶点)最短路径,针对的是非负权边。 以A为出发点 我们设置3个数组,第一个S数组,存放已选路径的顶点。第二个V,存放剩下的顶点。第三个dist,存放起

lvhao2813的博客 450

最短路径 2.7

dijkstra算法 floyd算法

ddddcy2023的博客 184

6.7 数据结构——最短路径

最短路径

weixin_45523296的博客 2695

矩阵平均路径长度_7.4.3 最短路径问题(1)Dijkstra算法

返回目录:Chilan Yu:《数据结构》目录链接​zhuanlan.zhihu.com1. 求某一顶点到其他各顶点的最短路径设有带权的有向图D=(V,{E}),D中的边权为 W(e)。已知源点为 ,求 到其它各顶点的最短路径。例如,在图7.26所示的带权有向图中, 是源点,则 到其他各顶点的最短路径如下表所示,其中各最短路径按路径长度从小到大的顺序排列。图7.26 一个带权有向图及其邻接...

weixin_33692177的博客 1365
上一篇: 7.6有向无环图应用之关键路径
下一篇: 7.8总结与提高
亓木Wilson
博客等级 码龄7年 51粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值