Algorithm 链路状态路由协议——Dijkstras算法

Algorithm 链路状态路由协议——Dijkstras算法,algorithm,networking,network-protocols,router,dijkstra,Algorithm,Networking,Network Protocols,Router,Dijkstra,N-网络 R-路由器 在上图中,您可以看到一个关于链路状态路由协议的问题。当你为R3做Dijkstra算法时,我知道你首先要加上N3和N4,然后看看成本,2小于4,所以N4变成永久性的,但是当N4变成永久性的时候,它会加上R4和R7吗?或者你只是选择其中一个?这个例子有点混乱,因为箭头,但我想我们可以假设这是一个顶点集为N的无向图 以下是Dijkstra的步骤: 为每个节点指定一个暂定距离值:对于初始节点,将其设置为零,对于所有其他节点,将其设置为无穷大 将所有节点标记为未访问。将初始节点设置为

N-网络 R-路由器


在上图中,您可以看到一个关于链路状态路由协议的问题。当你为R3做Dijkstra算法时,我知道你首先要加上N3和N4,然后看看成本,2小于4,所以N4变成永久性的,但是当N4变成永久性的时候,它会加上R4和R7吗?或者你只是选择其中一个?

这个例子有点混乱,因为箭头,但我想我们可以假设这是一个顶点集为N的无向图

以下是Dijkstra的步骤:

  • 为每个节点指定一个暂定距离值:对于初始节点,将其设置为零,对于所有其他节点,将其设置为无穷大
  • 将所有节点标记为未访问。将初始节点设置为当前节点。创建一组未访问的节点,称为未访问集,由除初始节点外的所有节点组成
  • 对于当前节点,考虑所有未访问的邻居并计算它们的暂定距离。
  • 当我们考虑完当前节点的所有邻居后,将当前节点标记为已访问,并将其从未访问集中移除。已访问的节点将不再被检查
  • 如果目标节点已标记为已访问(在规划两个特定节点之间的路由时),或者如果未访问集合中的节点之间的最小暂定距离为无穷大(在规划完整的遍历时),则停止。算法已经完成
  • 选择标有最小暂定距离的未访问节点,并将其设置为新的“当前节点”,然后返回步骤3
  • 让我们看一下您案例中的这些步骤

    • Ad1
      R3
      是初始节点,因此它获取距离
      0
    • Ad2<代码>R3是当前代码
    • Ad3。访问
      N3
      N4
      ,分别将其暂定距离设置为
      4
      2
    • Ad4。将
      R3
      标记为完成
    • Ad5--
    • 公元6年。选择
      N4
      作为当前节点,然后返回步骤3
    • Ad3。访问
      R4
      R7
      ,并将其暂定距离分别设置为
      6
      3
    • Ad4。将
      N4
      标记为完成
    • Ad5--
    • 公元6年。选择
      R7
      作为当前节点,然后返回步骤3

    等等。

    Dijkstra算法的关键在于,在处理节点之前,永远不会丢弃节点

    Step 1 : R3
    N4 - 2
    N3 - 4
    
    Step 2 : N4
    R7 - 3
    N3 - 4
    R4 - 6
    
    Step 3 : R7
    N3 - 4
    R4 - 6
    N6 - 9
    
    在这一步中,您将N3作为与剩余R3最接近的,因此您将使用N3

    Step 4 : N3
    R4 - 6
    R8 - 6
    R2 - 6
    N6 - 9
    

    请注意,在每个步骤之后都有一个排序。因此,最低优先级队列应该会有所帮助。

    N4和N3都没有传出边缘,所以这些路径是无方向的吗?还有,我猜你是从R3开始的,你想去哪里?