Mermaid 图解LRU 算法核心原理

80 阅读1分钟

使用 Mermaid 语法绘制的 LRU 算法核心原理图解:

graph LR
    subgraph 双向链表结构
        direction LR
        head[头节点] <--> A[节点A] <--> B[节点B] <--> C[节点C] <--> tail[尾节点]
        style head fill:#f9f,stroke:#333
        style tail fill:#f96,stroke:#333
        style C fill:#fcc
    end

    subgraph 哈希表
        key1 --> A
        key2 --> B
        key3 --> C
    end

    note[最久未访问的节点在尾部] --> C
    note2[每次访问将节点移动到头部] --> head

LRU 核心操作图解

1. 访问节点B
graph LR
    subgraph 访问后链表变化
        direction LR
        head[头节点] <--> B[节点B] <--> A[节点A] <--> C[节点C] <--> tail[尾节点]
        style B fill:#ccf
        style C fill:#fcc
    end
note[访问节点B时: 1. 断开B前后连接 2. 将B插入头部] --> B
2. 插入新节点D(缓存已满)
graph LR
    subgraph 插入后链表变化
        direction LR
        head[头节点] <--> D[新节点D] <--> B[节点B] <--> A[节点A] <--> tail[尾节点]
        style D fill:#cfc
        style A fill:#fcc
        C[被淘汰的节点C] -.->|从链表和哈希表删除| C
    end

关键原理说明

  1. 双向链表

    • 头部存放最近访问的节点,尾部存放最久未访问的节点。
    • 每次访问(查询或插入)节点时,将其移动到链表头部。
  2. 哈希表

    • 快速定位节点在链表中的位置(时间复杂度 O(1))。
  3. 淘汰策略

    • 当缓存满时,直接删除链表尾部节点,并在哈希表中移除对应键。

通过上述结构,LRU 算法实现了 O(1) 时间复杂度的访问和插入操作,同时确保最久未使用的数据被优先淘汰。