1. 广度优先搜索找出的是段数最少的路径;狄克斯特拉算法找出最快的路径.
  2. 狄克斯特拉算法包含4个步骤: 1)找出"最便宜"的节点,即可在最短时间内到达的节点. 2)更新该节点的邻居的开销. 3)重复这个过程,直到对图中的每个节点都这样做了. 4) 计算最终路径.
  3. 狄克斯特拉算法用于每条边都有关联数字的图,这些数字称为权重.带权重的图称为加权图,不带权重的图称为非加权图.要计算非加权图的最短路径,可使用广度优先搜索,要计算加权图中的最短路径,可使用狄克斯特拉算法,
  4. 环如图所示, 你可以从A点出发,走到一圈后又回到A点
  5.                                                             
  6. 无向图意味着两个节点彼此指向对方,其实就是环,在无向图中,每条边都是一个环,狄克斯特拉算法只适用于有向无环图.
  7. 如果有负权边,就不能使用狄克斯特拉算法
  8. 在包含负权边的图中,要找出最短路径,可使用另一种算法----贝尔曼-福德算法.
  9. python实现狄克斯特拉算法, 以下图为例:

实现代码:

# 1 把节点的所以邻居都存储到散列表
graph = {}  # 散列表
graph["start"] = {}  # 开始位置的散列表
graph["start"]["a"] = 6
graph["start"]["b"] = 2
print(graph["start"].keys())
graph["a"] = {}  # 起点a能到达哪些点的散列表
graph["a"]["fin"] = 1  # 起点a到终点的权重graph["b"] = {}
graph["b"]["a"] = 3
graph["b"]["fin"] = 5graph["fin"] = {}  # 终点的散列表没有邻居
# 2 用一个散列表来存储每个节点的开销,不知道的开销设为无穷大
infinity = float("inf")  # python中表示无穷大
# 创建开销表的散列表
costs = {}
costs["a"] = 6
costs["b"] = 2
costs["fin"] = infinity
# 3 还需要一个存储父节点的散列表
parents = {}
parents["a"] = "start"
parents["b"] = "start"
parents["fin"] = None# 4 需要一个数组,用于记录处理过的节点,因为对于同一个节点,不用处理多次
processed = []# 算法实现思路 1:只要还有要处理的节点 --> 2: 获取离起点最近的节点 --> 3: 更新其邻居的开销  --> 4:如果有邻居的开销被更新,同时更新
# 其父节点  ---> 5:将该节点标记为处理过 回到第一点
# 找出开销最低的节点
def find_lower_cost_node(costs):lowest_cost = float("inf")lowest_cost_node = Nonefor node in costs:  # 遍历所有的节点cost = costs[node]if cost < lowest_cost and node not in processed:  # 如果当前节点的开销更低且未处理过lowest_cost = cost  # 就将其视为开销最低的节点lowest_cost_node = nodereturn lowest_cost_nodenode = find_lower_cost_node(costs)   # 在未处理的节点中找出开销最小的节点
while node is not None:  # 这个while循环在所有节点都被处理过后结束cost = costs[node]neighbors = graph[node]for n in neighbors.keys(): # 遍历当前节点的所有邻居new_cost = cost + neighbors[n]if costs[n] > new_cost:  # 如果经当前节点前往该邻居更近costs[n] = new_cost  # 就更新该邻居的开销parents[n] = node    # 同时将该邻居的父节点设置为当前节点processed.append(node)       # 将该节点标记为处理过node = find_lower_cost_node(costs)  # 找出接下来要处理的节点,并循环
print("最小的权重:", costs["fin"])
nodeTmp = "fin"
luxian = []
luxian.append(nodeTmp)
while nodeTmp != "start":nodeTmp = parents[nodeTmp]luxian.append(nodeTmp)
print(luxian)

算法图解第七章狄克斯特拉算法读书笔记相关推荐

  1. 算法图解 第7章 狄克斯特拉算法

    本章内容 继续图的讨论,介绍加权图------提高或降低某些边的权重. 介绍狄克斯特拉算法,让你能够找出加权图中前往X的最短路径. 介绍图中的环,它导致狄克斯特拉算法不管用. 在前一章,你找出了从A点 ...

  2. 《算法图解》系列笔记(七)—— 狄克斯特拉算法

    狄克斯特拉算法(Dijkstra's algorithm) 广度优先搜索来查找两点之间的最短路径,那时"最短路径"的意思是段数最少.在狄克斯特拉算法中,你给每段都分配了一个数字或权 ...

  3. 图解算法学习笔记(七):狄克斯特拉算法

    目录 1)使用狄克斯特拉算法 2)术语 3)实现 4)小结 本章内容; 介绍加权图,提高或降低某些边的权重: 介绍狄克斯特拉算法,找出加权图中前往X的最短路径: 介绍图中的环,它导致狄克斯特拉算法不管 ...

  4. 小白的算法初识课堂(part7)--狄克斯特拉算法

    学习笔记 学习书目:<算法图解>- Aditya Bhargava 文章目录 狄克斯特拉算法 具体步骤实现 术语 跳蚤市场 具体步骤实现 负权边 python实现 狄克斯特拉算法 在上一个 ...

  5. 算法详解之狄克斯特拉算法

    上一篇文章,我们了解了广度优先搜索算法(BFS),BFS主要用来解决图的可达路径验证和最小路径问题,即从一个顶点A到另一个顶点B,是否有可达路径,如果有那么求出其到达的最少步骤.那么这里的最短路径就如 ...

  6. 用狄克斯特拉算法计算带权最短路径

    目录 用狄克斯特拉算法计算带权最短路径 狄克斯特拉算法思想 举一个栗子:起点到终点 举二个栗子:换钢琴 Warning 代码代码代码 python C JAVA 图文来源 用狄克斯特拉算法计算带权最短 ...

  7. 狄克斯特拉算法(Dijkstra)详细解释

    文章目录 算法用途(目的) 算法思想与本质 图文解释 代码解析 算法用途(目的) 狄克斯特拉算法的用途或者说是目的是计算单源最短路径.单源最短路径的意思是从一个点出发到另外一个点最为的容易.举个例子解 ...

  8. 《算法图解》学习笔记(七):狄克斯特拉算法(附代码)

    欢迎关注WX公众号:[程序员管小亮] python学习之路 - 从入门到精通到大师 文章目录 欢迎关注WX公众号:[程序员管小亮] [python学习之路 - 从入门到精通到大师](https://b ...

  9. 算法图解part7:狄克斯特拉算法

    算法图解part7:狄克斯特拉(Dijkstra)算法 1.狄克斯特拉算法(Dijkstra's algorithm) 2.术语 3.负权边 4.实现狄克斯特拉算法 4.1 最短路径思路 4.2 py ...

最新文章

  1. MyBatis——@Result注解column参数传递——父查询函数的参数传递到子查询
  2. 每秒10W次高并发订单业务,你怎么实现?
  3. 软件测试职业发展之路的反思(转)
  4. C#中的套接字编程(二) --转
  5. linux服务器进程不存在,查看 Linux 服务器的进程
  6. 华为鸿蒙生态最新消息,魅族加入华为鸿蒙生态?大家先别高兴,此鸿蒙非彼鸿蒙...
  7. 通过adb查看当前页面中显示的窗口Activity名称
  8. 读书笔记 计算机系统--系统架构与操作系统的高度集成 第二章处理器体系结构...
  9. 慕课网EMOS在线办公系统源码笔记1-6章
  10. 从零开始制作小车TB6612控制电机
  11. 其实你不懂我的芯--SIM卡的前世今生
  12. C.就来谈谈深搜与广搜
  13. 【判断是否为手机号】
  14. 智能物流仓储机器人|海格里斯HEGERLS货物夹抱式防倾倒装置四向穿梭车
  15. 最好用的Ins客户端:Flume pro for mac
  16. 怎么把已经初始化的字符数组设置为空?
  17. 《曹云社》走进东软:奇妙的HR数字化
  18. nginx【nginx跨域、nginx开启gizp压缩、nginx服务器部署项目】
  19. 计算机毕业设计(附源码)python语言学习系统
  20. C语言----排班系统

热门文章

  1. vue实现下拉二级联动_vue实现二级联动效果
  2. android ic读卡器,NFC读卡器APP
  3. SQL50题(MySQL)
  4. MYSQL优化自学笔记
  5. 2021年,你读了哪些不错的C++书籍?
  6. 基于STM32的倾斜仪设计(二)—— 硬件设计(2)
  7. 【文件上传漏洞-07】中间件文件解析漏洞概述及实例——Apache、IIS和Nginx
  8. 数据挖掘十大经典算法,你都知道哪些?
  9. 增值税/所得税 概念与区别
  10. Unity3d shader内置矩阵