用于保存一组对(k,v)
的最合适的数据结构是什么,我必须对v
执行与v
相同的更新量,以查找具有最少{{1}的元素的数量}}?
我正考虑将它们保持在map<pair<k,v>>
并且每次插入新对时找到最小v
的对(添加量非常小......)。
每次我更新v
我会将它与“最小”对进行比较,如果它更小,我会更新“最小”对。
我有更好的解决方案吗?
答案 0 :(得分:1)
您的解决方案仅考虑新值低于旧的最小值的情况 如果旧的最小值增加,它将失败,并且您必须找到新的最小值。
我会保留2张地图:
map<k,v> kKeyMap;
multimap<v,&k> vValueMap;
使用multimap获取最低值(因为它可以使用相同的v处理多个k) 像常规地图一样,它是有序的,因此获取最低值只需要获取地图中的第一个项目 O(1)。
在每次更改时,您使用第一张地图(kKeyMap
)查找 k ,然后更改值 O(logn)。
使用旧的 v 值从多图中删除旧的(v,k)值,然后添加新的(v,k)值。的 O(logn)时间强>
因此,您有最低的O(1)查询和插入的O(logn)。假设n = #k