数据结构总结
来源:互联网 发布:mysql数据库查看 编辑:程序博客网 时间:2024/06/14 07:28
数据结构和算法
常用算法
每天一道算法题
算法1
数据结构笔试(一)
数据结构_算法
=================================================
缓存污染
LRU:
Least recently used
最近最少使用
新数据插入链表头部
缓存数据访问时,将数据移到链表头部
链表满时,淘汰尾部数据
Two queues:
两个缓存队列,一个FIFO队列,一个LRU队列
新数据插入FIFO队列
若FIFO里的数据没有被访问,则按照FIFO规则淘汰
FIFO队列里的数据再次被访问,则移到LRU队列头部
LRU队列里的数据再次被访问,则移到头部
LRU队列淘汰尾部的数据
Multi Queue(MQ)
LFU:
Least Frequently Used
历史最少使用
每个数据都需要维护引用计数
新数据插入队列尾部 (因为引用计数为1)
队列数据被访问后,引用计数增加,队列重新排序
淘汰数据时,从尾部淘汰 (淘汰引用计数最小的数据)
--------------------------------------------------------------------------------------------------------------------------
红黑树:
TreeSet、TreeMap使用
红黑树的特性:
(1)每个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
(4)如果一个节点是红色的,则它的子节点必须是黑色的。
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
注意:
(01) 特性(3)中的叶子节点,是只为空(NIL或null)的节点。
(02) 特性(5),确保没有一条路径会比其他路径长出俩倍。因而,红黑树是相对是接近平衡的二叉树。
红黑树的反转:
翻转要旋转的节点
左旋相当于从上往下翻
左旋时右节点是父节点
右旋相当于从下往上翻
右旋时左节点是父节点
左旋示例图(以x为节点进行左旋):
z x / / \ --(左旋)--> x y z / y
对x进行左旋,意味着,将“x的右孩子”设为“x的父亲节点”;即,将 x变成了一个左节点(x成了为z的左孩子)!。 因此,左旋中的“左”,意味着“被旋转的节点将变成一个左节点”。
右旋示例图(以x为节点进行右旋):
y x \ / \ --(右旋)--> x y z \ z
对x进行右旋,意味着,将“x的左孩子”设为“x的父亲节点”;即,将 x变成了一个右节点(x成了为y的右孩子)! 因此,右旋中的“右”,意味着“被旋转的节点将变成一个右节点”。
红黑树原理
--------------------------------------------------------------------------------------------------------------------------