【算法图解】第七章:7.5(狄克斯特拉算法优化版)
请求参数为:图对应的散列表graph,开始节点start(可选,不选默认为’start’)
def solution(graph, start='start'):processed = [] # 定义列表记录已计算开销的节点parents = {} # 定义父节点散列表costs = {} # 定义开销散列表parents_keys = [k for k in graph.keys() if k != start]for key in parents_keys:if key in graph[start]:parents[key] = startcosts[key] = graph[start][key]else:parents[key] = Nonecosts[key] = float('inf')node = find_lowest_cost_node(costs=costs, processed=processed) # 调用函数找到消费散列表中开销最小但未计算开销的节点while node is not None: # 循环结束的条件为计算完所有的节点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_lowest_cost_node(costs=costs, processed=processed) # 调用函数找到消费散列表中开销最小但未计算开销的节点return costs, parents, processeddef find_lowest_cost_node(costs, processed):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 = costlowest_cost_node = nodereturn lowest_cost_nodeif __name__ == '__main__':graph = {'start': {'a': 6, 'b': 2}, 'a': {'end': 1}, 'b': {'a': 3, 'end': 5}, 'end': {}}for x in solution(graph=graph):print(x)
【算法图解】第七章:7.5(狄克斯特拉算法优化版)相关推荐
- 小白的算法初识课堂(part7)--狄克斯特拉算法
学习笔记 学习书目:<算法图解>- Aditya Bhargava 文章目录 狄克斯特拉算法 具体步骤实现 术语 跳蚤市场 具体步骤实现 负权边 python实现 狄克斯特拉算法 在上一个 ...
- 算法图解第七章狄克斯特拉算法读书笔记
广度优先搜索找出的是段数最少的路径;狄克斯特拉算法找出最快的路径. 狄克斯特拉算法包含4个步骤: 1)找出"最便宜"的节点,即可在最短时间内到达的节点. 2)更新该节点的邻居的开销 ...
- 狄克斯特拉算法(Dijkstra)详细解释
文章目录 算法用途(目的) 算法思想与本质 图文解释 代码解析 算法用途(目的) 狄克斯特拉算法的用途或者说是目的是计算单源最短路径.单源最短路径的意思是从一个点出发到另外一个点最为的容易.举个例子解 ...
- Dijkstra(狄克斯特拉) 算法
文章目录 加权图 算法步骤 算法实现: 适用场景: 负权边 该算法是一种计算有向无环图最短路径的算法. 加权图 其中每个数字表示时间.要计算非加权图中的最短路径,可使用广度优先搜索.要计算加权图中的最 ...
- 《算法图解》学习笔记(七):狄克斯特拉算法(附代码)
欢迎关注WX公众号:[程序员管小亮] python学习之路 - 从入门到精通到大师 文章目录 欢迎关注WX公众号:[程序员管小亮] [python学习之路 - 从入门到精通到大师](https://b ...
- 图解算法学习笔记(七):狄克斯特拉算法
目录 1)使用狄克斯特拉算法 2)术语 3)实现 4)小结 本章内容; 介绍加权图,提高或降低某些边的权重: 介绍狄克斯特拉算法,找出加权图中前往X的最短路径: 介绍图中的环,它导致狄克斯特拉算法不管 ...
- 算法图解 第7章 狄克斯特拉算法
本章内容 继续图的讨论,介绍加权图------提高或降低某些边的权重. 介绍狄克斯特拉算法,让你能够找出加权图中前往X的最短路径. 介绍图中的环,它导致狄克斯特拉算法不管用. 在前一章,你找出了从A点 ...
- 《算法图解》系列笔记(七)—— 狄克斯特拉算法
狄克斯特拉算法(Dijkstra's algorithm) 广度优先搜索来查找两点之间的最短路径,那时"最短路径"的意思是段数最少.在狄克斯特拉算法中,你给每段都分配了一个数字或权 ...
- 算法图解part7:狄克斯特拉算法
算法图解part7:狄克斯特拉(Dijkstra)算法 1.狄克斯特拉算法(Dijkstra's algorithm) 2.术语 3.负权边 4.实现狄克斯特拉算法 4.1 最短路径思路 4.2 py ...
- 算法之狄克斯特拉算法 --《图解算法》
2019你好!好好生活,好好工作! 狄克斯特拉算法 狄克斯特拉算法(Dijkstra )用于计算出不存在非负权重的情况下,起点到各个节点的最短距离 可用于解决2类问题: 从A出发是否存在到达B的路径: ...
最新文章
- 使用 Caddy 自动化发布 Web 应用
- 推荐MIT的电路与电子学
- QT判断多级目录是否存在,不存在就创建
- Redis之Hash数据结构
- python默认参数举例_Python之在函数中使用列表作为默认参数
- 使用MUI框架,模拟手机端的下拉刷新,上拉加载操作。
- SOA(在Tuscany 中开发web service)
- python的进程和线程
- 为了项目上线而加班,真有必要吗?
- 编译原理教程_2 文法和语言
- JQuery验证车牌号(含新能源车牌)
- python怎么用sin_Python math.sin() 方法
- 高通camera结构(摄像头基础介绍)
- 四、降维——流形学习 (manifold learning)
- keep怎么弄轨迹动画_keep怎么录视频?教学视频录像和轨迹动画视频录制方法介绍...
- 5G NR 网络切片是什么意思
- 中文文本纠错算法走到多远了?
- java 匹配任意字符_正则表达式匹配任意字符(包括换行符)
- Quartz 实现画图片、写文字、画线、椭圆、矩形、棱形等 二
- Spring Data JPA 2. HelloWorld