我正在实现像缓存这样的工作:
我需要一个数据结构来存储键值对,这样可以尽快执行以下操作(按照速度优先级的顺序):
是否有允许这样的数据结构?这里的问题是,为了快速执行第一个查询,我需要一些有价值的东西,并快速更新给定键的值,我需要一些按键排序的东西。到目前为止,我所拥有的最佳解决方案是这样的:
将值存储为常规哈希表,并将(value,key)对存储为值有序堆。找到最低值的关键是这样的:
更新值如下:
删除密钥更棘手,需要在堆中搜索值。这给出了O(log n)性能,但这个解决方案对我来说似乎很麻烦。
是否有任何数据结构将键的哈希表的属性和关联值的堆组合在一起?我正在用Python编程,所以如果在Python中有现有的实现,那么它是一个很大的优点。
答案 0 :(得分:3)
大多数堆实现会在O(1)时间内获得集合中的最低密钥,但无法保证随机查找或删除的速度。我建议配对两个数据结构:任何简单的堆实现和任何开箱即用的哈希表。
当然,任何平衡二叉树都可以用作堆,因为最小值和最大值分别位于最左侧和最右侧的叶子上。红黑树或AVL树应该为您提供O(lg n)堆和字典操作。
答案 1 :(得分:0)
您正在寻找地图或关联数组。为了更具体,我们需要知道您尝试使用的语言。
答案 2 :(得分:0)
我试试:
import heapq
myheap = []
mydict = {}
...
def push(key, val):
heapq.heappush(myheap, (val, key))
mydict[key] = val
def pop():
...
更多信息here