【数据结构系列】——LFU缓存淘汰算法(淘汰访问频次最低的数据)

LFU(Least Frequently Used)缓存淘汰算法基于数据访问频次进行淘汰,优先淘汰访问次数最少的项。当容量满时,若新插入数据,会移除访问频次最低且最早插入的元素。get和put操作都会影响key的访问频次。
摘要由CSDN通过智能技术生成

LFU缓存淘汰算法(淘汰使用次数最少)

LFU算法相当于把数据按照访问频次进行排序,如果多个数据拥有相同的访问频次,就应删除最早的插入的那个数据,如果访问频次最低的数据有多条,需要淘汰最旧的数据。

static class LFUCache{
   
		//构造容量为capacity的缓存
        public LFUCache(int capacity){
   
        }
         //在缓存中查询key
        public int get(int key){
   
        }
         //将key和val存入缓存
        public void put(int key,int val){
   
        }
}
  1. 调用get(key)方法时,要返回该key对应的val
  2. 只要用get或者put方法访问一次某个key,该key的freq就要加1
  3. 如果在容量满了的时候进行插入,则需要将freq最小的key删除,如果最小的freq对应多个key,则删除其中最旧的那个。
package labuladong_learn.Data_structure;/**
 * Copyright (C), 2019-2021
 * author  candy_chen
 * date   2021/4/10 9:36
 *
 * @Classname LFU
 * Description: LFU 淘汰那些使用次数最少的数据
 */

import java.util.HashMap;
import java.util.LinkedHashSet;

/**
 *
 */
public class LFU {
   
    static class LFUCache{
   
        //key到val的映射,后面称为KV表
        HashMap<Integer,Integer> keyToVal;
        //key到freq的映射,后面称为KF表
        HashMap<Integer,Integer>keyToFreq;
        //freq到key列表的映射,后面称为FK表
        HashMap<Integer, LinkedHashSet<Integer>> freqToKeys;
        //记录最小的频次
        int minFreq;
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值