数据结构和算法
文章平均质量分 94
叫我小秦就好了
这个作者很懒,什么都没留下…
展开
-
LRU Cache
LRU(Least Recently Used,最进最少使用)页面置换算法的思想是:在缺页中断发生时,置换未使用时间最长的页面。该思想依赖局部性原理:在前面几条指令中频繁使用的页面很可能在后面的几条指令中被使用。原创 2024-02-13 10:00:00 · 816 阅读 · 0 评论 -
跳表的实现
跳表是一种有序数据结构,它通过在每个节点中维护多个指向其他节点的指针,从而达到快速访问节点的目的。跳表支持平均 O(logN)、最坏 O(N) 复杂度的节点查找,还可以通过顺序性操作来批量处理节点。原创 2024-01-31 11:11:33 · 918 阅读 · 0 评论 -
STL sort 分析
STL 的 sort 算法,数据量大时采用快速排序,分段递归。一旦分段的数据量小于某个门槛,为避免快速排序的递归调用带来过大的额外负荷,就改用插入排序。如果递归层次过深,还会改用堆排序。这个算法接受两个随机迭代器,然后将区间内的所有元素以升序排列。原创 2023-03-15 10:00:00 · 839 阅读 · 0 评论 -
哈希表的实现
二叉搜索树具有对数时间的表现,但这样的表现建立在一个假设上:输入的数据有足够的随机性。哈希表又名散列表,在插入、删除、搜索等操作上具有「常数平均时间」的表现,而且这种表现是以统计为基础,不需依赖输入元素的随机性。原创 2023-03-10 10:00:00 · 1450 阅读 · 0 评论 -
AVL 树实现
也许因为插入的值不够随机,也许因为经过某些插入或删除操作,二叉搜索树可能会失去平衡,甚至可能退化为单链表,造成搜索效率低。AVL Tree 要求任何节点的左右子树高度相差最多为 1。当违反该规定时,就需要进行旋转来保证该规定。原创 2023-03-03 10:00:00 · 852 阅读 · 1 评论 -
二叉搜索树实现
树由节点(nodes)和边(edges)构成,如下图所示。整棵树有一个最上端节点,称为根节点(root)。每个节点可以拥有具有方向的边(directed edges),用来和其他节点相连。相连的节点之中,在上者称为父节点(parent),在下者称为子节点(child)。原创 2023-02-28 13:34:11 · 652 阅读 · 0 评论 -
STL forward_list 模拟实现
forward_list 是 C++ 11 新增的容器,它的实现为单链表。forward_list 是支持从容器中的任何位置快速插入和移除元素的容器,不支持快速随机访问。forward_list 和 list 的主要区别在于,前者的迭代器属于单向的 Forward Iterator,后者的迭代器属于双向的 Bidirectional Iterator。原创 2023-01-11 16:38:33 · 779 阅读 · 0 评论 -
STL list 模拟实现
相比于 vector 的连续线性空间,list 采用的是零散的空间,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。list 是支持常数时间从容器任何位置插入和移除元素容器,但不支持快速随机访问。list 通常实现为双向链表,与 forward\_list 相比,list 的迭代器可以向前移动,但也因此需要在节点中多开辟一个指针变量,在空间上效率稍低。原创 2023-01-10 19:05:12 · 343 阅读 · 0 评论 -
STL vector 模拟实现
vector 的数据结构安排及操作方式,与原生数组十分相似,两者唯一的差别在于空间运用的灵活性。原生数组是静态空间,一旦配置了就不能改变大小;vector 是动态空间,可以在插入过程中动态调整空间大小。vector 的实现技术,关键在于它对大小的控制及重新配置时的数据移动效率。原创 2023-01-09 15:54:44 · 644 阅读 · 0 评论 -
拓扑排序(Topological Sorting)
简单来说,就是将图中的所有节点展开成一维序列,对于序列中任意的节点(u,v),如果在序列中 u 在 v 的前面,则说明在图中存在从 u 出发达到 v 的通路,即 u 排在 v 的前面。原创 2022-12-13 11:31:26 · 697 阅读 · 0 评论