蓝桥强化宝典(4)Dijkstra

前言

       Dijkstra算法(迪杰斯特拉算法),又称狄克斯特拉算法,是由荷兰计算机科学家Edsger W. Dijkstra于1959年提出的。该算法主要用于在加权图中查找从一个起始节点到所有其他节点的最短路径,解决的是有权图中最短路径问题。以下是关于Dijkstra算法的详细介绍:

一、算法特点

  • 单源最短路径:Dijkstra算法适用于计算从单个源点到图中所有其他顶点的最短路径。
  • 非负权重:该算法仅适用于所有边的权重都为非负的图。如果图中存在负权边,则应该使用其他算法,如Bellman-Ford算法。
  • 贪心策略:Dijkstra算法采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。

二、算法原理

        Dijkstra算法通过不断选择当前未访问节点中距离起始点最近的节点,并更新该节点到其他节点的最短路径长度,直到所有节点都被访问过。算法的核心在于维护一个距离数组,该数组记录从起始点到图中每个节点的最短路径估计值,并随着算法的进展不断更新。

三、算法步骤

  1. 初始化
    • 创建一个距离数组dist[],用于存储从起始点到图中每个节点的最短路径估计值。初始时,将起始点到自身的距离设为0,到其他节点的距离设为无穷大(或非常大的数)。
    • 创建一个集合visited,用于记录已经访问过的节点。初始时,该集合为空。
  2. 选择节点
    • 在未访问的节点中,选择距离起始点最近的节点u,并将其加入visited集合中。
  3. 更新距离
    • 对于节点u的每个邻接节点v,如果通过节点u到达节点v的距离比当前记录的从起始点到节点v的距离更短,则更新dist[v]为新的更短距离。
  4. 重复步骤
    • 重复步骤2和步骤3,直到所有节点都被访问过。
  5. 输出结果
    • 算法结束后,dist[]数组中存储的就是从起始点到图中每个节点的最短路径长度。

四、算法复杂度

        Dijkstra算法的时间复杂度取决于数据结构的选择。在使用简单的线性查找来选择未访问节点中距离最短的节点时,时间复杂度为O(V^2),其中V是节点数。如果使用优先队列(如最小堆)来优化选择过程,则时间复杂度可以降低到O((V+E)logV),其中E是边数。

五、应用场景

        Dijkstra算法在许多领域都有广泛的应用,包括路线规划网络路由资源分配等需要找到最短路径的场景。

六、注意事项

  • Dijkstra算法要求图中不存在负权边。
  • 在实际应用中,可能需要根据具体问题的特点对算法进行适当的修改和优化。

总结

       综上所述,Dijkstra算法是一种高效且广泛应用的单源最短路径算法,其基于贪心策略的思想使得算法在解决有权图中最短路径问题时具有显著的优势。

 结语  

苦想没盼头

苦干有奔头

!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NLP基础知识2【各种大模型的注意力】

注意力 传统Attention存在的问题优化方向变体有哪些现在的主要变体集中在KVMulti-Query AttentionGrouped-query AttentionFlashAttention 传统Attention存在的问题 上下文约束速度慢,显存占用大(因为注意力考虑整体信息,所以每一个位置都要…

面试(七)

目录 一. 程序中的内存分配方法 二. malloc和new的区别 三. 为什么局部变量未赋值时,每次初始化的结果是不确定的? 四. 编译有几个阶段 每个阶段做什么事情 五. 在FreeRTOS中,二值信号量和互斥量的区别? 六. 在FreeRTOS中&am…

Study--Oracle-07-ASM相关参数(四)

一、ASM主要进程 1、ASM主要后台进程 ASM实例除了传统的DBWn、LGWR、CKPT、SMON和PMON等进程还包含如下几个新后台进程: 2、牛人笔记 邦德图文解读ASM架构,超详细 - 墨天轮 二、数据库实例于ASM实例之间的交互关系 数据库实例与ASM实例之间的交互关系涉及多个步骤和过程,…

PHP家政系统自营+多商户独立端口系统源码小程序

家政行业的新篇章 引言:家政行业的数字化转型 近年来,随着科技的飞速发展和人们生活节奏的加快,家政服务行业也迎来了数字化转型的浪潮。为了提升服务效率、优化用户体验,越来越多的家政公司开始探索“家政系统自营多商户小程序…

用yoloV5做一个口罩检测的全流程实现

制作数据集 收集相关图片: 可以使用爬虫在百度爬取。爬虫代码如下: # -*- coding: UTF-8 -*-""" import requests import tqdmdef configs(search, page, number):""":param search::param page::param number::return:…

界面控件Telerik UI for WPF 2024 Q2亮点 - 全新的AIPrompt组件

Telerik UI for WPF拥有超过100个控件来创建美观、高性能的桌面应用程序,同时还能快速构建企业级办公WPF应用程序。UI for WPF支持MVVM、触摸等,创建的应用程序可靠且结构良好,非常容易维护,其直观的API将无缝地集成Visual Studio…

C++:类和对象2

1.类的默认成员函数 默认成员函数就是用户没有显示实现编译器会自动生成的成员函数称为默认成员函数。一个类,我们在不写的情况下编译器会默认生成6个默认成员函数,分别是构造函数,析构函数,拷贝构造函数,拷贝赋值运算…

Perl数据库交互精要:使用DBI模块连接和操作数据库

引言 Perl作为一种功能强大的脚本语言,提供了与数据库交互的能力,这主要得益于DBI(Database Interface)模块。DBI是一个标准化的数据库访问接口,允许Perl脚本连接到各种类型的数据库并执行SQL语句。本文将详细介绍如何…

kitti数据集转为bag

下载原始的数据集后,通过终端来运行: unzip 2011_10_03_calib.zip和 unzip 2011_10_03_drive_0047_sync.zip这样这个文件夹才算准备好: 然后去下载kitti2bag工具: pip install kitti2bag然后去2011_10_03文件夹下执行&#xf…

大疆创新2025校招内推

大疆2025校招-内推 一、我们是谁? 大疆研发软件团队,致力于把大疆的硬件设备和大疆用户紧密连接在一起,我们的使命是“让机器有温度,让数据会说话”。 在消费和手持团队,我们的温度来自于激发用户灵感并助力用户创作…

泰山派RK3566开发板800x1280MIPI屏设备树补丁

泰山派RK3566开发板800x1280MIPI屏设备树补丁 泰山派下800 X 1280分辨率MIPI屏调试,设备树补丁如下: https://download.csdn.net/download/qq_45143522/89584066 用kernel.patch文件,在泰山派内核源码下打补丁即可完成更新,或者…

嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议数据可视化:智能物流管理系统设计思路流程(附代码示例)

目录 项目概述 系统设计 硬件设计 软件设计 系统架构图 代码实现 1. STM32微控制器与传感器代码 代码讲解 2. MQTT Broker设置 3. 数据接收与处理 代码讲解 4. 数据存储与分析 5. 数据分析与可视化 代码讲解 6. 数据可视化 项目总结 项目概述 随着电子商务的快…

深度学习目标检测入门实战

深度学习目标检测入门实战 一、什么是目标检测二、目标检测常用的数据集(开源)(一)VOC数据集(1)背景知识(2)数据集的下载(3)VOC2007 数据集的标注&#xff08…

chrome 接口请求等待时间(installed 已停止)过长问题定位

参考: 解决实际项目中stalled时间过久的问题 背景: 测试反馈系统开 6 个标签页后, 反应变的很慢 定位: 看接口请求瀑布流, 已停止时间很长, 后端返回速度很快, 确定是前端的问题 推测是并发请求窗口数量的问题, 屏蔽部分一直 pending 的接口, 发现速度正常了, 搜到上面的参…

C++从入门到起飞之——初始化列表类型转换static成员 全方位剖析!

🌈个人主页:秋风起,再归来~🔥系列专栏:C从入门到起飞 🔖克心守己,律己则安 目录 1、初始化列表 2、 类型转换 3. static成员 4、完结散花 1、初始化列表 • 之前我们实现构造函数…

ios 语言基础初探Xcode 工具

iOS语言基础&初探Xcode工具 导言: 随着智能手机的普及,iOS操作系统成为了一个非常受欢迎的移动开发平台。而iOS应用的开发需要掌握相关的编程语言和开发工具。本文将介绍iOS开发的基础知识,包括iOS开发的编程语言和开发工具,…

[Unity] ShaderGraph实现DeBuff污染 溶解叠加效果

本篇是在之前的基础上,继续做的功能衍生。 [Unity] ShaderGraph实现Sprite消散及受击变色 完整连连看如下所示:

python实现建立一个智能小车路径规划

在Python中实现一个智能小车的路径规划系统,你可以采用多种方法和库。这里,将给出一个基于图搜索算法(如A*算法)的简单示例,并结合一些Python库如networkx来处理图的操作,以及matplotlib来可视化路径。 步…

如何在Html界面内实现类似ChatGpt的打字效果

为了在你的代码中添加打字机效果,你可以创建一个函数来逐字展示内容。这个函数会将内容分解成单个字符,然后逐渐显示在页面上。下面是如何实现这个效果的步骤: 1. 定义打字机效果的函数 首先,你需要一个函数来逐步显示文本内容。…

简洁高效的设备稼动率采集系统(一)

前言: 在自动化生产行业,每个公司都需要一款高效的生产设备,那我们怎么体现出设备的高效呢? 可以采集设备的状态,经过成熟的算法,得到设备的稼动率。设备稼动率是衡量生产设备在一定时间内真正处于生产状态…