- 博客(27)
- 收藏
- 关注
原创 C++:【数据结构】并查集
那么首先想到的暴力做法就是,开一个数组,让在一个集合中的数都等于相同的值。但是这样做的话,假设有一万个点在集合1里,有两万个点在集合2里,要合并的话,首先要遍历一遍全部数组,把所有在集合1里的点挑出来,然后再让他们等于集合2的值,这样显然是十分愚蠢的。因为找到一个点的根节点是需要递归上去的,越摞越高的话,查询的时间复杂度会非常高。,将编号为 a 和 b 的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作。,可以执行合并集合,查询两个数是否在一个集合中,以及可能还有一些其他奇怪的操作。
2023-07-21 12:24:31
114
1
原创 C++:【算法】最小生成树问题
在图论问题中有这样一类问题:就是问题(适用于无向图)。简单来说,就是。针对这类问题的不同情况,有三种解决方法:简要说明以下,n为点数,m为边数。很显然,,而。但是由于堆优化Prim太复杂且其时间复杂度和Kruskal一样,所以来解决。因此这里对于堆优化的Prim就不做讲解了。下面重点说说朴素Prim和Kruskal。
2023-07-20 22:26:08
501
原创 C++:用邻接矩阵和邻接表存图
邻接矩阵和邻接表是非常常用的存图的方式,所以有必要浅浅地说一下这两种方式是怎么实现的。此外,还有一些更加高级的方法,比如链式前向星,但是这里只针对基础且最常用的方法,感兴趣的同学可以自行查阅。
2023-07-19 22:45:16
253
原创 C++:【算法】最短路问题
在图论问题中,最短路算法是一个典型且很常用的算法。面对不同的情况,要选择不同的算法。本文。下面给出一个思维导图:算法并不难,问题的关键在于建图,这个需要做题积累经验。下面只给出算法的基本实现,还需各位同学多多做题。
2023-07-19 17:14:45
621
原创 C++:【搜索】深度优先搜索与广度优先搜索
简单来说,dfs就是从图的某一个点开始,沿着一条路走到黑,不撞南墙不回头。在走到尽头的时候,再返回搜索下一条路。举个简单的例子:这乍一看好像是一个树,但是其实大部分图都是错综复杂的,树只是一种特殊的图,因为举例子比较方便,所以就先用树状图举例子了。dfs从1号点开始,假设从最左边这条边开始搜索,那么要搜索到末端,也就是:然后就要回头了,那么回到哪里呢?回到离他最近的一个有岔路的点,并从那条岔路一直搜索到末端。也就是:以此类推,直到所有点都被搜索过,也就是出发点的所有出边都被搜索过了。
2023-07-17 22:29:18
2023
3
原创 C++:【数据结构】哈希表
哈希表(hash table)又叫散列表,是一种很实用的数据结构。首先来看一下百度给出的定义:散列表,是。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。通俗一点来说,就是我们有一堆值,他们的范围很大,但是又很分散,直接存储本身的话会非常占地方,所以我们就把它,这样不但节省了空间,而且还方便查找。
2023-05-30 17:33:39
2065
2
原创 C++:【数据结构】用数组实现的单链表和双向链表
链表是程序设计中一种十分重要的数据结构。正如它的名字一样,它是一个“链状”的数据结构。如下图所示:其中每个节点都可以保存数据,同时每个节点又有一个指针指向下一个节点,来形成链状结构。那么这时候就会有人要说了,这不就是数组吗。其实不然,它和数组各有优缺点。数组就是一串连续的存储单元,而链表不一定是连续的存储单元。数组的优点就是可以很快的访问到某个元素,因为只需要给数组名取下标,就可以访问到某个元素了;但是链表要访问一个元素,需要从头节点开始往后找,越接近链表尾的元素访问的越慢。但是链表可以。
2023-05-25 22:55:39
1080
3
原创 C++:【数据结构】trie树
这篇文章来介绍一个比较重要的数据结构:字典树(TrieTree)。其中 trie 一词来自于英语单词 retrieval 【检索】。
2023-05-13 00:55:06
666
2
原创 C++:单调栈和单调队列及其应用
栈和队列是两个很重要的数据结构。其中单调栈和单调队列是栈和队列的“特别版”。下面就来介绍一下单调栈和单调队列以及它们可能的用处。
2023-05-11 18:09:53
645
6
原创 C++:KMP字符串详解
kmp算法(Knuth-Morris-Pratt算法)是一种算法,可以在O(m+n)的时间复杂度内实现两个字符串的匹配。下面谈谈个人对于kmp算法浅陋的理解。
2023-05-06 23:06:57
691
14
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人