数据结构总结

来源:互联网 发布: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的右孩子)! 因此,右旋中的“右”,意味着“被旋转的节点将变成一个右节点”

 

红黑树原理

 --------------------------------------------------------------------------------------------------------------------------

 

原创粉丝点击