复杂性 LRU 缓存

Complexity LRU cache?

本文关键字:缓存 LRU 复杂性      更新时间:2023-10-16

我需要获取缓存复杂度O(log (n))。据说这种复杂性允许地图和列表。例如,实现:

http://blackcat.ca/svn/trunk/lru_cache/src/lru_cache.h

但是在此算法中,此类操作与列表一起呈现:List.splice() - Complexity O(n).List.erase() - Complexity O(n).

这里人们说映射和列表将复杂度为O(log(n))。https://stackoverflow.com/a/3640392/3274299

为什么选择O(log(n))?必须有 O(n)。

"但是在这个算法中,这样的操作与列表一起呈现:List.splice() - Complexity O(n)。List.erase() - Complexity O(n)."

不。。。您从哪里获得这些复杂性值? 请记住,您不是使用键(这将是 O(n))搜索列表 - 相反,您正在使用地图来查找列表中要操作的位置。

您发布的 lru_cache.h 代码仅使用此处提到的 cpp首选项列表::splice 重载中的重载 (2),正如所记录的那样,它具有恒定的复杂性。

同样,这里的erase使用是重载(1),具有恒定的复杂性。