C++STL使用与模拟实现
文章平均质量分 96
了解与实现STL容器
卫胡迪
向大厂奋斗
展开
-
布隆过滤器--极致的速度
布隆过滤器与位图类似,都是对比特位进行操作,不同的是位图只对一个位置标记,但布隆过滤器可以有多个哈希函数,对多个位置标记。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。如下图所示,当我们插入一个数的时候,把多个位置标记位1当我们判断当前元素在不在时,就可以依次判断是否为1即可,假如3个位置有一个为0,那么该元素一定不在,假如3个位置都为1,那么我们不能确定该元素一定在,只能时可能在。原创 2024-08-17 15:42:12 · 371 阅读 · 0 评论 -
位图(bitset)--明确场景极致性能
位图实际上就是运用哈希的思想将内存极致的利用,尽可能地提升效率。下面我们来看到面试题。给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在 这40亿个数中。【腾讯】首先想到的就是将这40亿个数进行排序,然后进行二分查找,快速排序时间复杂度为O(NlogN),二分查找一次为O(logN)。这种方法在时间复杂度层面还是不错的,但空间复杂度相对来说是比较高的,下面我们来计算下上述算法需要多少内存。原创 2024-08-14 15:02:44 · 614 阅读 · 0 评论 -
C++ 哈希底层原理
哈希是一种建立映射的思想,我们尝试用的数据结构是哈希表 ,又称「散列表」,其通过建立键 key 与值 value 之间的映射,实现高效的元素查询。具 体而言,我们向哈希表输入一个键 key ,则可以在 𝑂(1) 时间内获取对应的值 value。早期的C++的STL中没有hash表,在C++11中,STL又提供了4个 unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是 其底层结构不同。其中unordered_set就是一种哈希表。关于C++函数的查询可以点击下面链接。原创 2024-08-12 18:50:40 · 665 阅读 · 0 评论 -
AVL树超详解上
数学家G.M.Adelson-Velskii 和E.M.Landis发明了AVL树,来了解他吧!原创 2024-07-22 15:43:06 · 643 阅读 · 1 评论 -
二叉搜索树详解
二叉搜索树(Binary Search Tree)顾名思义是一种特殊的二叉树,主要用于查找与去重,与我们常见的二叉树不同,他对于结点的值有特殊的要求,二叉搜索树的定义如下主要有以下3点。这里我们的33大于15,在15的右子树上面,仿佛没有错,但是我们以30为父节点来看,33大于30,却出现在30的左子树上面,这是错误的!删除只有一个孩子的结点相对来说还是比较简单的,我们要找到要删除节点的父亲结点,并判断是父亲节点的左边还是右边,子节点的左边还是右边,最后链接起来就可以了。修改如下图后结果就是正确的了。原创 2024-07-19 14:45:09 · 962 阅读 · 0 评论