我必须实现具有正常缓存操作的缓存,以及从缓存中快速检索最大元素的功能。
您能否建议实施此数据结构?
我在考虑使用哈希映射和列表来维护最小元素。
建议更复杂的其他方法。
答案 0 :(得分:6)
堆非常适合快速检索max元素。
答案 1 :(得分:4)
有一种结构我称之为指数旁视列表,操作系统经常使用它来跟踪内存的空闲块。你从一些基本大小N(大约8字节和操作系统的页面大小)开始,然后构建一个列表的数组(或堆栈):
[list N]
[list N*2]
[list N*4]
[list N*8]
...
等等达到最大值。要维护它们,只需获取新条目(S)的大小,然后使用LOG2(S / N)作为列表数组的偏移量,以确定将新块添加到哪个列表。当您需要释放(或返回)最大块时,只需从最高大小的列表向下扫描,直到找到第一个非空列表,然后扫描该列表中最大的块。