首页 > 编程语言 >最短路算法笔记

最短路算法笔记

时间:2024-10-25 11:58:11浏览次数:6  
标签:pq 短路 算法 笔记 dijkstra ind dis

最短路算法

最短路算法可大致分为三类:无负权边的单源最短路,有负权边的单源最短路和多源汇最短路

dijkstra 算法

dijkstra 算法是求无负权边的单源最短路的常用算法,基于贪心的思想

其过程大致为:

  1. 找到距离已经确定最短路的连通块的最近的点
  2. 把他加入已经确定最短路的连通块
  3. 用这个点去更新其他点的最短路

在此就不解释此算法的正确性

朴素版 dijkstra

我们可以看出,朴素版 dijkstra 的时间复杂度是 $ O(N^2) $ 的
对于每次找到距离距离已经确定最短路的连通块的最近的点这一步操作我们可以用堆来实现
因此我们就得到了堆优化版的 dijkstra

堆优化版 dijkstra
void dijkstra() {
	priority_queue<PII, vector<PII>, greater<PII>> pq;
	memset(dis, 0x3f, sizeof(dis));
	dis[s] = 0;
	pq.push({0, s});
	while (pq.size()) {
		auto t = pq.top();
		pq.pop();
		int ind = t.second;
		if (vis[ind]) continue;
		vis[ind] = true;
		for (int i = h[ind]; i != -1; i = ne[i]) {
			if (dis[e[i]] > t.first + w[i]) {
				dis[e[i]] = t.first + w[i];
				pq.push({dis[e[i]], e[i]});
			}
		}
	}
}

由于可以看出堆优化版 dijkstra 的时间复杂度是 $ O(MlogN) $ 的

所以我们在稠密图中跑朴素版 dijkstra ,在稀疏图中跑堆优化版 dijkstra

标签:pq,短路,算法,笔记,dijkstra,ind,dis
From: https://www.cnblogs.com/zyrddd/p/17717108.html

相关文章

  • 用于数据挖掘的分类算法有哪些
    数据挖掘的分类算法是一类用于识别和预测类别的算法,主要包括:1.决策树,如C4.5和CART,适用于可解释性强的场景;2.SVM(支持向量机),适合线性和非线性分类问题;3.随机森林,集成多个决策树以提高准确性;4.K-近邻算法,基于相似性进行分类。其中,随机森林以其出色的准确性和鲁棒性在许多实际应......
  • CodeQL学习笔记(1)-QL语法(逻辑连接词、量词、聚合词、谓词和类)
    最近在学习CodeQL,对于CodeQL就不介绍了,目前网上一搜一大把。本系列是学习CodeQL的个人学习笔记,根据个人知识库笔记修改整理而来的,分享出来共同学习。个人觉得QL的语法比较反人类,至少与目前主流的这些OOP语言相比,还是有一定难度的。与现在网上的大多数所谓CodeQL教程不同,本系列基于......
  • [NOI 2018] 屠龙勇士 做题笔记
    传送门前言我是唐诗,考场没开这题。导致看都没看,直接考试策略大失误。其实知道了这题是个扩展中国剩余定理之后就很好做了。题意非常奇妙。小D最近在网上发现了一款小游戏。游戏的规则如下:游戏的目标是按照编号\(1\rightarrown\)顺序杀掉\(n\)条巨龙,每条巨龙拥有一......
  • 代码随想录算法训练营第24天(补第13天)|226.翻转二叉树, 101. 对称二叉树,104.二叉树的最
    226.翻转二叉树文章链接:https://programmercarl.com/0226.翻转二叉树.html#算法公开课题目链接:https://leetcode.cn/problems/invert-binary-tree/description/迭代法:这里使用了前序遍历来交换左右孩子节点classSolution{public:TreeNode*invertTree(TreeNode*r......
  • 双非院校,0项目经验,三个月入职大厂NLP算法岗,月薪30k+
    金九银十马上就要过去,NLP算法求职几家欢喜几家愁。有人offer拿到手软,有人从灰飞烟灭到人间地狱。我们用了2个月的时间,调研了200多位NLP工程师和100个在2024年热招的岗位,对过去一年NLP领域人才求职和热招岗位情况深度分析了一下。发现了一些情况,以飨大家。01NLP算法求职更......
  • C#学习笔记(十一)
    C#学习笔记(十一)第八章垃圾回收机制GC与类的静态方法一、垃圾回收机制GC1.对象如何被销毁的二、类的静态方法1.静态方法的使用2.为什么会报错2.1静态方法定义中的报错2.2方法使用中的报错3.什么情况下用静态第八章垃圾回收机制GC与类的静态方法一、垃圾......
  • 蓝桥杯大赛 ——首场算法团队战题解
    1. 不同角度【算法赛】在生活中,我们总是根据数值的大小来判断两个数字的大小关系。例如,9999 总是小于 100100,999999 总是小于 10001000。但如果我们换一个角度,将 999999 和 10001000 看成是两个数字字符串,并用字典序来比较它们的大小,那么此时,999999 将大于 10001000。......
  • EM算法1
    工作中涉及了EM算法,重新学习一下不清晰的概念。偶然发现了国外的教材,不经感叹国外的教材写的是真的好。掰开揉碎了,一行行的讲公式的意思,讲变量的由来。反观国内的教材,啥也不说,啪啪啪几行公式列下来,标注几个变量,仿佛生怕多说几个字让你学会了。让人懵逼进来懵逼出去。该文献的标......
  • 博弈论学习笔记【施工中】
    SG函数首先定义就不用我讲了吧,还不会的自己查下看看。我们主要想把SG函数这个玄妙的东西的运用搞清楚。再进一步理解一下吧:黑色数字是节点编号,红色是SG函数值看下它的过程:首先5和6没有后继节点,为必败态,先赋值为03只有6一个后继节点,计算得1现在我们已经得......
  • 二分图的判别(染色法、匈牙利算法)
    二分图的判别:首先二分图是指一个图如果没有奇数环,则该图是二分图。其实这两种算法都是基于dfs来做的,要深刻理解每个算法的dfs指代的是什么。1、染色法:所谓的染色是指所有边的每一条边的两个端点颜色不同,算法思路就是让每个顶点都做一次dfs,判断其中有无同一条边的端点颜色相同。......