C++学习之路
流氓兔欸
这个作者很懒,什么都没留下…
展开
-
【C++学习第19天】二分图
【代码】【C++学习第19天】二分图。原创 2024-08-04 16:57:54 · 166 阅读 · 0 评论 -
【C++学习第19天】最小生成树(对应无向图)
【代码】【C++学习第19天】最小生成树(对应无向图)原创 2024-08-04 16:31:36 · 165 阅读 · 0 评论 -
【C++学习第18天】最短路算法
【代码】【C++学习第18天】最短路算法。原创 2024-08-03 15:27:47 · 205 阅读 · 0 评论 -
【C++学习第18天】有向图 & 无向图
(1)邻接矩阵;(2)邻接表。原创 2024-08-03 10:45:01 · 146 阅读 · 0 评论 -
【C++学习第17天】深度有限搜索
【代码】【C++学习第17天】深度有限搜索。原创 2024-08-02 19:40:46 · 215 阅读 · 0 评论 -
【C++学习第16天】DFS & BFS
不具备最短性回溯、剪枝。原创 2024-05-15 11:02:25 · 260 阅读 · 0 评论 -
【C++学习第15天】STL
和上面类似,增删改查的时间复杂度是 O(1),而除此之外上面的增删改查的时间复杂度是 O(logn),但支持和排序有关的操作。不支持 lower_bound() / upper_bound()、迭代器的++和--值得注意的是,queue没有clear()操作。原创 2024-05-12 22:22:56 · 662 阅读 · 0 评论 -
【C++学习第14天】(2)字符串前缀哈希法
以"ABCD"为例,假设该字符串时P进制,将其转化为数字为(1 2 3 4)p = (1*p^1 + 2*p^2 + 3*p^3 + 4*p^4),(1*p^1 + 2*p^2 + 3*p^3 + 4*p^4)mod Q可将任何一个数映射到[0, Q-1]之间。(1)一般情况下,不能把一个字符串映射为0,因为可能会造成“多对一”的情况,因此最好从1开始;(2)经验值:当P=131或13331,Q=2^64时,基本不会发生冲突。原创 2024-05-12 10:30:00 · 618 阅读 · 0 评论 -
【C++学习第14天】(1)哈希表第二种实现方式:开放寻址法
假设哈希表的范围为:[0, N],初始化一个尺寸在2N或者3N的一维数组,当需要插入一个数x时,从前往后依次寻找空闲位置,并将 x 插入其中。原创 2024-05-11 20:05:31 · 129 阅读 · 0 评论 -
【C++学习第13天】(2)哈希表
将一个较大的值域映射到一个比较小的空间,一般情况是映射到 0~N,N一般较小,大约为10^5 ~ 10^6。例如,将 [-10^9, 10^9]映射到[0, 10^5]。原创 2024-05-09 17:57:43 · 128 阅读 · 0 评论 -
【C++学习第13天】(1)模拟堆
acwing平台 -- 839.模拟堆:维护一个集合,初始时集合为空,支持如下几种操作:1. “I x”,插入一个数x;2. “PM”:输出当前集合中的最小值;3. “DM”:删除当前集合中的最小值,当最小值不唯一时,删除最早插入的最小值;4. “D k”删除第k个插入的数;5. “C k x”:修改第k个插入的树,将其变为x;现在要进行N次操作,对于所有第2个操作,输出当前集合的最小值。第一行包含整数N。接下来N行,每行包含一个操作指令。原创 2024-05-09 16:19:44 · 157 阅读 · 0 评论 -
【C++学习第12天】(2)堆排序
如何手写一个堆?堆的本质是一个完全二叉树,即除了最后一排节点,其余节点都是满的,且最后一个节点从左到右排列。原创 2024-05-08 17:49:14 · 212 阅读 · 0 评论 -
【C++学习第12天】(1)并查集
1.将两个集合合并;2.询问两个元素是否在一个集合中。:每个集合用一棵树来表示,树根的编号就是整个集合的编号,每个节点存储它的父节点,p[x]表示 x 的父节点。:路径压缩。:如何判断树根:if(p[x] == x):如何求x的集合编号:while(p[x]!:如何合并两个集合:px是x的集合编号,py是y的集合编号。p[x] = y。原创 2024-05-08 11:08:42 · 147 阅读 · 1 评论 -
【C++学习第11天】Trie树
Trie(又称字典树、前缀树)是一种用于高效存储和检索字符串集合的数据结构。总之,Trie树是一种高效的数据结构,特别适用于处理字符串集合和相关问题。它提供了快速的插入、查找和删除操作,可以应用于自动完成、拼写检查、字符串排序、字符串统计等各种应用场景。原创 2024-05-06 21:13:54 · 168 阅读 · 0 评论 -
【C++学习第十天】再看KMP算法
下面这篇博客写的非常简单易懂,看了两三遍终于看懂了!如何更好地理解和掌握 KMP 算法?- 海纳的回答 - 知乎。原创 2024-04-29 21:53:14 · 63 阅读 · 0 评论 -
【C++学习第九天】kmp算法
【代码】【C++学习第九天】kmp算法。原创 2024-04-25 21:44:55 · 233 阅读 · 1 评论 -
【C++学习第八天】(4)单调栈
单调栈(Monotonic Stack)是一种数据结构,用于解决一类与单调性相关的问题。它的主要特点是栈中的元素保持单调(递增或递减)的顺序排列。单调栈通常基于栈这种数据结构实现,但在入栈和出栈操作时会有一些特定的规则。对于单调递增栈,栈内的元素从栈底到栈顶按照递增顺序排列,而单调递减栈则相反,栈内的元素从栈底到栈顶按照递减顺序排列。原创 2024-04-18 17:46:16 · 237 阅读 · 1 评论 -
【C++学习第八天】(3)队列
队列,顾名思义,就是类似于排队的方式来存储数据,符合先进先出的原则。可以将其看作是一个管道,水流从一端流入,从另一端流出。原创 2024-04-18 16:34:57 · 193 阅读 · 1 评论 -
【C++学习第八天】(2)栈
栈只有一端可以进出数据,满足先进后出的原则,如果想要删除元素的话,只能从顶部元素开始依次删除。相对于链表而言,栈的操作还是简单很多的。原创 2024-04-18 16:24:53 · 163 阅读 · 1 评论 -
【C++学习第八天】(1)双链表
除了首尾两个结点之外,双链表中的每一个结点都有两个指针,其中一个指针指向左边的结点,另一个指针指向右边的结点。原创 2024-04-18 16:06:56 · 555 阅读 · 1 评论 -
【C++学习第六天】(3)区间合并
区间合并指将一组具有重叠或相邻区间的集合,通过合并相交的区间,得到一个不重叠且尽可能合并的新区间集合。例如,区间:[0, 2]、[1, 6]、[7, 9]、[10, 15]、[12, 20],以上五个区间的合并结果为[0, 6]、[7, 9]、[10, 20]。原创 2024-04-16 17:27:00 · 202 阅读 · 0 评论 -
【C++学习第六天】(2)离散化
离散化的本质是数据压缩,即将无限空间中的有限个元素映射到一个有限的空间中,在不改变数据相对大小的情况下对数据进行压缩。原创 2024-04-16 15:42:59 · 265 阅读 · 0 评论 -
【C++学习第六天】(1)双指针算法
双指针算法是一种常用的算法技巧,通常用于解决涉及数组、链表或字符串等数据结构的问题。该算法使用在序列中进行迭代。双指针算法主要有两个用途:(1)使用两个指针来维护一段区间;(2)对于两个序列,使用两个指针来维护某种顺序。原创 2024-04-16 10:33:10 · 317 阅读 · 0 评论 -
【C++学习第五天】前缀和&差分
前缀和、差分的原理非常简单,类似于高中学到的数列求和、以及如何利用数列的和函数求解数列中的单个元素。原创 2024-04-15 20:04:28 · 152 阅读 · 1 评论 -
【C++学习第四天】(3)高精度除以低精度
需要注意的是,最后的结果中,C中的最高位是结果的最低位,C中的最低位是结果的最高位,需要进行reverse操作。与低精度数相除,得到商和余数。商是当前位的计算结果,余数是当前位的除法运算过程中剩余的未被除尽的部分。对下一位进行除法运算,依次类推,直到高精度数的所有位都被处理完毕。与高精度减法一样,最后的结果仍然需要消除“前导零”。最终得到的商即为高精度数除以低精度数的结果。将商存储起来,并将余数作为下一位的被除数。从高精度数的最高位开始,将当前位。原创 2024-04-11 17:30:39 · 280 阅读 · 1 评论 -
【C++学习第四天】(2)高精度乘低精度
A是高精度,数据类型是vector<int>,b是低精度,数据类型是int。算法过程为:从A的低位开始,每一位与b相乘,第 i 位的进位用 t[i] 表示,第 i 位的结果用C[i]表示,其中。原创 2024-04-11 16:37:31 · 199 阅读 · 1 评论 -
【C++学习第四天】(1)高精度减法
高精度减法与高精度加法类似,使用两个数组A和B分别存储两个长度较长的数,其中A[0]存储最低位,A[n-1]存储最高位。从低位开始运算,即使用A[0]减去B[0],如果结果小于0,则需要从A[1]位借位,最后的结果是A[0]+10-B[0]。接着计算下一位,即A[1]-B[1]-1,需要注意的是,由于之前A[1]已经被借走一位了,所以此处需要再减去1,因此可以使用变量 t 表示某位是否曾被借位,若被借位,则 t = 1,否则 t = 0;原创 2024-04-11 15:43:18 · 173 阅读 · 1 评论 -
【C++学习第三天】(2)高精度加法
高精度加法是一种用于处理大整数相加的算法,它可以克服常规整数类型的位数限制,支持对任意长度的大整数进行加法运算。高精度加法的实现原理如下:首先,将两个大整数按照从低位到高位的顺序进行逐位相加。从最低位开始,将对应位上的数字相加,同时考虑进位。使用一个进位变量来记录当前位相加后的进位值。初始时进位为0。逐位相加过程中,将当前位的数值与进位值相加,得到当前位的结果值。同时更新进位值。如果两个大整数的位数不一致,需要在较短的整数的高位补零,以保持对应位的对齐。继续处理下一位,直到处理完所有位。原创 2024-04-10 22:57:48 · 135 阅读 · 0 评论 -
【C++学习第三天】(1)二分算法
整数二分算法(Integer Binary Search Algorithm)是一种用于在有序整数数组中查找特定元素的搜索算法。它利用了数组已排序的特性,通过不断缩小搜索范围来快速定位目标元素的位置。整数二分算法的基本思想是将搜索区间分成两部分,然后确定目标元素可能存在的那一部分,并继续在该部分进行二分查找。时间复杂度为O(log n),其中n为数组的大小。由于每一次迭代都将搜索范围减半,因此算法的效率非常高。它在大规模的有序整数数组中查找目标元素时非常实用。原创 2024-04-10 21:51:36 · 197 阅读 · 0 评论 -
【C++学习第二天】归并排序算法实现
网上已经有很多高质量博客,此处略去原理的讲解。原创 2024-04-09 17:16:34 · 132 阅读 · 1 评论 -
【C++学习第一天】:快速排序算法的实现
快速排序算法的C++实现原创 2024-04-08 20:05:28 · 177 阅读 · 0 评论