数据结构最适合寻找最小值

时间:2013-11-10 15:54:29

标签: c++ data-structures

用于保存一组对(k,v)的最合适的数据结构是什么,我必须对v执行与v相同的更新量,以查找具有最少{{1}的元素的数量}}?

我正考虑将它们保持在map<pair<k,v>>并且每次插入新对时找到最小v的对(添加量非常小......)。

每次我更新v我会将它与“最小”对进行比较,如果它更小,我会更新“最小”对。

我有更好的解决方案吗?

1 个答案:

答案 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