java - 找到对应于 k-large 元素的值

标签 java external-sorting

我的问题是关于大文件中的数据。

我有一个这种格式的大文件 - Primary_key Value( 例如:10000001 1 10000002 5 10000009 200 等 我想在 primary_key 列中找到与 k - large 元素对应的值。例如:如果 k=2,它应该按照上面的例子输出 200 和 5。

因为它是一个非常大的文件,所以我打算使用最小堆方法并且我非常理解这一点。但是,我的数据是键值对,我不知道如何在最小堆排序中使用它。

有关如何实现此目标的任何建议。非常感谢对此的任何帮助。

最佳答案

是的,你的方法是正确的,你可以使用优先队列(带最小堆)来实现这一点。您可以将数据存储在 map 中,然后在优先级队列中使用它,如下所示。

PriorityQueue<Map.Entry<String, Integer>> pq = new PriorityQueue<>((a, b) -> a.getValue()-b.getValue());
//psuedo code
for (line in file)
{ 
    //line[0] - denotes key and line[1] - denotes value
    count = map.getOrDefault(line[0], 0);
    map.put(num, count+line[1]);
}
for(Map.Entry<Integer, Integer> entry : counterMap.entrySet()) {
    pq.offer(entry);
    if(pq.size() > k) 
     pq.poll();
}

List<Integer> res = new LinkedList<>();
while(!pq.isEmpty()) {
    res.add(0, pq.poll().getValue());
}
return res;

关于java - 找到对应于 k-large 元素的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52918478/

相关文章:

c++ - 在 C++ 中高效地读取一个非常大的文本文件

c - 从 C 中的文件中单次访问读取 N 个整数

c++ - 如何按值对 LevelDB 进行排序

c++ - 合并 N 个保持时间顺序的日志文件

java - 如何为 CORS 指定响应 header ?

java - 友好的 URL 映射问题 - Java Spring

java - 如何使用 spring 依赖注入(inject)连接多个 fxml Controller ?

java - 在 Spring 中测试空模型属性

java - 我们可以使用 Robot Framework 来自动化 Web 和移动应用程序来执行并行执行吗

c - 如何用 C 语言实现这种外部合并排序算法?