
AcWing算法
文章平均质量分 93
AcWing算法
筱姌
不被定义,庆幸自己,我可以是任何样子。我野蛮生长,自己便是月亮。
展开
-
Flood Fill——AcWing 1097. 池塘计数
Flood Fill算法,又称为洪水填充或种子填充算法,是一种在图或网格数据结构中探索连通区域的搜索算法。它从一个初始节点(种子点)开始,将具有相同属性(如颜色、值等)的相邻节点递归或迭代地标记或改变属性值,直到遍历完所有与种子点连通且满足条件的节点。该算法因其形象地模拟了洪水填满低洼地带的过程而得名。原创 2024-06-30 10:45:00 · 1246 阅读 · 0 评论 -
最短路模型——AcWing 188. 武士风度的牛
最短路模型是图论中的一个经典问题,旨在寻找从图中一个顶点到另一个顶点的路径,使得这条路径上的边(或边的权重)之和最小。这一模型在许多实际问题中有着广泛的应用,比如网络路由、地图导航、物流配送等场景。在图论中,最短路问题通常形式化为在一个加权图 G=(V,E)G=(V,E) 中寻找两个顶点 uu 和 vv 之间的最短路径,其中 VV 是顶点集,EE 是边集,每条边 e \in Ee∈E 都有一个非负权重 w(e)w(e)。目标是找到一条从 uu 到 vv 的路径,使得路径上所有边的权重之和最小。原创 2024-07-01 11:30:00 · 727 阅读 · 0 评论 -
DFS之搜索顺序——AcWing 1116. 马走日
DFS之搜索顺序是指在执行深度优先搜索时,遍历图或树中节点的策略。具体而言,DFS会沿着一条路径深入到底,当无法继续深入时回溯,然后选择另一条未探索的路径继续深入。搜索顺序直接影响到搜索效率和剪枝的可能性,合理的顺序可以减少搜索空间,加速找到解的过程。原创 2024-07-05 11:00:00 · 1202 阅读 · 0 评论 -
IDA*——AcWing 180. 排书
IDA*(Iterative Deepening A*)是一种结合了深度优先搜索(DFS)的递归深度限制特性和A搜索的启发式估价函数的搜索算法。它主要用于解决启发式搜索问题,尤其是当搜索空间很大或者搜索成本不确定时。IDA* 是一种最佳优先搜索算法,其基本思想是在深度优先搜索的基础上,通过逐步增加搜索深度并结合A*算法中的估价函数f(n)=g(n)+h(n),来找到从初始节点到目标节点的最短路径。其中,g(n)是从初始节点到当前节点的实际代价,h(n)是从当前节点到目标节点的启发式估计代价。原创 2024-07-07 10:00:00 · 802 阅读 · 0 评论 -
斜率优化DP——AcWing 303. 运输小猫
斜率优化DP(Slope Optimization Dynamic Programming)是一种高级动态规划技巧,用于优化具有特定形式的状态转移方程。它主要应用于那些状态转移涉及求极值(如最小值或最大值)的问题中,通过分析状态转移函数的斜率特性,将原本需要进行多次比较的操作转化为对斜率的管理,从而减少计算量。斜率优化的核心在于利用函数的单调性,通过维护一个数据结构(如单调队列)来避免重复计算,达到优化的目的。原创 2024-06-30 10:15:00 · 724 阅读 · 0 评论 -
A*——AcWing 179. 八数码
A* 算法是一种在图形或地图中寻找最短路径的启发式搜索算法。它通过综合考虑起始节点到当前节点的实际代价和当前节点到目标节点的预估代价,来决定下一步的搜索方向。原创 2024-07-04 15:00:00 · 985 阅读 · 0 评论 -
DFS之剪枝与优化——AcWing 165. 小猫爬山
DFS之剪枝与优化指的是在执行深度优先搜索(DFS, Depth-First Search)时,采取的一系列策略来减少搜索空间,避免无效计算,从而加速找到问题的解。剪枝是指在搜索过程中,当遇到某些条件不符合解的要求或者可以预判后续搜索不会产生有效解时,直接放弃这条搜索路径,这一过程称为剪枝。优化则是指通过调整搜索策略、顺序等,提高搜索效率。原创 2024-07-06 09:30:00 · 713 阅读 · 0 评论 -
迭代加深——AcWing 170. 加成序列
迭代加深搜索(Iterative Deepening Depth-First Search, IDS)是一种结合了深度优先搜索(DFS)和广度优先搜索(BFS)特点的算法。它通过限制搜索树的深度来控制搜索范围,起初以较小的深度限制进行搜索,如果没有找到解,则逐渐增加深度限制,重复搜索过程,直到找到解为止。这种方法既保留了DFS的空间效率(因为它不需要像BFS那样一次性生成所有深度级别的节点),又具有BFS的“全面性”(最终能找到解,如果存在的话),同时还能有效避免陷入深度过大的搜索分支。原创 2024-07-06 14:30:00 · 1105 阅读 · 0 评论 -
双向广搜——AcWing 190. 字串变换
双向广度优先搜索(Bi-directional Breadth-First Search, Bi-BFS)是一种在图或树中寻找两点间最短路径的算法。与传统的单向广度优先搜索相比,它从起始点和目标点同时开始搜索,从而有可能显著减少搜索空间,提高搜索效率,特别是在处理大规模图或者寻找最短路径时更为明显。原创 2024-07-03 10:00:00 · 810 阅读 · 0 评论 -
双向广搜——AcWing 190. 字串变换
双向广搜是图搜索算法的一种变体,与传统的单向广搜不同,它同时从起点和终点(或目标状态)开始进行搜索,直到两个搜索的前沿相遇为止。这种方法可以在某些情况下显著减少搜索空间,尤其是在寻找两点间的最短路径时特别有效,因为搜索不是从一端到另一端,而是从两端向中间靠拢。原创 2024-07-01 14:30:00 · 1059 阅读 · 0 评论 -
A*——AcWing 178. 第K短路
A算法是一种广泛应用于路径搜索和图遍历的启发式搜索算法,它结合了最好优先搜索和Dijkstra算法的优点,旨在找到从初始节点到目标节点的最短路径。A算法在游戏AI、机器人导航、地图路线规划等领域有广泛应用。A*算法的核心在于使用一个评估函数f(n)从起始节点到当前节点的实际代价g(n)。从当前节点到目标节点的预估代价h(n),这是通过启发式函数得到的,用于估计未来成本。因此,对于每个节点n。原创 2024-07-04 09:30:00 · 1544 阅读 · 0 评论 -
数位DP——AcWing 1081. 度的数量
数位DP是一种动态规划技巧,特别适用于处理与数字的位操作相关的问题,如数字序列的计数、数字的生成等问题。它通过将问题分解为对每一位数字的独立考虑,从而简化问题复杂度,实现高效求解。数位DP的核心思想是将原问题转化为对每一位数字进行决策的过程,利用动态规划的思想,从最低位向最高位(或相反)逐位考虑,每一步决策都基于当前已经确定的位数的信息。在这个过程中,通常会用一个状态表示当前处理到哪一位以及之前决策产生的某些约束条件(如数字大小、奇偶性等),并使用一个DP数组来记录到达每个状态的有效解的数量或方案。原创 2024-06-29 15:30:00 · 956 阅读 · 0 评论 -
双端队列广搜——AcWing 175. 电路维修
双端队列广搜(Breadth-First Search with a Deque)是一种图或树的遍历算法变体,它利用了双端队列(Deque,全称Double Ended Queue,允许在其两端进行插入和删除操作)作为数据结构来存储待探索的节点。与传统使用队列的BFS相比,双端队列BFS能够在某些特定问题中更高效地找到最短路径,尤其是当存在多条路径长度相等且需要找到特定类型的目标节点时。原创 2024-07-02 11:00:00 · 693 阅读 · 0 评论 -
多源BFS——AcWing 173. 矩阵距离
多源BFS(多源广度优先搜索)是一种图遍历算法,它是标准BFS(广度优先搜索)的扩展,主要用于解决具有多个起始节点的最短路径问题。在多源BFS中,不是从单一源点开始搜索整个图,而是同时从多个源点出发,寻找这些源点到图中所有其他节点的最短路径。这种方法特别适用于边权都为1的情况,如在网格图中计算点到点的最短曼哈顿距离或欧几里得距离。多源BFS通过初始化一个队列,将所有源节点放入队列中开始。算法执行标准的BFS过程,但每次从队列中取出一个节点进行扩展时,会检查这个节点是否已经被访问过,以避免重复处理。原创 2024-07-03 09:30:00 · 1176 阅读 · 0 评论 -
DFS之连通性模型——AcWing 1112. 迷宫
DFS(深度优先搜索,Depth-First Search)之连通性模型主要用于图论问题中判断图的连通性,即确定图中的所有节点是否可以通过边相互到达。DFS(深度优先搜索,Depth-First Search)之连通性模型主要用于图论问题中判断图的连通性,即确定图中的所有节点是否可以通过边相互到达。原创 2024-07-05 09:00:00 · 899 阅读 · 0 评论 -
最小步数模型——AcWing 1107. 魔板
最小步数模型通常是指在某种约束条件下,寻找从初始状态到目标状态所需的最少操作或移动次数的问题。这类问题广泛存在于算法、图论、动态规划、组合优化等领域。具体来说,它涉及确定一个序列或路径,使得按照特定规则执行一系列步骤后,能够从起始位置或状态转换到目标位置或状态,且所花费的步骤尽可能少。原创 2024-07-02 14:00:00 · 1888 阅读 · 0 评论 -
最近公共祖先——AcWing 356. 次小生成树
最近公共祖先(Lowest Common Ancestor, LCA)是在一棵有根树中,对于两个节点 u和 v,LCA 是所有公共祖先中深度最大的一个节点。换句话说,LCA 是 u 和 v的共同祖先中距离根节点最远的一个。原创 2024-07-11 23:30:11 · 1008 阅读 · 0 评论 -
有向图的强连通分量——AcWing 367. 学校网络
强连通分量(Strongly Connected Components, SCC)是图论中的一个概念,在一个有向图中,如果存在一个子图,使得该子图中的任意两个顶点都相互可达(即从任何一个顶点出发都可以到达该子图中的其他任何顶点),那么这个子图就称为一个强连通分量。注意,这里的“子图”指的是原图的一个极大子集,也就是说,它不能被扩展成更大的满足上述条件的集合。原创 2024-07-12 21:04:43 · 800 阅读 · 0 评论 -
可持久化数据结构——AcWing 255. 第K小数
可持久化数据结构(Persistent Data Structure)是一种在修改时不会改变原有状态的数据结构。每次对数据结构的更新都会产生一个新的版本,而旧版本仍然可用。这种特性使得可持久化数据结构非常适合处理历史版本控制、回滚操作、多线程环境和函数式编程语言。原创 2024-07-15 14:00:00 · 186 阅读 · 0 评论 -
线段树——AcWing 245. 你能回答这些问题吗
线段树是一种用于区间查询和更新问题的数据结构。它通过递归地将一个区间分解为若干子区间,每个节点代表一个子区间的和、最小值、最大值等信息,从而能够在O(log n)时间内完成单点更新和区间查询的操作。线段树的节点数目最多为4n,其中n是原始数组的长度。原创 2024-07-14 14:30:00 · 1658 阅读 · 0 评论 -
并查集——AcWing 239. 奇偶游戏
并查集(Disjoint Set Union,简称DSU),是一种树形的数据结构,常用于处理一些不交集的合并及查询问题。在并查集中,元素被分成多个不相交的集合,每个集合由一个代表元素表示,通过一系列的合并(Union)和查找(Find)操作来维护这些集合的状态。原创 2024-07-14 10:00:00 · 1138 阅读 · 0 评论 -
无向图的双连通分量——AcWing 395. 冗余路径
在无向图中,一个双连通分量(Biconnected Component, BCC)是指这样的子图:删除其中任意一个顶点都不会使这个子图分离成两个或更多个不相连的子图。换句话说,双连通分量是无割点的极大连通子图。原创 2024-07-12 21:33:33 · 1081 阅读 · 0 评论 -
约数个数——AcWing 198. 反素数
约数个数指的是一个正整数的所有正因数的数量。例如,数字6有四个正因数:1, 2, 3, 和 6。因此,6的约数个数为4。原创 2024-07-16 11:00:00 · 772 阅读 · 0 评论 -
拓扑排序——AcWing 164. 可达性统计
拓扑排序(Topological Sort)是对有向无环图(Directed Acyclic Graph,简称DAG)的一种排序方式。在一个有向无环图中,拓扑排序的结果是一个线性的顶点序列,其中对于图中的每一条有向边 (u, v),顶点 u 在序列中都会出现在顶点 v 的前面。如果一个图有多个拓扑排序,那么它不是一个唯一的排序,但所有合法的拓扑排序都符合上述规则。原创 2024-07-13 20:44:47 · 834 阅读 · 0 评论 -
二分图——AcWing 257. 关押罪犯
二分图(Bipartite Graph)是一种特殊的图,在这种图中,顶点可以被分成两个互不相交的集合(设为集合X和Y),并且图中的每一条边都连接一个X集合中的顶点和Y集合中的顶点,没有边连接X集合内的两个顶点,也没有边连接Y集合内的两个顶点。每条边e ∈ E都是在V1和V2之间,即对于任意边(u,v) ∈ E,都有u ∈ V1且v ∈ V2或者u ∈ V2且v ∈ V1。原创 2024-07-13 20:31:53 · 977 阅读 · 0 评论 -
分解质因数——AcWing 197. 阶乘分解
质因数分解是将一个大于1的整数写成一些质数的乘积的过程。每个合数(即非质数的整数)都有唯一的一种质因数分解方式,不计因子的顺序。原创 2024-07-16 12:45:00 · 1195 阅读 · 0 评论 -
平衡树——AcWing 253. 普通平衡树
平衡树是一种自平衡的二叉搜索树,它在进行插入和删除操作后能够自动调整其结构,以保持树的高度尽可能低,从而保证树的查找、插入和删除操作能够在对数时间内完成。最著名的平衡树有AVL树和红黑树。AVL树:是一种严格的平衡树,任何节点的两个子树的高度最多相差1。因此,AVL树是最严格的平衡树之一,保证了树的平衡性,但这也意味着在进行插入和删除操作时可能需要较多的旋转操作来维持平衡。红黑树。原创 2024-07-15 15:30:00 · 777 阅读 · 0 评论 -
排序不等式——AcWing 913. 排队打水
这主要涉及到利用 C++ 的排序操作对数据进行排序后,基于排序结果进行一些分析和处理。原创 2024-06-23 11:00:00 · 895 阅读 · 0 评论 -
动态规划数字三角形模型——AcWing 1015. 摘花生
动态规划数字三角形模型是在一个三角形的数阵中,通过一定规则找到从顶部到底部的最优路径或最优值。原创 2024-06-25 13:00:00 · 992 阅读 · 0 评论 -
动态规划数字三角形模型——AcWing 275. 传纸条
动态规划数字三角形模型是在一个三角形的数阵中,通过一定规则找到从顶部到底部的最优路径或最优值。原创 2024-06-25 14:00:00 · 2223 阅读 · 0 评论 -
Huffman树——AcWing 148. 合并果子
它是一种最优二叉树。通过构建带权路径长度最小的二叉树,经常用于数据压缩等领域。原创 2024-06-24 11:00:00 · 1008 阅读 · 0 评论 -
状态压缩DP——AcWing 291. 蒙德里安的梦想
状态压缩DP是一种利用二进制数来表示状态的动态规划算法。它通过将状态压缩成一个整数,从而减少状态数量,提高算法效率。原创 2024-06-22 10:30:00 · 1095 阅读 · 0 评论 -
记忆化搜索——AcWing 901. 滑雪
记忆化搜索是一种结合了搜索和动态规划思想的方法。它通过将已经计算过的结果存储起来,在后续遇到相同情况时直接返回存储的结果,避免重复计算。原创 2024-06-21 14:45:00 · 952 阅读 · 0 评论 -
区间问题——905. 区间选点
区间通常是指一个连续的范围,可以用数轴上的一段来表示。原创 2024-06-24 13:00:00 · 1113 阅读 · 0 评论 -
数位统计DP——AcWing 338. 计数问题
数位DP(Digital DP)是一种用于解决与数字的数位相关问题的动态规划算法。它将数字的每一位看作一个状态,通过转移状态来计算满足特定条件的数字个数或其他相关统计信息。原创 2024-06-20 15:00:00 · 2016 阅读 · 0 评论 -
树形DP——AcWing 285. 没有上司的舞会
树形 DP 是在树上进行的动态规划。它利用树的结构特点,通过递归或迭代的方式,在每个节点上进行状态计算和转移,以求解最优解。原创 2024-06-21 10:30:00 · 1063 阅读 · 0 评论 -
背包模型——AcWing 423. 采药
背包模型是一种常见的算法问题模型,它主要涉及将一些物品放入一个容量有限的背包中,以达到某种最优目标,如最大化价值或最小化重量等。原创 2024-06-26 11:00:00 · 2362 阅读 · 0 评论 -
最长上升子序列模型——AcWing 272. 最长公共上升子序列
最长上升子序列模型是一种在给定序列中寻找最长上升子序列的问题模型。原创 2024-06-26 14:30:00 · 930 阅读 · 0 评论 -
贪心推公式——AcWing 125. 耍杂技的牛
贪心算法是一种在每一步选择中都采取在当前状态下最优的选择,希望通过局部的最优选择来得到全局最优解的算法策略。原创 2024-06-23 15:00:00 · 949 阅读 · 0 评论 -
绝对值不等式——AcWing 104. 货仓选址
与数学中的绝对值不等式定义一致,即含有绝对值符号的不等式。原创 2024-06-22 10:51:00 · 862 阅读 · 0 评论