【发布时间】:2011-03-18 03:26:05
【问题描述】:
我正在实现类似缓存的东西,它的工作原理是这样的:
- 如果给定键的新值来自某个外部进程,请存储该值,并记住该值到达的时间。
- 如果我们处于空闲状态,则在缓存中查找最旧的条目,从外部源获取键的新值并更新缓存。
- 在询问时返回给定键的值。
我需要一个数据结构来存储键值对,以便尽可能快地执行以下操作(按速度优先顺序):
- 找到具有最低(未知)值的键。
- 更新给定键的值,如果键不存在,则添加新的键值对。
- 其他常规哈希表操作,如删除键、检查键是否存在等。
是否有任何数据结构允许这样做?这里的问题是,为了快速执行第一个查询,我需要一些按值排序的东西,并且要快速更新给定键的值,我需要按键排序的东西。到目前为止,我最好的解决方案是这样的:
将值存储在常规哈希表中,将 (value, key) 对存储为值排序堆。查找最小值的键是这样的:
- 找到堆中最小值的键。
- 从哈希表中找到该键的值。
- 如果值不匹配,则从堆中弹出值并从第 1 步开始重复。
更新值如下:
- 将值存储在哈希表中。
- 将新的(值、键)对推送到堆中。
删除键比较棘手,需要在堆中搜索值。这提供了类似于 O(log n) 的性能,但这种解决方案对我来说似乎很麻烦。
是否有任何数据结构结合了键的哈希表和关联值的堆的属性?我正在用 Python 编程,所以如果 Python 中有现有的实现,那将是一个很大的优势。
【问题讨论】:
标签: python data-structures caching