学习笔记·堆优化$\mathscr{dijkstra}$
嘤嘤嘤今天被迫学了这个算法……其实对于学习图论来说我内心是拒绝的\(\mathscr{qnq}\)
由于发现关于这个\(\mathscr{SPFA}\)的时间复杂度\(O(kE)\)中的\(k \approx 2\)好像只针对于稀疏图?\(emmm\)想不到时间复杂度居然还有数据分治这一说\(ORZ\)
好的,对于我的图论而言,好像只会\(MST\)、\(\mathscr{MT \ \ Law}\)和最短路?哦呵呵呵呵那可真优秀啊\(QAQ\)
要不是今天上午学了堆优化的,没准我连普通的都不会了!
回归正题,最朴素的\(\mathscr{dijkstra}\)的思想是我们要从已知的点里面选一个离源点最近的,然后以此不断松弛周围的点(代码显性),并保存这个点的最短路(代码隐性)。而\(dijkstra\)遵循的是贪心思想,就是在边权都是正的的情况下,当前找到的最短路一定是对于这个点全局最优,因为不会再有更短的路径了——而显然这个贪心在有负权边的时候的错误的。
于是我们发现,对于其中“找到最近的点”,即当前记录的\(dist_i\)最小的\(i\),是有优化性可言的。朴素是\(O(n)\)的查询,加上堆之后就可以变成\(O(logn)\)。所以原本时间复杂度\(O(mn)\)的\(dijkstra\)就可以优化成\(O(mlogn)\),并且相对稳定。
于是核心的代码就是这一部分啦~
inline void dijistra(){
fill(dist + 1, dist + N + 1, 2147483647) ;
q.push((node){S, 0}) ; dist[S] = 0 ;
while(!q.empty()){
node qwq = q.top() ; q.pop() ;
x1 = qwq.t, x2 = qwq.v ;
if(vis[x1]) continue ; vis[x1] = 1 ;
for(k = head[x1]; k ; k = e[k].next){
dist[e[k].to] = min(dist[e[k].to], x2 + e[k].v) ;
q.push((node){e[k].to, dist[e[k].to]}) ;
}
}
\(qwq\)就这样了
学习笔记·堆优化$\mathscr{dijkstra}$的更多相关文章
- C语言学习笔记——堆和栈——未整理
C语言笔记 栈区 栈stack是一种先进后出的内存结构,所有的自动变量,函数的形参都是由编译器自动放出栈中,当一个自动变量超出其作用域时,自动从栈中弹出.出入栈是由C语言编译器自动分配 ...
- Java学习笔记--堆、栈、常量池
参考资料:http://blog.csdn.net/miraclestar/article/details/6039743 Java内存区域模型主要分为4部分 1.方法区 2.本地方法栈 3.栈 4. ...
- JVM学习笔记——堆
堆 Heap 一个 JVM 只有一个堆,堆也是 Java 内存管理的核心区域.在 JVM 启动时堆被创建,同时大小在启动时已设定好,堆是 JVM 管理最大的一块内存空间,其大小可以调节. 堆的内存空间 ...
- JS学习笔记12_优化
一.可维护性优化 1.添加注释 注释能够增强代码的可读性以及可维护性,当然,理想情况是满满的注释,但这不太现实.所以我们只需要在一些关键的地方添上注释: 函数和方法:尤其是返回值,因为直接看不出来 大 ...
- 《Java程序性能优化》学习笔记 程序优化
这一部分主要介绍代码层的优化.了解如何编写高效而精炼的代码,正确的使用函数方法.1.字符串优化处理Java语言中,String对象可以认为是对char数组的眼神和进一步封装.它主要由3部分组成:cha ...
- 《Java程序性能优化》学习笔记 设计优化
豆瓣读书:http://book.douban.com/subject/19969386/ 第一章 Java性能调优概述 1.性能的参考指标 执行时间: CPU时间: 内存分配: 磁盘吞吐量: 网络吞 ...
- mysql 学习笔记5-- 数据库优化
ext4:(rw,noatime,nodiratime,nobarrier,data=ordered)xfs: (rw,noatime,nodiratim,nobarrier,logbufs=8,lo ...
- Linux学习笔记 --服务器优化
Linux服务器优化 序言: 服务器操作建议 1.严格按照目录规范操作服务器 2.远程服务器不允许关机 3.不要在服务器访问高峰运行高负载命令 4.远程配置防火墙时,不要把自己踢出服务器 一.禁用不必 ...
- Dynamic CRM 2013学习笔记(七)追踪、监控及性能优化
本文将介绍CRM的三个内容追踪.监控及性能优化.追踪是CRM里一个很有用的功能,它能为我们的CRM调试或解决错误.警告提供有价值的信息:我们可以用window的性能监控工具来了解CRM的性能状况:最后 ...
随机推荐
- 传统javabean与spring中的bean的区别
javabean已经没人用了 springbean可以说是javabean的发展, 但已经完全不是一回事儿了 用处不同:传统javabean更多地作为值传递参数,而spring中的bean用处几乎无处 ...
- 移动端实现上拉加载更多(使用dropload.js vs js)
做下笔记,:移动端实现上拉加载更多,其实是数据的分段加载,在这里为了做测试我写了几个json文件作为分段数据: 方式一:使用dropload.js; 配置好相关参数及回调函数就可使用:代码如下 var ...
- CSS通过设置position定位的三种常用定位
CSS中可以通过设置为元素设置一个position属性值,从而达到将不同的元素显示在不同的位置,或者固定显示在某一个位置,或者显示在某一层页面之上. position的值可以设为relative,ab ...
- ArcGIS10+:ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS
ArcGIS10+版本,使用VS创建一个简单的AE应用程序,然后拖放一个toolbar.LicenseControl以及MapControl控件. 接着编译应用程序,编译成功. 然后单击F5运行程序, ...
- 获取本地IP地址的vc代码
作者:朱金灿 来源:http://blog.csdn.net/clever101 获取本地IP地址有两种做法.一种是使用gethostname函数,代码如下: bool CSocketComm::Ge ...
- 深入解析 ERP 计划的各个层次
ERP 生产计划管理按照 ERP 计划的层次主要分为:经营规划.销售和运作规划.主生产计划.物料需求计划.能力需求计划.执行能力计划.执行物料计划等. 经营规划是企业的战略规划,用于确定企业经营目标和 ...
- 使用jvisualvm的jstatd方式远程监控Java程序
使用Java自带的jvisualvm调试Java程序,可以查看CPU.内存.类及线程等信息,还可以进行Dump,无疑是一个利器 由于客户端是Windows.服务端是Linux,并且是最小安装的Linu ...
- C#Owin auth20开发 OwinStartup 不会触发的解决办法
在使用owin auth20设置token时候遇到一个问题.项目中已经存在如下初始化配置类 using Microsoft.Owin; using Owin; [assembly: OwinStart ...
- CDH5.11安装spark2.x详细步骤
简介: 在我的CDH5.11集群中,默认安装的spark是1.6版本,这里需要将其升级为spark2.x版本.经查阅官方文档,发现spark1.6和2.x是可以并行安装的,也就是说可以不用删除默认的1 ...
- oracle 闪回功能详解
Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复.闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行.事务.表和数据库范围.使用闪回特性,您可以查询以前 ...