
算法与数据结构
文章平均质量分 75
不语n
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C语言指针与参数传递详解 —— 从底层存储到高效编程
本文介绍了指针在编程中的核心应用。指针作为存储变量地址的变量,能够高效传递大容量数据(如数组、结构体),避免值传递的复制开销。文章详细解析了指针的定义、存储机制(小端模式为主)、基本操作及与数组的关系,并重点阐述了指针传参的优势:节省内存、实现多返回值(通过输出参数)、保护数据(const修饰)和模块封装(返回指针)。最后举例说明了指针在嵌入式系统中直接访问物理地址的典型应用,如读取硬件寄存器。这些特性使指针成为系统级编程和硬件交互的重要工具。原创 2025-10-07 20:19:18 · 415 阅读 · 0 评论 -
背包问题详解
选择物品装入背包,使总价值最大且总体积不超过。1 2 // 物品2:体积1,价值2。:f[5] = 7(选择物品1和物品3)2 3 // 物品1:体积2,价值3。3 4 // 物品3:体积3,价值4。// 正确的逆向更新(0-1背包)3 5 // 3个物品,背包容量5。:每个物品只能选一次(0-1背包):当m很大时,改用价值作为DP维度。// 错误的正向更新(完全背包)个物品,每个物品有体积。:物品可重复选(正向更新):物品分组,每组只能选一个。保证每个物品只被考虑一次。:进一步减少空间复杂度。原创 2025-05-16 19:07:27 · 493 阅读 · 0 评论 -
图中点的层次:BFS与邻接表的完美结合
本文详细介绍了如何使用广度优先搜索(BFS)算法结合邻接表存储方式,计算图中指定起点到所有其他节点的最短距离。首先,文章解释了邻接表的结构及其构建过程,通过数组模拟链表的方式存储图,具体包括头指针数组、边的终点数组和下一条边的索引数组。接着,文章阐述了BFS算法的流程,从初始化队列、起点入队到循环处理队列中的节点,遍历其邻接节点并更新距离。代码实现部分展示了如何使用数组模拟队列进行BFS,并提供了从起点到目标节点的最短距离计算。最后,通过示例分析展示了BFS的执行过程及其最终结果,证明了BFS在无权图最短路原创 2025-05-12 19:28:26 · 1046 阅读 · 0 评论 -
广度优先搜索(BFS)算法详解
int x;// 当前点的x坐标int y;// 当前点的y坐标int step;// 从起点到当前点的步数}P;N和M定义了数组的最大尺寸P结构体表示迷宫中的一个点,包含坐标和到达该点的步数。原创 2025-04-27 20:28:30 · 2572 阅读 · 0 评论 -
深入理解N皇后问题:从DFS到对角线优化
行处理顺序:逐行放置皇后,避免行冲突冲突检测col[i]dg[u+i]udg[n-u+i]回溯机制:递归返回时撤销所有修改这个算法通过DFS系统地探索所有可能的解空间,同时使用剪枝技术大幅提高效率。原创 2025-04-26 20:28:44 · 801 阅读 · 0 评论 -
深入理解全排列算法:DFS与回溯的完美结合
通过DFS和回溯的结合,我们可以高效地生成全排列。全排列问题是算法中的经典问题,其目标是将一组数字的所有可能排列组合列举出来。高效生成全排列,并通过模拟递归过程帮助读者彻底掌握其核心思想。:递归地尝试所有可能的数字选择,直到填满整个排列。:如果输入包含重复数字,需额外判断避免重复排列。种排列,每种排列需要 O(N) 时间生成。数组的状态,确保后续分支能正确选择数字。的状态,确保其他分支能正确使用数字。:调整循环顺序,使输出按字典序排列。:逐层选择未被使用的数字,更新。:存储当前生成的排列。原创 2025-04-10 19:52:50 · 863 阅读 · 0 评论 -
字符串哈希算法详解:原理、实现与应用
字符串哈希是一种高效处理字符串匹配和比较的技术,它通过将字符串映射为一个唯一的数值(哈希值),从而在O(1)时间内完成子串的比较。适用于需要频繁比较子串的场景,比直接暴力匹配高效得多。如果需绝对准确,可双哈希(用两个不同的P计算)。PP 是一个质数(通常取131或13331)。MM 是一个大数(如 264264,代码中用。的工作原理,并通过流程图逐步解析其执行过程。:预计算幂次,用于后续子串哈希计算。(比较哈希值而非原始字符串)。是质数,保证哈希分布均匀。(时间复杂度O(1))。常用的字符串哈希方法是。原创 2025-04-08 20:40:25 · 1013 阅读 · 0 评论 -
深入解析哈希表:从原理到实现(拉链法详解)
哈希表原创 2025-04-08 20:28:09 · 1400 阅读 · 0 评论 -
模拟堆:一种灵活的堆实现方式
模拟堆是指不直接使用数组存储完全二叉树,而是通过其他数据结构(如链表)或更灵活的方式来模拟堆的操作行为。动态性强:不受固定数组大小的限制灵活性高:可以方便地支持复杂操作扩展性好:易于添加自定义功能。原创 2025-04-05 20:24:16 · 495 阅读 · 0 评论 -
堆排序:从原理到实现
堆排序(Heap Sort)原创 2025-04-05 19:33:10 · 1169 阅读 · 0 评论 -
理解合并集合(并查集)
合并集合(Union-Find 或 Disjoint Set Union,简称 DSU)是一种树型数据结构,用于处理动态连接性问题。合并操作(Union):将两个不同的集合合并成一个集合。查找操作(Find):确定某个元素属于哪个集合(即查找该元素的根节点)。合并集合广泛应用于网络连接、图算法、社交网络分析等多个领域。原创 2025-04-04 18:02:05 · 906 阅读 · 0 评论 -
中缀表达式求值
缀表达式是我们在日常生活中最常见的数学表达方式。它的格式是操作符位于操作数之间,例如A + B或。在计算机科学中,对于中缀表达式的求值往往需要一些额外的处理,因为计算机更擅长处理后缀表达式(也称为逆波兰表达式)。本文将详细讲解如何实现中缀表达式求值的算法,并提供相应的图解。原创 2025-03-29 13:18:39 · 877 阅读 · 0 评论 -
使用数组模拟单链表的实现与解析
使用数组模拟单链表的实现与解析原创 2025-03-27 19:42:32 · 581 阅读 · 0 评论 -
递归:一种强大的编程技巧
是一种算法策略,通过函数调用自身来解决问题。它主要包含两个阶段。而从实现的角度看,递归代码主要包含三个要素。原创 2025-03-24 19:03:10 · 373 阅读 · 0 评论 -
计算数组中最长无重复子数组长度
这类问题可以通过滑动窗口(Sliding Window)算法进行高效求解。今天,我们将基于 C 语言的实现,从代码层面介绍如何使用简单的双指针技巧,快速解决这一问题。每次窗口中不存在重复元素后,将当前窗口长度进行记录,并更新最大长度。记录窗口内各元素的出现次数,以方便判断某元素是否重复。)控制一个动态区间(窗口),该区间包含不重复元素。给定一个整数数组,找到其中最长的包含。,我们可以找到的最长无重复子数组为。原创 2025-03-23 19:32:51 · 753 阅读 · 0 评论 -
差分算法
一维数组的差分比较简单,他就是一维数组前缀和的逆运用,他也是我们高中比较熟悉的数列给定一个数组 a,其差分数组 b 定义为: b[i] = a[i] − a[i−1]这里,b[i] 表示原数组 a 中第 i个元素与前一个元素的差值。因此,原数组的值可以通过差分数组恢复如下: a[i] = b[i] + a[i−1] (i≥1)原创 2025-03-23 16:46:36 · 426 阅读 · 0 评论 -
二维数组前缀和图解
二维前缀和s[i][j]表示从二维数组的左上角(1, 1)到(i, j)的所有元素的和。它的计算公式为:s[i-1][j]是上方的前缀和。s[i][j-1]是左方的前缀和。是左上方的前缀和(因为被重复计算了,需要减去)。a[i][j]是当前元素的值。原创 2025-03-23 15:28:38 · 1356 阅读 · 0 评论 -
算法—模拟队列
队列是一种常见的数据结构,遵循先进先出(FIFO, First In First Out)的原则。队列在很多场景中都很有用,如任务调度、消息传递等。在这篇博客中,我们将学习如何使用 C 语言模拟一个简单的队列。原创 2025-03-29 15:22:19 · 204 阅读 · 0 评论 -
深入理解滑动窗口算法:使用 C 语言寻找最小值
我们将使用一个双端队列(deque)来维护窗口中元素的索引,并确定每个窗口的最小值。这个方法的关键是利用单调队列的性质:在每个时刻,队列的头元素始终是窗口内的最小值。//数组q作为双端队列,存储窗口里维护的元素索引,里面存储的索引数字是单调的//数组a存储整个序列的数字//输入n个数,滑动窗口大小为kint n, k;i < n;i++) {//hh表示队列头 tt表示队列尾//第一次遍历:求每个窗口的最小值//i表示窗口的右边界i < n;i++) {原创 2025-03-30 13:57:51 · 676 阅读 · 0 评论 -
KMP 算法详解
在日常编程中,字符串匹配是一个非常常见的需求。从简单的文本搜索到高级的数据处理,我们都可能需要在一段文本(主串)中查找特定的模式(子串)。最直接的朴素匹配算法(Brute Force)在模式较长或文本规模很大时,效率往往难以满足实际需求。为此,计算机科学家 Knuth、Morris 和 Pratt 在 1977 年提出了 KMP(Knuth-Morris-Pratt)算法,大幅提高了字符串匹配的效率。原创 2025-03-31 20:32:24 · 685 阅读 · 0 评论 -
深入理解Trie树:高效处理字符串的利器
专门用于高效存储和检索字符串集合。构建敏感词 Trie 树,快速检测文本中的敏感词。:可改用哈希表或动态分配内存(如 C++ 的。从根节点到某一节点的路径构成一个字符串。是一种高效处理字符串的数据结构,适用于。Trie树(字典树、前缀树)是一种。:动态分配节点编号,初始为。结尾的字符串的出现次数。每个节点代表一个字符。原创 2025-04-01 20:40:06 · 732 阅读 · 0 评论