导航:首页 > 源码编译 > 最短路径算法八上

最短路径算法八上

发布时间:2025-01-29 16:14:55

A. 路由算法的类型有

静态路由算法

1.Dijkstra算法(最短路径算法)

Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN,CLOSE表的方式,这里均采用永久和临时标号的方式。注意该算法要求图中不存在负权回路。

Dijkstra算法执行步骤如下:

步骤一:路由器建立一张网络图,并且确定源节点和目的节点,在这个例子里我们设为V1和V2。然后路由器建立一个矩阵,称为“邻接矩阵”。在这个矩阵中,各矩阵元素表示权值。例如,[i,j]是节点Vi与Vj之间的链路权值。如果节点Vi与Vj之间没有链路直接相连,它们的权值设为“无穷大”。

步骤二:路由器为网路中的每一个节点建立一组状态记录。此记录包括三个字段:

前序字段———表示当前节点之前的节点。

长度字段———表示从源节点到当前节点的权值之和。

标号字段———表示节点的状态。每个节点都处于一个状态模式:“永久”或“暂时”。

步骤三:路由器初始化(所有节点的)状态记录集参数,将它们的长度设为“无穷大”,标号设为“暂时”。

步骤四:路由器设置一个T节点。例如,如果设V1是源T节点,路由器将V1的标号更改为“永久”。当一个标号更改为“永久”后,它将不再改变。一个T节点仅仅是一个代理而已。

步骤五:路由器更新与源T节点直接相连的所有暂时性节点的状态记录集。

步骤六:路由器在所有的暂时性节点中选择距离V1的权值最低的节点。这个节点将是新的T节点。

步骤七:如果这个节点不是V2(目的节点),路由器则返回到步骤5。

步骤八:如果节点是V2,路由器则向前回溯,将它的前序节点从状态记录集中提取出来,如此循环,直到提取到V1为止。这个节点列表便是从V1到V2的最佳路由。

2.扩散法

事先不需要任何网络信息;路由器把收到的每一个分组,向除了该分组到来的线路外的所有输出线路发送。将来会有多个分组的副本到达目的地端,最先到达的,可能是走了“最优”的路径常见的扩散法是选择性扩散算法。

3.LS算法

采用LS算法时,每个路由器必须遵循以下步骤:

步骤一:确认在物理上与之相连的路由器并获得它们的IP地址。当一个路由器开始工作后,它首先向整个网络发送一个“HELLO”分组数据包。每个接收到数据包的路由器都将返回一条消息,其中包含它自身的IP地址。

步骤二:测量相邻路由器的延时(或者其他重要的网络参数,比如平均流量)。为做到这一点,路由器向整个网络发送响应分组数据包。每个接收到数据包的路由器返回一个应答分组数据包。将路程往返时间除以2,路由器便可以计算出延时。(路程往返时间是网络当前延迟的量度,通过一个分组数据包从远程主机返回的时间来测量。)该时间包括了传输和处理两部分的时间——也就是将分组数据包发送到目的地的时间以及接收方处理分组数据包和应答的时间。

步骤三:向网络中的其他路由器广播自己的信息,同时也接收其他路由器的信息。

在这一步中,所有的路由器共享它们的知识并且将自身的信息广播给其他每一个路由器。这样,每一个路由器都能够知道网络的结构以及状态。

步骤四:使用一个合适的算法,确定网络中两个节点之间的最佳路由。

B. 为什么八数码问题用a*算法求解合适

其实A*算法也是一种最好优先的算法只不过要加上一些约束条件罢了。由于在一些问题求解时,我们希望能够求解出状态空间搜索的最短路径,也就是用最快的方法求解问题,A*就是干这种事情的!我们先下个定义,如果一个估价函数可以找出最短的路径,我们称之为可采纳性。A*算法是一个可采纳的最好优先算法。A*算法的估价函数可表示为:f'(n)=g'(n)+h'(n)这里,f'(n)是估价函数,g'(n)是起点到节点n的最短路径值,h'(n)是n到目标的最短路经的启发值。由于这个f'(n)其实是无法预先知道的,所以我们用前面的估价函数f(n)做近似。g(n)代替g'(n),但g(n)>=g'(n)才可(大多数情况下都是满足的,可以不用考虑),h(n)代替h'(n),但h(n)<=h'(n)才可(这一点特别的重要)。可以证明应用这样的估价函数是可以找到最短路径的,也就是可采纳的。我们说应用这种估价函数的最好优先算法就是A*算法。举一个例子,其实广度优先算法就是A*算法的特例。其中g(n)是节点所在的层数,h(n)=0,这种h(n)肯定小于h'(n),所以由前述可知广度优先算法是一种可采纳的。实际也是。当然它是一种最臭的A*算法。再说一个问题,就是有关h(n)启发函数的信息性。h(n)的信息性通俗点说其实就是在估计一个节点的值时的约束条件,如果信息越多或约束条件越多则排除的节点就越多,估价函数越好或说这个算法越好。这就是为什么广度优先算法的那么臭的原因了,谁叫它的h(n)=0,一点启发信息都没有。但在游戏开发中由于实时性的问题,h(n)的信息越多,它的计算量就越大,耗费的时间就越多。就应该适当的减小h(n)的信息,即减小约束条件。但算法的准确性就差了,这里就有一个平衡的问题。

阅读全文

与最短路径算法八上相关的资料

热点内容
图片压缩成一张图怎么解压 浏览:777
还原文件夹英文 浏览:367
按摩手掌解压视频国外 浏览:608
空气能压缩机价格 浏览:532
php不能上传大文件 浏览:240
消毒水清洁解压 浏览:1000
cpdf阅读 浏览:467
android方案公司 浏览:182
linux编写makefile 浏览:488
考研程序员有什么好处 浏览:225
毕向东android 浏览:259
27安全算法 浏览:352
丰田空调压缩机型号 浏览:835
程序员那么可爱25集文字预告 浏览:556
linux读写文件命令 浏览:695
完美的伤害算法 浏览:574
usch算法 浏览:606
如何给excel某列表格加密 浏览:161
s7编译 浏览:556
单片机接口电路 浏览:161