- 博客(65)
- 收藏
- 关注
原创 C++贪心算法
贪心的基本原理:每一步都选择局部最优解而尽量不考虑对后续的影响,最终达到全局最优解。贪心的局限性:贪心算法不能保证获得全局最》解,但在某些问题上具有高效性。贪心的特征:贪心选择性质()、最优子结构性质(根据我的观察,很多贪心的题目会出现“不同的操作产生的贡献相同”的特征,在此特征下我们每次选择代价最小的)。
2024-10-19 00:37:49
2094
1
原创 C++模拟算法
模拟算法通过模拟实际情况来解决问题,一般容易理解但是实现起来比较复杂,有很多需要注意的细节,或者是一些所谓很“麻烦”的东西。模拟题一般不涉及太难的算法,一般就是由较多的简单但是不好处理的部分组成的,考察选手的细心程度和整体的逻辑思维。一般为了使得模拟题写的逻辑清晰一些,经常会写比较多的小函数来帮助解题,例如int和string的相互转换、回文串的判断、日期的转换、各种特殊条件的判断等等。
2024-10-16 00:02:38
661
原创 C++STL(2)
queue是一种先进先出的数据结构。queue提供了一组函数来操作和访问元素,但它的功能相对较简单。push(x):在队尾插入元素 xpop():弹出队首元素front():返回队首元素back():返回队尾元素empty():检查队列是否为空size0:返回队列中元素的个数。
2024-10-13 23:00:22
1046
原创 C++常用库函数
sort默认使用小于号,要是想自定义比较规则,可以传入第三个参数,可以是函数或lambda表达式(匿名函数)//比较函数int main()//容器用迭代器return 0;int main()//用lambda表达式});
2024-10-11 21:26:55
1388
原创 string类
在 C 语言里,也有很多字符串的函数,但是它们的参数都是 char 指针类型的,在C++中string类提供了一个成员函数c_str(),用于返回一个指向以空字符结尾的C风格字符串(const char*),我们在进行printf输出时,需要将string转换成C风格的字符串。所以我们也可以使用getline(cin,s)来读入一行字符串。一般使用cin>>string,但是遇到空格或者换行符会停止。
2024-10-11 00:36:33
690
原创 二分图最大匹配-匈牙利算法
设 G为二分图,若在 G 的子图 M中,任意两条边都没有公共节点,那么称M为二分图G的一组匹配。在二分图中,包含边数最多的一组匹配称为二分图的最大匹配。交替路:从一个未匹配点出发,依次经过非匹配边、匹配边、非匹配边…形成的路径叫交替路。增广路:从一个未匹配点出发,走交替路,若能到达另一个未匹配点,则这条交替路称为增广路。例如,3→5→1→4→2→7如下图所示:观察增广路,我们会发现:非匹配边比匹配边多一条。
2024-10-09 23:08:57
744
原创 二分图的判定-染色法
如果一张无向图的N个节点可以分成A.B两个不相交的非空集合,并且同一集合内的点之间没有边相连,那么称该无向图为二分图(BipartiteGraph)。定理:二分图不存在奇环(长度为奇数的环)。因为每一条边都是从一个集合走到另一个集合,只有走偶数次才可能回到同一个集合。
2024-10-08 23:25:01
444
原创 dijstra算法——单元最短路径算法
用来计算从一个点到其他所有点的最短路径的算法,是一种单源最短路径算法。也就是说,只能计算起点只有一个的情况。Dijkstra的时间复杂度是O(n^2),它不能处理存在负边权的情况。
2024-10-05 00:09:37
750
原创 图的最短路径算法Floyed
Floyed算法可以算出任意两点的最短路径,可以处理带有负权边的图,但不能处理带有“负环”的图。负环就是累加起来为一个负数时间复杂度:O(n^3)
2024-10-03 21:41:55
837
原创 trie树(字典树)
字典树(Trie),也称为前缀树或单词查找树,是一种用于存储字符串集合的数据结构,特别适用于处理前缀相关的问题。字典树的基本特点是通过共享公共前缀来节省存储空间,并且可以高效地进行字符串查询操作。
2024-10-01 23:50:15
1283
原创 哈希表和字符串哈希算法
哈希表(Hash Table)是一种数据结构,它可以通过一个哈希函数将键(key)映射到存储位置,从而实现高效的数据查找、插入和删除操作。哈希表的特点是能够在常数时间(O(1))内完成查找和更新,前提是哈希冲突处理得当。
2024-09-30 23:19:29
1020
原创 KMP算法
BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将主串SS的第一个字符与模式串TT的第一个字符进行匹配,若相等,则继续比较SS的第二个字符和TT的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种暴力算法。我们来看一个例子BF算法我们很明显可以看到会出现很多多余的匹配,因为匹配错误后就要回退到开始的下一个位置,这就导致我们BF算法的时间复杂度为O(m*n)
2024-09-28 09:35:19
677
原创 数组模拟邻接表存图
图(graph)是一种非线性数据结构,由顶点和边组成。我们可以将图 抽象地表示为一组顶点和一组边的集合。G(V,E)图分为有向图和无向图,下图带箭头为有向图,无箭头为无向图我们可以用两种方式来表示图,邻接矩阵和邻接表,我们主要来讲一下邻接表。
2024-09-26 23:38:06
507
原创 前缀和与差分(二维)
下面是一个二维数组,我们要求(1,1)到(2,2)区间内的所有元素的和,最原始的方法就是遍历每个元素然后一个一个加起来,此时时间复杂度为O(n*m)。我们之前学过一维数组的前缀和那么我们可以这样优化一下,此时时间复杂度优化到了O(min{n,m})。还可以在优化吗?答案是可以的。我们依然根据一维数组的前缀和的思想来考虑二维数组在上面的公式中我们发现出现了i-1和j-1,那么我们就需要考虑边界防止i或j为0时造成数组越界,1.当且我们可以得到2.当我们可以得到(一维数组前缀和)
2024-09-21 00:05:48
716
2
原创 前缀和与差分(一维)
我们着重要记住差分标记我们根据上面的差分标记来试着操作一下我们发现把标记后的差分数组,进行一次前缀和操作,可以得到最终的答案。为什么会这样呢?我们来看一下下图这就是差分标记的由来。那么使用差分后时间复杂度是多少呢,为O(n+m)是一个线性的复杂度。
2024-09-20 00:36:55
481
原创 高精度加法和减法
在C/C++中,我们经常会碰到限定数据范围的情况,我们先来看看常用的int和long long两种数据类型的范围吧。C++标准规定:int占一个机器字长。在32位系统中int占32位,即4个字节,所以int的范围是[-2的31次方,2的31次方-1],为1e8数量级;longlong的范围则是[-2的63次方,2的63次方-1],为1e18数量级。如果超过该数量级,该怎么办?此时就需要用到高精度算法。
2024-09-18 21:44:22
1287
原创 整数二分算法和浮点数二分算法
现实中运用到二分的就是猜数字的游戏 假如有A同学说B同学所说数的大小,B同学要在1~100中间猜中数字65,当B同学每次说的数都是范围的一半时这就算是一个二分查找的过程。
2024-09-17 23:40:04
1033
原创 分治算法归并排序
把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题…直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
2024-09-17 14:01:36
363
原创 快速排序算法
每次都取数组的第一个元素作为基准元素,凡是大于这个基准元素的都放在它的右边,凡是小于这个基准元素的都放在它的左边。具体步骤如下:1.设置两个变量i和i(也称为哨兵),令序列第一个元素为基准元素。2.i指向序列的最左边,j指向序列的最右边,j从右往左试探,i从左往右试探,直到j找到小于基准的数就停止,i找到大于基准的数就停止,交换i和j指向的两个数,j继续往左试探,i继续往右试探3.如果i与j相遇,则i或j上的元素与基准元素交换,则这一轮排序结束。对基准元素两边的序列重复以上操作。
2024-09-16 19:33:18
465
原创 拓扑排序算法
上图意思为在我想要完成C7这件事之前我必须先完成事件C1,在完成C5这件事之前我必须先完成事件C6和C3.由图可以提看出拓扑序列是不唯一的。
2024-09-15 20:50:43
1053
原创 力扣第560题 和为k的子数组
我们用一个变量 sum 来记录当前元素之前所有元素的累加和,也就是前缀和。前缀和可以帮助我们快速计算某一段子数组的和。
2024-09-13 20:01:20
706
原创 动态规划01背包问题
现有四个物品,小偷的背包总容量为8,怎么可以偷到价值最多的物品(注意:每件物品最多只有一件)如:物品编号:1 2 3 4物品重量:2 3 4 5物品价值:3 4 5 8。
2024-09-12 10:02:24
382
原创 数据结构与算法图论 并查集
原题目:现在有若干家族图谱关系,给出了一些亲戚关系,如Marrv和Tom是亲戚,Tom和Ben是亲戚等等。从这些信息中,你可以推导出Marry和Ben是亲戚。请写一个程序,对于我们的关于亲戚关系的提问,以最快速度给出答案。
2024-09-11 21:09:36
1034
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人