SPF算法

1.Dijkstra算法解释(来自E.W.Dijkstra原稿)

构造一棵树[a],使n个节点之间的总长最小(树是一个在每两个节点之间仅有一条路径的图)。
在我们给出构造过程中,分支被分成3个集合:

Ⅰ:被明确分配给构造中的树的分支(他们将在子树中);
Ⅱ:这个分支的隔壁分枝被添加到集合1;
Ⅲ:剩余的分支(抛弃或不考虑);

节点被分成两个集合:

A: 被集合1中的分支连接的节点;
B:剩余的节点(集合2中有且仅有一个分支将指向这些节点中的每一个节点);

下面我们开始构造树,首先选择任意一个节点作为集合A中仅有的成员,并将所有拿这个节点做端点的分支放入集合Ⅱ中。开始集合Ⅰ是空的。然后我们重复执行下面两步。

步骤一:集合Ⅱ中最短的分支被移出并加入集合Ⅰ。结果,一个节点被从集合B传送到集合A。
步骤二:考虑从这个节点(刚才被传送到集合A中的节点)通向集合B中节点的分支。如果构建中的分支长于集合Ⅱ中相应的分支,那么分支被丢弃;否则,用它代替集合Ⅱ中的相应的分支,并且丢弃后者。

接着我们回到算法的第一步并重复此过程直到集合Ⅱ和集合B为空。集合Ⅰ中的分支形成索要的树

2.路由器中的最短路径优先算法

在Djikstra算法中描述了3个分支集合:Ⅰ、Ⅱ、Ⅲ。在路由器的算法中用三个数据库来表示这三个分支集合。

**最短路径树数据库**——表示集合Ⅰ。通过向数据库中添加分支实现向最短路径树中添加链路。当算法完成时,这个数据库将可以描述最短路径树。**候选对象数据库**——表示集合Ⅱ。按照规定的顺序从链路状态数据库向该数据库中复制链路,作为向树中添加的候选对象。**链路状态数据库**——表示集合Ⅲ。这里保存所有链路。

Djikstra中还指定了两个节点集合——A、B。这里的节点时=是路由器。这写路由器被明确地哟个路由器三元组(路由器ID、邻居ID、代价)中的邻居ID表示。集合A中的是最短路径树数据库中链路所连接的路由器。而集合B中的是所有其他的路由器,所以当算法收敛完成时集合B应该为空。

以下是一台路由器中的最短路径优选算法的版本:

**步骤1**:路由器初始化最短路径树数据库,将自己作为树的根。就是路由器作为它自己的邻居,代价为0。
**步骤2**:在链路状态数据库中,所有描述通向根路由器邻居链路的三元组被添加到候选对象数据库中。
**步骤3**:计算从根到每条链路的代价,候选对象数据库中代价最小的链路背移到最短路径树数据库中。如果两条或更多链路离根的代价相同,随机选择其中一条移到最短路径树数据库中。
**步骤4**:检查添加到最短路径树数据库中的邻居ID。除了邻居ID已经在最短路径树数据库中的三元组之外,链路状态数据库中描述路由器邻居的三元组被添加到候选对象数据库中。
**步骤5**:如果候选对象数据库中还有剩余的项,就回到第3步。如果候选数据库为空,终止算法。算法终止时,在最短路径树数据库中,每一个单一的邻居ID表将表示1台路由器,到此算法收敛完毕,最短路径树构造完毕。

SPF(最短路径树)算法相关推荐

  1. python贪心算法最短路径_dijkstra算法(贪心算法)——解决最短路径问题

    最短路径 给定一张带权图和其中的一个点(作为源点),求源点到其余顶点的最短路径 基本思想 1)源点u,所有顶点的集合V,集合S(S中存有的顶点,他们到源点的最短路径已经确定,源点u默认在S中),集合V ...

  2. 点分治问题 ----------- P2993 [FJOI2014]最短路径树问题 [最短路径树+点分治+采坑]

    题目链接 解题思路: 首先我们知道最小路径树实际上就是Dijkstra算法在找最短路的时候转移的过程就是一个最短路径树. 那么我们就可以先跑个最短路,记录一下各个最短路的路径.然后就是很裸的点分治.分 ...

  3. CSP认证201609-4 交通规划[C++题解]:最短路径树、dijkstra求单源最短路、递推思想

    题目分析 来源:acwing 分析: 这题是最短路树.保持原图中所有点到根结点的最短距离不变,然后在原图中选择一些边,使所有点连通的最短路是多长. 最短路径树,是一种使用最短路径算法生成的数据结构树. ...

  4. 最小生成树、最短路径树

    一.最小生成树与最短路径树的区别 最小生成树能够保证整个拓扑图的所有路径之和最小,但不能保证任意两点之间是最短路径. 应用如网络部线,把所有的电脑(服务器?)都连起来用的网线(光纤?)最少,即用最小的 ...

  5. 【数据结构】图(最短路径Dijkstra算法)的JAVA代码实现

    最短路径的概念 最短路径的问题是比较典型的应用问题.在图中,确定了起始点和终点之后,一般情况下都可以有很多条路径来连接两者.而边或弧的权值最小的那一条路径就称为两点之间的最短路径,路径上的第一个顶点为 ...

  6. 最短路径 Dijkstra算法的Matlab代码实现

    为了搞清楚最短路径的算法过程,自己编写代码实现dijkstra算法寻找路径 % 文件名:dijkstra.m % 时间:2020年9月12日 % 来源:https://blog.csdn.net/li ...

  7. 最短路径Djikstra算法 模板+ 例题(九度acm1341: 艾薇儿的演唱会)

    最短路径Djikstra算法: 主要思想:先找确定的(即当前最短的),不确定的则动态更新. 从(V-S)集合中找v0到其中最短的路径的顶点,加入到S中并更新(V-S)集合中其他顶点的路径值. ―――― ...

  8. 最短路径树(SPT)介绍及matlab代码

    文章目录 前言 一.最短路径树是什么? 二.最短路径树的算法 1.Dijkstra算法(我比较常用和喜欢的算法) 2.Floyd算法 总结 前言   最短路径树是路由算法设计中常用到的一种树,往往我们 ...

  9. 最短路径,最短路径树和最小生成树

    首先介绍这三个概念,很多人都听过最短路径了,但是最短路径树却很少听过,关于最短路径树的介绍也不太多.而最短路径树和最小生成树更是完全不同的两个概念. 最短路径就是从一个指定的顶点出发,计算从该顶点出发 ...

  10. 最短路径问题算法总结

    最短路径问题算法总结 1.固定起点的最短路--Dijkstra算法 2.每对顶点之间的最短路--Floyd算法 3.Bellman-ford算法 4.SPFA(对Bellman-ford算法的优化) ...

最新文章

  1. CPU 内部结构解析
  2. 读后感与机翻《整体的三维场景解析和重建从单一的RGB图像》
  3. 【MediaPipe】(1) AI视觉,手部关键点实时跟踪,附python完整代码
  4. FineReport中Domino数据库连接方法
  5. OpenGL ES着色器语言之变量和数据类型
  6. 【BUG】小米5中 video.js 在钉钉 webview 中全屏后 后退无法弹出虚拟键盘
  7. Main execution in Scala - Scala应用的入口
  8. 江西理工大学期末试卷c语言,2016年江西理工大学信息工程学院计算机应用技术(加试)之C语言程序设计复试笔试最后押题五套卷...
  9. 女子将车垂直开上标志杆,警方回应...
  10. 关于开源产业的5个真相
  11. 两日公开课:伯克利深度强化学习训练营 | 视频+PPT
  12. 为什么B+树适合做索引
  13. matlab魔方矩阵有哪些,关于matlab 魔方矩阵的1、用前100个自然数创建一个10阶的魔方矩阵,求出每行、每列、所有对角线元素的和,再将矩阵...
  14. ESAPI入门使用方法
  15. 自考 软件工程专业 07028 软件测试 总结
  16. matlab双重差分模型,Stata+Eviews+R:倍分法/双重差分操作教程
  17. window.open 卡死
  18. DAOS整体设计分析 (一)
  19. 爬取抖音数据实践方案《进阶版》
  20. windows server 2003安装组件提示插入cd

热门文章

  1. c语言用循环转换单词首字母,用c++实现将文本每个单词首字母转换为大写
  2. 融资方案的商业计划书
  3. 利用python和GUI实现照片或证件照迅速更换背景底色,还可以自定义背景底色
  4. 甘超波:NLP五步觉察法
  5. Unhandled exception in script的解决方法
  6. 解决google浏览器自动填充密码问题
  7. [Bullet3]常见物体和初始化
  8. CentOS8 离线安装 汉语拼音
  9. Python3,9行代码进行压缩和解压缩,从此告别压缩软件。
  10. 艺工交叉——达芬奇只会画画吗?