Algorithm 为什么在拨号';Dijkstra的s版本';s算法?
我看过的几篇论文和幻灯片都提到了Dial对Dijkstra的单源最短路径算法的实现。他们都说一个bucket存储为一个双链接列表。(例如,)。然而,所需的操作仅限于此(据我所知):Algorithm 为什么在拨号';Dijkstra的s版本';s算法?,algorithm,dijkstra,Algorithm,Dijkstra,我看过的几篇论文和幻灯片都提到了Dial对Dijkstra的单源最短路径算法的实现。他们都说一个bucket存储为一个双链接列表。(例如,)。然而,所需的操作仅限于此(据我所知): 检查铲斗是否为空 将节点添加到bucket(顺序无关紧要) 在删除传递的节点时在bucket上迭代 所有这些都可以通过单链表轻松完成(对于2,只需将指向列表开头的指针更改为新节点,并将其下一个指针更改为指向bucket中旧的第一个节点) 那么,有没有什么原因我不知道为什么双链接列表是可取的呢?我想出来了。我错过的操作
那么,有没有什么原因我不知道为什么双链接列表是可取的呢?我想出来了。我错过的操作是,当我们在一个桶上迭代时,我们需要移动相邻的顶点,从而从其他桶中删除它们的节点。对于双链接列表,可以在
O(1)
中执行此操作;对于单链接列表,可以在O(bucket大小)
中执行此操作