gpt4 book ai didi

java - 如何使用最简单、最少的数据结构来实现 LFU 缓存?

转载 作者:行者123 更新时间:2023-11-30 07:20:00 27 4
gpt4 key购买 nike

我在一次采访中被问到这个问题,他首先问了 LRU 和 LFU 之间的区别,然后要求实现两者。我知道 LRU 可以通过 LinkedHashMap 实现,但我对 LFU 感到困惑。谁能告诉我如何用最简单的数据结构来实现它并有很好的解释?也可以用LinkedHashMap来实现吗?

最佳答案

假设缓存条目已键入,您可以使用队列 (LinkedList) 和映射 (HashMap) 来实现。

(假设队列和 map 已满)
为队列选择一个绑定(bind)的b。在每个缓存请求中,将所请求页面的键推送到队列中,然后轮询队列。
如果您想要的页面在 map 中,请返回该页面。如果页面不在 map 中,请在队列中查找最不常出现的键,该键也在 map 中或您想要的页面的键中。如果该键是您想要的页面的键,则无需执行任何操作;否则从 map 中删除该键的条目并将您的页面插入到 map 中。
返回您的页面。

缓存命中的复杂度为 O(1),未命中的复杂度为 O(b)。
这假设您想要限制频率。 IE。 “最近 b 请求中最不常用”而不是“有史以来最不常用”。

关于java - 如何使用最简单、最少的数据结构来实现 LFU 缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37759551/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com