我正在传递一系列keyvaluepair<string, uint>
对,其中字符串表示值,uint表示源数据中出现的值的频率。我需要能够在内存中保存 x 大多数/最不频繁出现的值及其频率。
x 应该相当小,但我可能需要检查数百万对。请注意,我无法改变通过配对的方式。
最好的方法是什么?我猜测有两个数组可能是最好的选择,并且当每个值被传递时,根据值,将其插入到排序数组中并删除最少/最频繁的值。
答案 0 :(得分:2)
听起来您正在搜索priority queue数据结构。只需构建两个,一个用于最常用的对,一个用于最少使用的对,并动态填充它们和/或仅保留相关数量的值 - 这对于优先级队列尤其容易。例如,仅保存十个最大的项目(伪代码):
PriorityQueue pq = new PriorityQueue();
foreach (var kvp in input) {
pq.Add(kvp);
if (pq.Count > 10)
pq.RemoveMin();
}