
数据结构
文章平均质量分 84
数据结构 图,并查集,跳表,B树,红黑树,哈希表等数据结构,结合部分C++代码
老汉忒cpp
重生之双非学cpp非常荔枝
展开
-
简单了解前缀树/字典树(Trie树)C++代码
Trie 的形状和单词的插入或删除顺序无关,也就是说对于任意给定的一组单词,Trie 的形状都是唯一的。查找或插入一个长度为 L 的单词,访问 next 数组的次数最多为 L+1,和 Trie 中包含多少个单词无关。Trie 的每个结点中都保留着一个字母表,这是很耗费空间的。如果 Trie 的高度为 n,字母表的大小为 m,最坏的情况是 Trie 中还不存在前缀相同的单词,那空间复杂度就为 O(m * n)。一次建树,多次查询。原创 2024-11-02 22:47:11 · 341 阅读 · 0 评论 -
大部分基础排序复习C++(归并、快排、堆)
在前 0 ~ i - 1 元素有序的情况下,(依次)将第 i 个元素插入前面已经有序的小序列,先使用二分查找找到插入位置的下标index,然后将区间[index + 1,i] 往后移动,再把原来i位置的值插入到index位置,使其有序。注意事项:在合并有序数组的时候,我们需要一个额外的容器,合并完之后再把结果填回到原数组中,对于这个额外的数组,建议使用全局的变量,这样能节省每层创建和销毁的开销,从而提高效率。先让间隔 h 的元素有序,在使得间隔为 h / 2,一直缩小,一直到 h = 1(此时数组有序)。原创 2024-09-23 12:50:59 · 850 阅读 · 0 评论 -
数据结构--B树
B树:有序数组平衡多叉树;B+树:有序数组链表平衡多叉树;B*树:一棵更丰满的,空间利用率更高的B+树。实际应用中还是B+树使用的更为广泛。原创 2024-02-29 18:06:52 · 1201 阅读 · 0 评论 -
LRU Cache
广义上的Cache指的是位于速度相差较大的两种 硬件之间 ,用于协调两者数据传输速度差异的结构。狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。我们可以在哈希表中的Val中存链表中结点的指针 ,每次查找或者插入都将这个结点放到链表的头部,如果Cache满了就从链表上尾删。实现LRU Cache的方法和思路很多,但是要保持高效实现O(1)的put和get,那么使用双向链表和。哈希表的搭配是最高效和经典的。最久没有使用过的内容。原创 2024-02-21 01:04:50 · 468 阅读 · 1 评论 -
数据结构—图
图是在数据结构中难度比较大,并且比较抽象一种数据结构。图在地图,社交网络这方面有应用。图是由顶点集合及顶点间的关系组成的一种数据结构:G=(V,E)。图标的英文:graph。树是一种特殊的图(无环联通)。图不一定是树。树关注结点中存的值。 图关注的是顶点及边的权值。图的一些其他的概念:图可以表示城市之间的关系,也还可以表示社交关系。比如顶点是人的话,那么边就是好友,边权值就是亲密度这些。像微信,qq这样的就是无向图,只要是好友,就可以双方互发和接收消息,那么这个也就是强社交关系。像抖音,微博这些,我们关注别原创 2024-02-21 00:29:20 · 1229 阅读 · 0 评论 -
数据结构-并查集
在一些应用问题中,需要。。在此过程中。适合于描述这类问题的抽象数据类型称为。一般可以用数组来表示并查集,数据的下标就是每个数据的编号,对应的值如果是负数,那么就代表它自成一个集合,也就是一个根结点。如图,初始值一般都是负数,也就是每个元素都自成一个集合,如果一个元素是根,那么负数的绝对值则代表这个树有多少结点;如果不是负数,那么则说明这个元素不是根,且对应的值存的是父亲结点的下标。实际应用中也可以通过加入哈希表来设置更多的映射关系,这样的话可以将数组的下标作为key值,然后可以存人名这些。原创 2024-02-10 08:53:41 · 785 阅读 · 1 评论 -
数据结构——跳表
跳表(Skip List)是一种可以进行对数级别查找的数据结构,它通过在数据中构建多级索引来提高查询效率。跳表是一种基于链表的随机化数据结构,其本质是由多个链表组成,每个链表中的元素都是原始链表中的元素。我们知道链表的查找时间复杂度是O(N),如果这个链表数据是有序的,还是O(N),我们如何利用有序这一点,来进行优化呢?接下来就是我们的主角跳表登场。跳表在实际应用中有许多用途,例如作为Redis等数据库的有序数据结构实现,以及作为平衡树等数据结构的替代方案。原创 2024-03-02 00:19:37 · 1445 阅读 · 0 评论 -
C++哈希表简单梳理+对map和set的封装
在C++98中,STL提供了以红黑树为底层的一些关联式容器,它的查询效率达到了log_2N,在C++11时,STL又提供了以哈希表为底层的四个关联式容器,它的查询效率可以达到常数级别。这个四个容器分别是我们介绍的是unorderd_map和,unordered_set。哈希表的底层我们之前用过的计数数组其实用的就是哈希思想,它是通过Key作为下标来达到直接对元素进行访问。Key(下标)值的确定Key的值有时不会直接作为下标,而是会经过一些方法的处理再作为下标。原创 2023-09-17 14:33:17 · 144 阅读 · 1 评论 -
C++的AVL树简单梳理
AVL树是由两位俄罗斯计算机科学家G.M. Adelson-Velsky和E.M. Landis在1962年提出的,以他们的姓氏首字母命名。原创 2023-09-11 09:41:17 · 98 阅读 · 0 评论 -
位运算+位图+布隆过滤器的简单梳理
首先看一道题:首先像这种判断在不在的问题,我们第一想到的肯定是用set或者unordered_set。但是当数据量过大时,直接使用set这种就不适用了。40亿个整形的大小大概在16G左右,这样的话太大了。但是仅仅只是判断在不在的问题时,我们没必要如此大费周章,我们可以用第几位的比特位是0还是1来表示这个数存不存在,这样原本要16G的大小就变成0.5G。这就是位图的思想,跟位运算有着很大的关系。原创 2023-09-21 19:10:08 · 134 阅读 · 0 评论 -
C++红黑树简单了解
红黑树是由美国计算机科学家Rudolf Bayer和Edward M. McCreight于1972年发明的(最初被称为"对称二叉B-树")。然而,它的命名则是由后来的研究者Leonidas J. Guibas和Robert Sedgewick于1978年提出的,他们使用"红黑树"这个术语来描述该数据结构的特性。原创 2023-09-12 00:04:00 · 111 阅读 · 0 评论 -
C++二叉搜索树
二叉搜索树也叫二叉排序树(也可以是空树),它是具备以下特征的二叉树:1.若它的左子树不为空,则它的所有左子树的值都小于根结点。2.若它的右子树不为空,则它的所有右子树的值都大于根结点。3.它的左右子树也分别为二叉搜索树。原创 2023-09-01 23:30:31 · 77 阅读 · 1 评论 -
C++set和map的使用+红黑树底层对map和set的封装
不同与list,vector等序列式容器,关联式容器存的是结构的键值对,它在检索时比序列式容器的效率更高。原创 2023-09-04 14:38:48 · 104 阅读 · 1 评论