zoukankan      html  css  js  c++  java
  • 谈谈单元最短路

    单元最短路,应该会立即想到spfa和dijkstra。

    相较而言,我用spfa的次数更加多一些,

    一般这些题目都可以用  spfa(算法)+(数据结构)边表给做掉,

    借用了

    这位大神的论文。

     我们一般用的都是spfa的bfs应用,这是比较正确的,一般情况下

     bfs算法优势明显,但是为什么还需要dijkstra呢?

    如上图,这里的话,可以发现spfa的弱点就出来了,这里的Dijkstra是指加堆优化的。

    而且,对于所有情况下,dijkstra更加平均,时间复杂度更加可以保证,而spfa是期望复杂度,不能够保证其时间复杂度(一般题目中应该是可以过的,如果不是针对卡你最短路的话)。

    Dijkstra复杂度O(NlogN) Spfa复杂度 期望是O(KM) K一般取2即可,但网格图这些就不行了,完全没有优势,达到了O(EN)

    所以学会Dijkstra后代码量短并且时间更加平均。

    spfa无法解决 负权回路

    dijkstra无法解决 负权

    如果有负权回路,应该用bellman—ford 解决,这个复杂度是高的达到了O(nm)

    Spfa优化

  • 相关阅读:
    虚拟内存思想
    虚拟内存映射 段分割 vm_area_struct
    进程、内存的理想与现实 VS 虚拟内存
    进程地址空间
    MMU CPU及思想
    链接器和加载器 好书
    编译器 链接器 加载器
    链接器简介
    C编译器、链接器、加载器详解
    静态库是.o文件的集合与弱符号
  • 原文地址:https://www.cnblogs.com/fengzhiyuan/p/6979041.html
Copyright © 2011-2022 走看看