
算法
文章平均质量分 87
夏子曦
这个作者很懒,什么都没留下…
展开
-
算法——背包问题——0-1背包问题 python代码实现
在资源有限(背包容量有限)的情况下,对具有不同价值和重量的物品进行选择,以达到价值最大化的决策问题。例如,在一次旅行中,旅行者的背包容量有限,需要从各种不同重量和价值的物品中选择携带哪些物品,以在不超过背包容量的前提下,使携带物品的总价值最高。:给定 n 个物品,每个物品有重量 wi 和价值 vi,以及一个容量为 W 的背包。每个物品只能选择 放入或不放入 背包,求如何选择物品使得总价值最大且总重量不超过 W。( O(N \times V) ),其中 ( N ) 为物品数量,( V ) 为背包容量。原创 2025-04-21 14:21:50 · 396 阅读 · 0 评论 -
算法——背包问题(分类)
问题类型物品选择规则典型算法0-1 背包问题每个物品最多选一次动态规划完全背包问题每个物品可以无限选动态规划多重背包问题每个物品有数量限制动态规划 + 状态压缩分数背包问题物品可以分割贪心算法二维费用背包问题多维度约束动态规划分组背包问题每组最多选一个物品动态规划有依赖的背包问题物品之间存在依赖关系动态规划 + 图论混合背包问题多种背包问题的组合动态规划子集和问题判断是否存在满足条件的子集动态规划多目标背包问题多目标优化多目标优化算法。原创 2025-04-21 14:13:02 · 347 阅读 · 0 评论 -
算法——结合实际例子理解动态规划
动态规划的核心是“以空间换时间”,通过存储子问题解避免重复计算,适用于具有最优子结构和重叠子问题的场景。与贪心、分治等算法的区别在于对“子问题依赖关系”的处理:动态规划显式利用重叠子问题,而贪心依赖局部最优,分治处理独立子问题。优化关键:分析状态转移的依赖关系,通过滚动数组、记忆化等手段减少空间和时间开销,同时确保状态定义准确反映问题的最优子结构。原创 2025-04-16 13:36:47 · 839 阅读 · 0 评论 -
算法——通俗讲解升幂定理
想象你有一盏灯,光线穿过一层玻璃(基础台阶),每层玻璃会过滤掉一定颜色的光(质数 ( p ))。最终过滤掉的层数 = 基础层数 + 放大镜的“放大能力”。:( 10^6 - 1 = 999999 = 3^3 times 37037 ),确实含3³。text{总层数} = text{基础层数}(a - b) + text{放大能力}(n)v_3(6) = 1 quad (text{因为 } 6 = 3^1 times 2)v_2(3) = 0 quad (text{3中无2的因子})原创 2025-04-15 21:38:22 · 909 阅读 · 0 评论 -
算法——置换与排列【基础】
排列是“有序选择”,关注元素的顺序排列。置换是“重新映射”,关注集合内部元素的对应关系。当排列的对象是集合自身(即全排列)时,排列与置换的概念重合。通过例子和图示可以清晰看到:排列是置换的一种表现形式,而置换是排列的抽象化。原创 2025-04-15 21:18:32 · 281 阅读 · 0 评论 -
算法——果蝇算法
果蝇算法(Fruit Fly Optimization Algorithm,FOA)是一种受果蝇觅食行为启发而开发的群智能优化算法。原创 2025-04-15 21:03:35 · 1118 阅读 · 0 评论 -
算法——Lyndon分解
是将一个字符串 ( s ) 唯一分解为若干 Lyndon 串的序列 ( s = w_1w_2\cdots w_k ),满足 ( w_1 \geq w_2 \geq \cdots \geq w_k )(字典序非递增)。,当且仅当对于其所有真后缀 ( t )(即 ( t \neq s ) 且 ( t ) 是 ( s ) 去掉前若干字符后的子串),都有 ( s < t )(字典序比较)。Duval 算法是高效计算 Lyndon 分解的方法,时间复杂度为 ( O(n) ),适用于长度为 ( n ) 的字符串。原创 2025-04-09 08:32:49 · 772 阅读 · 0 评论 -
算法——最小表示法
最小表示法的高效性(O(n)需要快速标准化循环结构(如字符串、数据序列)。大规模数据去重(如日志、生物数据)。算法优化(避免暴力比较的 O(n²) 复杂度)。其核心优势在于将循环问题转化为线性处理,是处理循环同构问题的利器。原创 2025-04-07 10:10:32 · 679 阅读 · 0 评论 -
算法——高精度计算
什么是高精度算法?它是处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数。但近几年的CSPJ/S复赛貌似从未单独考过高精度算法,但有时会和其他算法一起考。所以还是有学习的必要。高精度计算是指参与运算的数的范围大大超出了标准数据类型能表示的范围的运算。如100位数字和100位数字的加减乘除运算。为处理高精度计算,我们使用数字数组来表示高精度数字。原创 2025-03-10 16:50:51 · 962 阅读 · 0 评论 -
算法——Manacher算法
Manacher算法用一个辅助数组Len[i]表示以字符T[i]为中心的最长回文字串的最右字符到T[i]的长度,比如以T[i]为中心的最长回文字串是T[l,r],那么Len[i]=r-i+1。原创 2025-03-01 22:54:21 · 722 阅读 · 0 评论 -
算法——序列自动机
通过序列自动机,可显著提升子序列匹配效率,适用于需要频繁查询的场景。根据实际需求调整字符集处理方式,平衡时间与空间复杂度。其核心思想是通过预处理目标字符串,构建状态转移表,从而在O(1)时间复杂度下支持多次子序列查询。序列自动机是一种用于高效判断一个字符串是否为另一个字符串的。原创 2025-02-27 22:28:12 · 541 阅读 · 0 评论 -
算法——后缀自动机
后缀自动机作为一种强大而高效的数据结构,在字符串处理领域展现出了独特的魅力和卓越的性能。它通过巧妙的状态压缩和转移机制,能够以线性的时空复杂度处理各种复杂的字符串问题,为我们解决实际问题提供了有力的工具。从原理上看,后缀自动机基于字符串的后缀信息和 endpos 等价类的概念,构建了一个紧凑而高效的有向无环图结构。这种结构不仅能够完整地表示字符串的所有子串,还通过后缀链接等特性,为各种字符串操作提供了便捷的途径。原创 2025-02-26 20:35:56 · 893 阅读 · 0 评论 -
算法——后缀平衡树
先回想一下之前讨论的内容。之前我们详细讨论了后缀树,包括它的构建、应用以及相关算法。用户可能是在了解后缀树之后,想要进一步探索相关的数据结构,或者是想比较后缀树和后缀平衡树的异同。后缀平衡树并不是一个常见的数据结构名称,是结合了后缀结构和平衡树特性的结构,或者可能是某种特定应用中的数据结构。也有可能存在拼写错误或翻译问题,比如用户可能想说的是“平衡后缀树”或者“后缀数组的平衡树实现”。接下来,我应该考虑常见的相关数据结构。原创 2025-02-25 22:09:08 · 906 阅读 · 0 评论 -
算法——后缀树
后缀树是一种树形数据结构,它包含了一个字符串的所有后缀,并且通过树的结构来高效地组织和表示这些后缀信息。它是一种压缩的 trie 树,其中从根节点到叶子节点的每条路径都对应着字符串的一个后缀。例如,对于字符串 “banana”,它的后缀树会包含 “banana”、“anana”、“nana”、“ana”、“na” 和 “a” 这些后缀。原创 2025-02-25 21:34:51 · 979 阅读 · 0 评论 -
算法——AC自动机
构建Trie树,插入所有模式串。使用BFS构建每个节点的fail指针:根节点的fail指针为null。根节点的子节点的fail指针指向根。对于其他节点curr,其父节点为parent,字符为c:找到parent的fail指针指向的节点f。查看f的子节点是否有字符c的节点fc:如果存在,curr的fail指针指向fc。如果不存在,继续沿着f的fail指针向上找,直到根节点。如果找到某个节点有c子节点,则curr的fail指针指向该子节点;否则指向根。原创 2025-02-24 20:37:03 · 901 阅读 · 0 评论 -
算法——Trie 树
Trie 树通过共享前缀的特性,在字符串匹配、前缀搜索等场景中表现优异,尤其适合需要频繁前缀匹配的应用(如输入法、搜索引擎)。但其空间开销较大,实际使用时需结合具体需求权衡利弊。)是一种高效处理字符串集合的树形数据结构,核心思想是通过共享公共前缀来优化存储和查询。原创 2025-02-24 19:59:25 · 1080 阅读 · 0 评论 -
算法——母牛的故事(递归+迭代)
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?这是一个经典的递推问题,可以通过分析每年母牛数量的变化规律,使用递归来或者迭代的方式来解决。下面我们先分析规律,再分别给出递归和迭代的C语言实现。原创 2025-02-23 09:58:15 · 530 阅读 · 0 评论 -
算法——Z函数
【代码】算法——Z函数。原创 2025-02-23 09:53:37 · 602 阅读 · 0 评论 -
算法——KMP算法(Knuth-Morris-Pratt算法)
(即“失败函数”或“next数组”)避免在匹配失败时回溯主串,从而将时间复杂度优化到。(Knuth-Morris-Pratt算法)是一种高效的。(n是主串长度,m是模式串长度),远优于暴力匹配算法的。其核心思想是通过预处理模式字符串,利用。掌握KMP算法的核心在于理解。原创 2025-02-22 11:47:53 · 455 阅读 · 0 评论 -
算法——Boyer-Moore算法
Boyer-Moore算法是一种高效的字符串匹配算法,由Robert S. Boyer和J Strother Moore于1977年提出。该算法的核心思想是通过预处理模式串,利用字符比较的不匹配信息来跳过尽可能多的目标字符,从而快速定位可能的匹配位置,减少比较次数。Boyer-Moore算法以其高效性和巧妙的设计在字符串匹配领域占据重要地位。通过深入理解其原理和实现,我们可以更好地应用这一算法来解决实际问题。希望本文能对读者有所帮助,并在实践中发挥Boyer-Moore算法的优势。原创 2025-02-21 22:41:24 · 999 阅读 · 0 评论 -
算法——舞蹈链算法
舞蹈链算法通过双向链表的动态调整,将精确覆盖问题的搜索效率提升到极致。尽管实现复杂,但它在处理组合优化问题时表现卓越,尤其适合约束严格的场景。理解其核心在于掌握链表操作与回溯思想的结合。原创 2025-02-18 20:41:55 · 1170 阅读 · 0 评论 -
算法——结合实例了解Minimax算法(极小化极大算法)
Minimax算法通过模拟对手最优策略,为当前玩家提供最稳健的决策。其核心是。原创 2025-02-17 20:18:12 · 1848 阅读 · 0 评论 -
算法——Alpha-Beta剪枝搜索
(1)将走棋方定为MAX方,因为它选择着法时总是对其子节点的评估值取极大值,即选择对自己最为有利的着法;(2)将应对方定为MIN方,因为它走棋时需要对其子节点的评估值取极小值,即选择对走棋方最为不利的、最有钳制作用的着法。(3)在对博弈树(博弈树是指由于动态博弈参与者的行动有先后次序,因此可以依次将参与者的行动展开成一个树状图形。)采取深度优先的搜索策略时,从左路分枝的叶节点倒推得到某一层MAX节点的值,可表示到此为止得以“落实”的着法最佳值,记为α。(4)显然此值可作为MAX方着法指标的下界。原创 2025-02-16 11:31:55 · 2288 阅读 · 0 评论 -
算法——结合经典示例了解回溯法
需要穷举所有可能性问题有明确的约束条件解空间呈现树状结构组合、排列、选择类问题回溯法作为一种强大而灵活的算法策略,在解决复杂问题时展现出独特的优势。通过不断尝试和回溯,它能够在庞大的解空间中找到满足特定条件的解。从理论层面看,回溯法基于深度优先搜索的思想,巧妙地利用递归实现对各种可能性的探索。在实际应用中,无论是路径搜索、游戏 AI,还是资源分配等领域,都能看到回溯法的身影,它为解决现实世界中的诸多难题提供了有效的途径。原创 2025-02-15 16:19:18 · 456 阅读 · 0 评论 -
算法——对比A*算法与IDA*算法
A*算法是一种启发式搜索算法,结合了Dijkstra算法的最短路径保证和贪心最佳优先搜索的高效导向性。其核心是评估函数算法(Iterative Deepening A将迭代加深(Iterative Deepening)与A*结合,通过逐步放宽的阈值进行深度优先搜索(DFS),每次搜索限制 ( f(n) ) 不超过当前阈值,避免内存爆炸。3. Avs IDA。原创 2025-02-14 22:52:54 · 971 阅读 · 0 评论 -
算法——结合实例了解启发式搜索
启发式搜索是一类基于估计值(启发式函数)来指导搜索的算法。其基本思想是利用启发信息来指导搜索过程,从而加速搜索并找到解决方案或更接近目标的解。启发信息通常由启发函数提供,该函数能够评估节点的重要性或接近目标的程度。在搜索过程中,启发式搜索算法会优先扩展那些更有可能包含解或更接近目标的节点,从而显著提高搜索效率。原创 2025-02-14 21:34:01 · 1795 阅读 · 0 评论 -
算法——结合实例了解广度优先搜索(BFS)搜索
广度优先搜索(BFS)是一种基础且重要的搜索算法,其核心在于从起始节点出发,借助队列实现逐层扩展搜索,直到找到目标节点或遍历完所有可达节点。在工作原理上,BFS 通过选择起始节点,将其加入队列,然后不断从队列中取出节点,访问该节点并将其未访问的邻居节点加入队列,从而实现按层次遍历。从时间复杂度来看,使用邻接表表示图时,BFS 的时间复杂度为 O (V + E) ,这是因为每个顶点和每条边都会被访问一次;使用邻接矩阵表示图时,时间复杂度为 O (V²) ,因为需要遍历整个矩阵。原创 2025-02-13 20:49:29 · 780 阅读 · 0 评论 -
算法——结合实例了解深度优先搜索(DFS)
深度优先搜索作为一种基础且强大的搜索算法,在解决各类路径搜索问题中展现出独特的优势。通过马走日和走迷宫这两个实例,我们深入理解了 DFS 的工作原理、实现步骤以及在实际应用中的注意事项。在马走日的问题中,我们利用 DFS 探索马在棋盘上的所有可能移动路径,计算遍历整个棋盘的途径总数,这体现了 DFS 在处理具有特定规则的移动和状态空间搜索问题上的有效性。而在走迷宫的场景里,DFS 帮助我们从起点出发,通过不断探索和回溯,寻找通往终点的路径,展示了其在解决复杂空间搜索问题的能力。原创 2025-02-13 20:27:38 · 1014 阅读 · 0 评论 -
算法——数学建模中的“上帝掷骰子”:蒙特卡罗算法
特性传统网格法蒙特卡罗采样精度在适当条件下非常高受样本数量影响,但维度无关计算成本随着维度增加迅速上升维度无关,但需大量样本处理复杂几何的能力较弱,尤其是非规则形状强,能有效处理复杂几何并行化潜力中等,部分步骤可并行高,几乎完全并行在实际应用中,选择哪种方法取决于具体问题的需求和约束条件。例如,在金融建模中,蒙特卡罗方法常用于风险评估和期权定价,而在流体力学领域,传统网格法则更常用。原创 2025-02-12 22:11:10 · 1166 阅读 · 0 评论 -
算法——搜索算法:原理、类型与实战应用
搜索算法,简单来说,就是在给定的数据集中查找特定元素或满足特定条件元素的一系列计算步骤。它的本质是对数据集合的一种遍历和筛选过程,旨在从大量的数据中精准地定位到我们所需要的信息。例如,在一个包含学生成绩的列表中,我们要查找某个学生的成绩,就可以使用搜索算法来实现。假设这个列表是,我们要查找成绩为 92 的元素,搜索算法就会按照一定的规则在这个列表中进行查找,最终找到对应的位置。搜索算法的应用极为广泛,在数据库管理系统中,它用于快速检索数据;在搜索引擎中,帮助用户从海量网页中获取相关信息;原创 2025-02-12 22:10:32 · 1960 阅读 · 0 评论 -
算法——数学建模的十大常用算法
数学建模的十大常用算法在数学建模竞赛和实际问题解决中起着至关重要的作用。请注意,以上代码仅为示例,实际应用中需根据具体问题进行修改和扩展。数学建模过程中,选择合适的算法并正确实现是解决问题的关键。原创 2025-02-12 22:10:16 · 2403 阅读 · 0 评论 -
算法——用C语言解答汉诺塔问题
汉诺塔,又称河内塔,是一个益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。原创 2025-02-12 13:32:30 · 870 阅读 · 0 评论 -
算法——二分查找
(英语:binary search),也称折半查找(英语:half-interval search)、对数搜索(英语:logarithmic search),是用来在一个有序数组中查找某一元素的算法。二分查找算法仅适用于有序序列,它只能用在升序序列或者降序序列中查找目标元素。原创 2024-12-24 17:41:32 · 811 阅读 · 0 评论 -
算法基础——递归
n!F(n)=F(n−1)+F(n−2)对于n≥2。原创 2024-12-21 17:59:31 · 529 阅读 · 0 评论 -
hash冲突的原因以及解决方案
hash冲突,即哈希冲突,是指在使用哈希函数时,不同的输入(键)通过哈希函数映射到同一个哈希值或者同一个哈希表索引位置的情况。原创 2024-12-02 19:20:24 · 648 阅读 · 0 评论 -
生成唯一ID的作用?有哪些方式方法?
UUID是一种128位的全局唯一标识符,通常以32位的十六进制字符表示。UUID的生成不依赖于中央控制机构,因此可以在分布式系统中确保唯一性。原创 2024-11-28 20:57:55 · 710 阅读 · 0 评论 -
电商系统中,如何解决部分商品在短时间大量访问的单一热点问题?------Range范围分片
Range范围分片是选择一个或多个字段作为分片键,然后将分片键的取值范围划分为多个区间,每个区间对应一个分片或节点。数据根据分片键的值被分配到对应的分片或节点上。这种分片方式使得相同范围内的数据被存储在一起,便于进行范围查询和优化。原创 2024-11-09 22:21:30 · 1254 阅读 · 0 评论 -
算法的时间复杂度和空间复杂度
O(1):常数时间,算法的执行时间不随输入数据规模变化。O(logn):对数时间,常见于二分查找等算法。O(n):线性时间,算法的执行时间与输入数据规模成正比。O(nlogn):线性对数时间,常见于快速排序、归并排序等算法。O():平方时间,常见于简单的嵌套循环。O():指数时间,常见于暴力搜索等算法。O(n!):阶乘时间,通常表示非常耗时的算法。上面从上至下依次的时间复杂度越来越大,执行的效率越来越低。下面选取一些常见的进行讲解。原创 2024-11-02 10:02:44 · 1029 阅读 · 0 评论 -
排序算法的分类、时间空间复杂度
排序是计算机科学和数学中的基本操作,有多种不同的方式,每种方式都有其特定的时间复杂度和空间复杂度。原创 2024-11-01 22:26:58 · 294 阅读 · 0 评论