算法竞赛知识点速通手册

news/2025/10/28 20:42:25/文章来源:https://www.cnblogs.com/xihegudi/p/19172702

1. 基础贪心:邻项交换与证明

贪心算法的精髓在于“局部最优”导向“全局最优”。然而,其正确性并非总是显而易见的,需要严谨的数学证明。邻项交换(Exchange Argument)是证明一类排序相关贪心策略最经典、最强大的武器。其核心思想是:假设存在一个不同于贪心解的最优解,我们可以通过一系列“邻项交换”操作,在不降低解的质量的前提下,逐步将该最优解调整为贪心解。

这个过程通常遵循反证法。我们假设最优解 \(S_{opt}\) 在某个位置首次与贪心解 \(S_{greedy}\) 出现差异。设贪心策略是基于某种排序规则,我们将最优解中不符合该规则的相邻元素进行交换。关键在于证明这次交换不会使解变得更差。如果能证明这一点,我们就能说明任何最优解都可以被转化为贪心解,从而证实了贪心策略的正确性。例如,在经典的活动安排问题中,按结束时间排序的贪心策略,其正确性就可以通过邻项交换来完美证明。从更抽象的视角看,这构建了一个从任意最优解到特定贪心解的“路径”,确保了贪心解的“最优性代表”地位。

2. 最短路 (一):核心算法概览

最短路问题是图论的基石,不同算法适用于不同场景,其背后蕴含着动态规划与贪心思想的交辉。

  • Bellman-Ford & SPFA:两者都基于动态规划的松弛(Relaxation)操作,能处理带负权边的图。Bellman-Ford算法执行 \(V - 1\) 轮迭代,每轮对所有边进行松弛,其状态转移方程可视为 \(d(k, v) = \min_{u \to v} \{ d(k - 1, u) + w(u, v) \}\) ,表示最多经过 \(k\) 条边到达 \(v\) 的最短路。SPFA(Shortest Path Faster Algorithm)是Bellman-Ford的队列优化版本,它只将距离被更新的节点重新入队,在稀疏图和随机数据上表现出色,但其最坏复杂度与Bellman-Ford相同,且在特定构造的图上容易被卡到上限。两者的共同优势在于能够检测负权环。
    Dijkstra: 这是一种基于贪心策略的算法, 要求所有边权非负。它维护一个已确定最短路径的顶点集合 \(S\) , 每次从未在 \(S\) 中的顶点中, 选取一个距离源点最近的顶点 \(u\) 加入 \(S\) , 并用 \(u\) 来松弛其所有出边。正确性的根基在于, 当边权非负时, 一旦一个顶点的最短路被确定, 它不可能再被其他路径更新。使用优先队列 (如二叉堆) 优化后, 其复杂度为 \(O(E \log V)\)
  • Floyd-Warshall:用于计算任意两点间(All-Pairs)的最短路。它采用动态规划思想,其核心状态 \(d(k, i, j)\) 表示从 \(i\)\(j\) 只允许经过编号为1到 \(k\) 的顶点的最短路径长度。状态转移方程为: \(d(k, i, j) = \min(d(k - 1, i, j), d(k - 1, i, k) + d(k - 1, k, j))\)\(O(V^3)\) 的复杂度使其适用于稠密图。
  • Johnson: 在稀疏图上解决带负权边的全源最短路问题。它巧妙地结合了 Bellman-Ford 和 Dijkstra: 首先, 新建一个虚拟源点 \(s\) , 向所有顶点连一条权值为 0 的边, 然后用 Bellman-Ford 计算到所有顶点的最短路 \(h(v)\) 。若无负环, 则将每条边 \((u, v)\) 的权值 \(w(u, v)\) 更新为 \(w'(u, v) = w(u, v) + h(u) - h(v)\) 。可以证明新的边权 \(w'\) 非负, 且任意两点间的最短路径在新图中保持不变 (路径长度的增量为常数)。之后对每个点运行一次 Dijkstra 即可。
  • 差分约束系统:这是一种将特定形式的不等式组与最短路问题联系起来的优美模型。对于一组形如 \(x_{j} - x_{i} \leq c_{k}\) 的不等式,我们可以构造一张图,其中每个变量 \(x_{i}\) 对应一个节点。对于每个不等式 \(x_{j} - x_{i} \leq c_{k}\) ,我们从节点 \(i\) 向节点 \(j\) 连一条权值为 \(c_{k}\) 的边。求解这组不等式等价于在该图上求解最短路。若图中存在负权环,则不等式组无解。

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

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

相关文章

集训做题杂记1 - -MornStar

[CTS2024] 众生之门 小清新构造题。 观察大样例可以发现答案不大于 \(3\),感性猜测可以在路径长度不超过 \(3\) 的情况下遍历整棵树,事实也确实如此。 进一步考虑答案一般为 \(0\) 和 \(1\),只有 \(n\) 比较小或者图…

CF1909I Short Permutation Problem

CF1909I Short Permutation Problem并非独立切,大量参考题解。 对于排列计数问题,考虑三个方向:容斥、连续段DP、按顺序加数。 发现容斥和连续段DP没前途,考虑按顺序加数。从 \(1\) ~ \(n\) 加数显然是不行的,因为…

ROS1 go2 vlp16 局部避障--3 篇 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

25.10.28随笔NOIP模拟赛总结

考试 开考看题,秒了 T1,感觉 T2 是简单 dp,T3 有点神秘不知道,T4 一眼有一个 \(\mathcal O(n^2)\)。于是顺序开题。T1 很快写了,T2 看了一个小时还是不会有点难崩,当时是很快想到一个 dp,设 \(f_{i,j,0/1}\) 表…

第二十八篇

今天是10月28号,上了铁道技术认知。

P8269 [USACO22OPEN] Visits S

P8269 [USACO22OPEN] Visits S 题解题目传送门 博客传送门 首先,每头牛牛都只有一个拜访对象,所以如果考虑图论建模的话,相当于每个点出度都是 1。这相当于图是个基环树森林(注意不只有一棵基环树),而且每个基环…

Luogu P13925 [POKATT 2024] 联合猫国 / The Paw-litical Game 题解 [ 蓝 ] [ 线性 DP ] [ 种类数观察 ]

联合猫国 去年模拟赛做过一道几乎一模一样的题,于是一眼秒了。 本题的一个结论:最终可合并的区间数为 \(\bm{O(n\log n)}\) 级别。 证明可以考虑构造出可合并区间数最多的序列,显然是所有数都相同时的区间数,可以取…

深入解析:【STM32项目开源】基于STM32的独居老人监护系统

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

CSP-S 41多校 9

10.28 (虽然但是下发文件NOIP?)10.28 CSP-S 前倒数第二场模拟赛,直接一道都没切出来。。。 再不放信心赛真要没信心了。 t1 dp题。 显然对于每一次行动都是一个背包dp。 变种在于背包更换,更换后容量重新计算。 所…

【25.10.28】模拟赛

T1 code #include<bits/stdc++.h> using namespace std; const int N=5e4+5,M=1e3+5; int n,m,ans=0; char s[N],t[M]; int nxt[M]; int f[N][M]; int g[M][30]; void getnxt(){nxt[1]=0;int j=0;for(int i=2;i&…

CSP-S模拟41

CSP-S模拟41 A. 数轴取物(axis) 显然可以有一个 \(O(n^3)\) 的背包 dp,设 \(dp[i][j][k]\) 表示选区间 \([i,j]\),背包容量为 \(k\) 时可获得的最大价值。每次枚举固定左端点从小到大枚举右端点,发现 \(dp[i][j]\) …

Linux双中文编码笔记

Linux双中文编码笔记/etc/locale.gen zh_CN.GB18030 GB18030zh_CN.GBK GBK 上面两行默认是被注释掉的,要打开。 /usr/sbin/dpkg-reconfigure/usr/sbin不在普通用户的PATH里,再说运行它也需要root权限。 如果dkpg-rec…

C++类和对象(1) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

人工智能之编程基础 Python 入门:第二章 Python 的编辑器 VS Code

人工智能之编程基础 Python 入门:第二章 Python 的编辑器 VS Code人工智能之编程基础 Python 入门 第二章 Python 的编辑器 VS Code@目录人工智能之编程基础 Python 入门前言一、VS Code安装二、配置PythonVS Code 汉…

2019 福建省队集训录

退役前最后的贡献\(\scr{Day}\ 1\) T1 (sort)Source:$\bf{solution}$$\bf{code}$T2 (sort)Source:$\bf{solution}$$\bf{code}$T3 (sort)Source:$\bf{solution}$$\bf{code}$

AIX multibos bootlist

Check bash bootlist -m normal -o hdisk0 blv=hd5 pathid=0 lspv hdisk0 00cc4bc0964f315a rootvg active hdisk1 00cc4bc028d6260c altinst_root…

记录一次nginx能通但是请求一直不了的问题

今天在公司碰到这样一个问题:开发后在测试环境进行部署,部署后有个调用其他部门的接口,需要通过nginx来代理请求转发到另一个部门。运维把nginx配置完成后,本地和开发测试都正常,但是通过测试环境访问一直是不同的…

【嵌入式】PWM DAC的滤波器设计

PWM DAC PWM概念本身很简单,具体可以参考各网上资料。PWM:脉冲宽度调制(英语:Pulse-width modulation,缩写:PWM),简称脉宽调制,是用脉冲来输出模拟信号的一种技术,一般变换后脉冲的周期固定,但脉冲的工作周…

被称作遗憾之物 爬满了脊骨 又把控了痛楚 被称作无用之物 修筑了唯一的通路

test30 前两题都 0pts,nbm(? 2-A 飞船制造 (spaceship.cpp) 怎么有傻子没开 c++11 写了 rank 然后 re 惹 /fad 考虑依次枚举 \(s=i+j+k\),计算出 \(s\) 一定的方案数就能确定唯一的 \(s\),方案数计算好像只能考虑…

neovim在windwos11下snack.nvim的问题

问题复现 首先确定有 find 命令,在执行之后,会出现下面的问题: Command failed: - cmd: `find . -type f -not -path */.git/* -not -path */.*`几乎百分百。 查找原因 查阅之后得知,问题为调用了linux风格的find命…