Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 用于设计具有高效插入、删除和最高值检索的缓存的数据结构_Algorithm_Data Structures - Fatal编程技术网

Algorithm 用于设计具有高效插入、删除和最高值检索的缓存的数据结构

Algorithm 用于设计具有高效插入、删除和最高值检索的缓存的数据结构,algorithm,data-structures,Algorithm,Data Structures,我必须实现一个具有正常缓存操作的缓存,以及从缓存中快速检索最大元素的功能 您能建议实现此功能的数据结构吗 我正在考虑使用哈希映射和列表来维护最小元素 建议其他更复杂的方法。堆非常适合快速检索max元素。有一种结构,我称之为指数查找列表,操作系统经常使用它来跟踪空闲内存块。您从一些基本大小N(介于8字节和操作系统的页面大小之间)开始,然后构建列表的数组(或堆栈): [list N] [list N*2] [list N*4] [list N*8] ... 以此类推,直到达到某个最大值。为了维护它

我必须实现一个具有正常缓存操作的缓存,以及从缓存中快速检索最大元素的功能

您能建议实现此功能的数据结构吗

我正在考虑使用哈希映射和列表来维护最小元素


建议其他更复杂的方法。

堆非常适合快速检索max元素。

有一种结构,我称之为指数查找列表,操作系统经常使用它来跟踪空闲内存块。您从一些基本大小N(介于8字节和操作系统的页面大小之间)开始,然后构建列表的数组(或堆栈):

[list N]
[list N*2]
[list N*4]
[list N*8]
...

以此类推,直到达到某个最大值。为了维护它们,您只需获取一个或多个新条目的大小,然后使用LOG2(S/N)作为列表数组中的偏移量,以确定要将新块添加到哪个列表中。当您需要释放(或返回)最大的块时,只需从最大的列表向下扫描,直到找到第一个非空列表,然后扫描该列表中的最大块。

+1。假设您知道内部元素在堆中的位置,它也可以有效地删除它们。