- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
普里姆算法和迪克斯特拉算法的比较
对比是非常有效的学习方法。普里姆算法和迪克斯特拉算法是数据结构中的典型算法,本文通过它们的设计和实现的对比,展示这种方法的意义。
1基本思想和数学描述比较
对一个连通网络即无向加权连通图,其权值总和最小的生成树称为最小生成树。对一个有向网络和一个称为源点的顶点,求源点到其余各顶点的最短带权路径,称为单源最短路径。
普里姆(Prim)算法和迪克斯特拉(Dijkstra)算法分别是求最小生成树和单源最短路径的算法,它们的基本思想和数学描述对比见表1和表2。
2步骤和图示比较
为了实现普里姆算法,首先引入一个结构PathData来记录候选边信息,入选子网顶点作为始点,候选集顶点作为终点。其实无向网络的边是不分始点和终点的,这样做仅是为了表述方便。
下面以图1(b)为例,详细介绍普里姆算法的实现步骤:
(1) 由始点0组成入选子网,其余顶点组成候选集。用无色环表示入选子网的顶点,有色环表示候选集顶点,虚线表示候选边,权M代表一个很大的值(这个值应该大于该网络的所有权之和),表示对应的候选边不存在(这样做是为了计算方便)。把候选边集存入PathData结构数组。如图1(c)所示。
(2) 在候选边集中选定一条权最小的候选边加到入选子网(用实线表示)。快速实现的方法是将候选边集调整为小根堆,小根堆首元素就是最小的候选边。如图1(d)所示。
(3) 更新候选边集(虚线):如果最小候选边存在,计算器加1,表示正式加到入选子网。然后,对新候选集的每一个顶点,它原来对应的候选边和入选集新的顶点与它的关联边比较,取小者,作为它对应的新候选边。例如,在图1(e)中,原候选边(0,1,60) 和新的关联边(2,1,50)比较,取小者(2,1,50)。
(4) 保存入选边;对新候选边集建堆,取最小的候选边。实际的方法是,把存储候选边集的PathData结构数组的首尾元素交换,数组元素个数减1,然后把该数组调整为堆。如图1(f)所示。
(5) 重复(3)和(4)n-1次(这是最小生成树的边数ne)。如图1(g)~1(l)所示。
(6) 如果计数器的值等于结点个数减1,函数返回值1,否则0。
为了实现迪克斯特拉算法,首先用结构PathData来记录候选路径信息,包括路径的始点,终点和带权路径长度。
下面以图2(b)为例,详细介绍迪克斯特拉算法的实现步骤:
(1) 由始点0组成入选子网,其余顶点组成候选集。用无色环表示入选子网的顶点,有色环表示候选集顶点,虚线表示候选路径,M代表一个很大的值(这个值应该大于该网络所有带权路径长度之和),表示对应的候选路径不存在(这样做是为了计算方便)。把候选路径集存入PathData结构数组。如图2(c)所示。
(2) 在候选路径集中选定一条带权路径长度最短的加到入选子网(用实线表示)。快速实现的方法是将候选路径集调整为小根堆,小根堆首元素就是带权路径长度最短的候选路径。如图2(d)所示。
(3) 更新候选路径集(虚线):如果最短候选路径存在,计算器加1,表示正式加到入选子网。然后,对新候选集的每一个顶点,它原来对应的候选路径和以入选集新的顶点为前驱的特殊路径比较,取小者,作为它对应的新候选边。例如,在图2(e)中,原候选路径 和新的特殊路径比较,取小者。
(4) 保存入选路径;对新候选路径集建堆,取最短的候选路径。实际的方法是,把存储候选路径集的PathData结构数组的首尾元素交换,数组元素个数减1,然后把该数组调整为堆。如图2(f)所示。
(5) 重复(3)和(4)n-1次(这是最小生成树的边数ne)。如图2(g)~2(l)所示。
如果计数器的值等于结点个数减1,函数返回值1,否则0。
struct PathData //用于最小生成树算法的一种结点结构
{
int start,dest; //边的起点和终点的下标
double cost; //边上的权代表费用
operator double(void)const{return(cost);}//成员转换函数,用于比较运算
};
为了完整地输出每一条单源最短路径和其带权路径长度,引入数组P(Path)和D(Distance),P[i]的值表示序号为i的顶点所对应的候选路径的终点前驱的序号(如果没有前驱,值为-1),D[i]的值表示序号为i的顶点所对应的候选路径的带权长度。
不难看出,迪克斯特拉算法与普里姆算法有许多相似之处,这从它们的基本思想描述和过程示意图可以看出来,表1又以对比的方式给出了迪克
您可能关注的文档
最近下载
- Y Y-T 1118-2001 石膏绷带 粘胶型.pdf VIP
- 中职语文《江姐》(节选) 知识清单.docx VIP
- 绝望的主妇经典台词1-8季中英对照.pdf VIP
- 华力液压模块车(SPMT)使用说明书.pdf VIP
- 2025年保安员(初级)考试模拟100题(含答案) .pdf VIP
- 2024四年级上册语文课课贴(彩虹版).pdf VIP
- GZ055 环境艺术设计赛项赛题15套-2023年全国职业院校技能大赛赛项赛题 .pdf VIP
- 12小学体育二年级课程纲要.doc VIP
- 粘胶型石膏绷带产品技术要求2023完整版.docx VIP
- 2025-2026学年初中数学七年级上册(2024)华东师大版(2024)教学设计合集.docx
文档评论(0)