贪心法求解单源最短路径问题

上传人:风*** 文档编号:60775623 上传时间:2022-03-09 格式:DOC 页数:6 大小:46KB
收藏 版权申诉 举报 下载
贪心法求解单源最短路径问题_第1页
第1页 / 共6页
贪心法求解单源最短路径问题_第2页
第2页 / 共6页
贪心法求解单源最短路径问题_第3页
第3页 / 共6页
资源描述:

《贪心法求解单源最短路径问题》由会员分享,可在线阅读,更多相关《贪心法求解单源最短路径问题(6页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上实验1. 贪心法求解单源最短路径问题实验内容本实验要求基于算法设计与分析的一般过程(即待求解问题的描述、算法设计、算法描述、算法正确性证明、算法分析、算法实现与测试)。应用贪心策略求解有向带权图的单源最短路径问题。实验目的u 通过本次实验,掌握算法设计与分析的一般过程,以及每个步骤的基本方法。并应用贪心法求解单源最短路径问题。环境要求对于环境没有特别要求。对于算法实现,可以自由选择C, C+, Java,甚至于其他程序设计语言。实验步骤步骤1:理解问题,给出问题的描述。步骤2:算法设计,包括策略与数据结构的选择步骤3:描述算法。希望采用源代码以外的形式,如伪代码、流程

2、图等;步骤4:算法的正确性证明。需要这个环节,在理解的基础上对算法的正确性给予证明;步骤5:算法复杂性分析,包括时间复杂性和空间复杂性;步骤6:算法实现与测试。附上代码或以附件的形式提交,同时贴上算法运行结果截图;步骤7:技术上、分析过程中等各种心得体会与备忘,需要言之有物。说明:步骤1-6在“实验结果”一节中描述,步骤7在“实验总结”一节中描述。实验结果1.问题描述给定一个有向带全图G=(V,E),其中每条边的权是一个非负实数。另外,给定V中的一个顶点,称为源点。现在要计算源点到所有其他各个顶点的最短路径长度,这里的路径长度是指路径上所有经过边的权值之和。这个问题通常称为单源最短路径问题。2

3、. (1)Dijkstra算法思想 按各个结点与源点之间路径长度的非减次序,生成源点到各个结点的最短路径的方法。即先求出长度最短的一条路径,再参照它求出长度次短的一条路径。依此类推,直到从源点到其它各结点的最短路径全部求出为止。1959年提出的,但当时并未发表。因为在那个年代,算法基本上不被当做一种科学研究的问题。(2) Dijkstra算法设计集合S与V-S的划分:假定源点为u。集合S中的结点到源点的最短路径的长度已经确定,集合V-S中所包含的结点到源点的最短路径的长度待定。特殊路径:从源点出发只经过S中的结点到达V-S中的结点的路径。 贪心策略:选择特殊路径长度最短的路径,将其相连的V-S

4、中的结点加入到集合S中。3、 描述算法 Dijkstra算法的伪代码:DIJKSTRA(G, w, s) INITIALIZE-SINGLE-SOURCE(G, s) S = Q = G.V /V-S中的结点按特殊路径长度非减排序 while Q u = EXTRACT-MIN(Q) S = S u for each vG.Adju RELAX(u, v, w)4、 Dijkstra算法的求解步骤:步骤1:设计合适的数据结构。带权邻接矩阵C记录结点之间的权值,数组dist来记录从源点到其它顶点的最短路径长度,数组p来记录最短路径。u为源点;步骤2:初始化。令集合S=u,对于集合V-S中的所有顶

5、点x,设置distx=Cux。如果顶点x与源点相邻,设置px=u;否则,px=-1;步骤3:贪心选择结点。在集合V-S中依照贪心策略来寻找使得distx具有最小值的顶点t,t就是集合V-S中距离源点u最近的顶点。步骤4:更新集合S和V-S。将顶点t加入集合S中,同时更新集合V-S;步骤5:判断算法是否结束。如果集合V-S为空,算法结束。否则,转步骤6;步骤6:对相关结点做松弛处理。对集合V-S中的所有与顶点t相邻的顶点x,如distxdistt+Ctx,则distx=distt+Ctx并设置px=t。转步骤3。5、Dijkstra算法的正确性证明 贪心选择性质: 采用归纳法。当S=s, p时,

6、则除源结点s之外的所有结点中,结点p到源点s的距离最短。这是显然的。假设当S=s, p1, , pk时,即k个结点p1, , pk到源点s的距离最短。当S=s, p1, , pk, pk+1时,很显然结点pk+1到源点s的距离是最短的。需证明:此时结点p1, , pk到源点s的距离仍然是最短的。用反证法假设当结点pk+1加入到S后,pi结点经由结点pk+1到源点s的距离更短,即d(s, pk+1) + d(pk+1, pi) d(s, pi),有d(s, pk+1) d(s, pi) ,则结点pk+1应比pi早被选择到S中,与假设相矛盾。证毕。6、时间复杂性:EXTRACT-MIN()的时间复

7、杂性为O(logn);二重循环的执行次数为(n-1)+(n-2)+1 = n(n-1)/2,即时间复杂性为O(n2)。所以,该算法的时间复杂性为O(n2)。空间复杂性:优先队列Q的大小为n-1;所以,该算法的空间复杂性为O(n)。7、 算法实现与测试。实验总结 Dijkstra算法采用贪心策略,按各个顶点与源点之间路径长度递增的次序,生成源点到各个顶点的最短路径方法。先求出长度最短的一条路径,在参照它求出长度次短的一条路径,以此类推,直到从源点到其他各个顶点的最短路径全部求出。 在构造带权邻接矩阵时候,二维数组在dijkstra算法里采用指针传递参数,结果求得的最短路径为ox等等,因为算法按照

8、课本编写所以觉得没有错,就在输出部分困扰了很久,这样告诉我们学习不能生搬硬套,出问题不可怕,仔细分析问题来源并解决才是最重要的。在定义无穷大整数时,程序里是999,输入矩阵时变成10000,结果出来很大的数没有规律。在设置循环变量时,从0到n导致输入数组的时候出错,又写了输出语句还是弄不明白,小小的一个bug浪费了大量的时间,现在要好好的弥补编程知识。利用经典的算法知识可以解决现实生活中的许多问题,利用程序实现充满乐趣和挑战。Dijkstra算法代码:#include using namespace std;const int intmax=999;void Dijkstra(int n,in

9、t u,int* dist,int* p,int *&c) bool sn; for(int i=1;i=n;i+) disti=cui; si=false; if(disti=intmax) pi=-1; else pi=u; dist u=0; su=true;for(int i=1;i=n;i+) int temp=intmax; int t=u;for(int j=1;j=n;j+) if(!sj)&(distjtemp) t=j; temp=disti; if(t=u) break; st=true; for(j=1;j=n;j+) if(!sj)&(ctj(distt+ctj) d

10、istj=distt+ctj; pj=t; int main() coutn; int* dist=new intn+1; int* p=new intn+1; int* c=new int*n+1; for(int i=0;in;i+) ci=new intn+1; cout输入邻接矩阵: endl; for(int i=0;in;i+) for(int j=0;jcij; int u;coutu; Dijkstra(n,u,dist,p,c); for(int i=1;in;i+) coutui路径长度:distiendl; for(int i=1;in;i+) cout顶点i的前驱顶点为:piendl; return 0;/*0 8 32 999 99912 0 16 15 999999 29 0 999 13999 21 999 0 7999 999 27 19 0*/专心-专注-专业

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!