在内存中保存x最多/最不频繁发生的keyvaluepair的方法

时间:2009-09-03 15:03:50

标签: c# data-structures

我正在传递一系列keyvaluepair<string, uint>对,其中字符串表示值,uint表示源数据中出现的值的频率。我需要能够在内存中保存 x 大多数/最不频繁出现的值及其频率。

在这种情况下,

x 应该相当小,但我可能需要检查数百万对。请注意,我无法改变通过配对的方式。

最好的方法是什么?我猜测有两个数组可能是最好的选择,并且当每个值被传递时,根据值,将其插入到排序数组中并删除最少/最频繁的值。

1 个答案:

答案 0 :(得分:2)

听起来您正在搜索priority queue数据结构。只需构建两个,一个用于最常用的对,一个用于最少使用的对,并动态填充它们和/或仅保留相关数量的值 - 这对于优先级队列尤其容易。例如,仅保存十个最大的项目(伪代码):

PriorityQueue pq = new PriorityQueue();

foreach (var kvp in input) {
    pq.Add(kvp);
    if (pq.Count > 10)
        pq.RemoveMin();
}