java - Java 中的流媒体背包

标签 java algorithm optimization

我想在 java 中高效地实现“streaming Knapsack”问题。

问题是我有一个连续输入的整数数据流,例如 -1, 2, 9, 5, 5, 11, 1 -3,...

问题是找到前“k”个元素,其中它们的总和为“n>0”。例如 k=3 和 n=12,则解为:...,2,...,5, 5。

它的高效算法是什么?

最佳答案

保留反向订单PriorityQueue到目前为止,您遇到的 k-1 个最高值整数。每次输入一个新整数时,检查它与那些 k-1 个数字的总和是否大于 n。如果是 - 返回你找到的集合。否则检查此数字是否大于 k-1 数字中的最小值(这就是为什么您需要将优先级队列反向排序的原因)。如果是,则提取最小元素并将新元素插入队列。如果不是简单地转到流中的下一个数字。

关于java - Java 中的流媒体背包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14443654/

相关文章:

java - 为什么带有显式返回的空 lambda 和构造函数会导致编译器错误(Java Bug?)

java - Jena 未从导入的 RDF 文件加载数据

algorithm - 查找出现一次的元素

算法:如何在矩阵中找到全为1的列,时间复杂度O(n)?

mysql - 如何针对 LIKE '%abc%' 查询优化包含 1.6+ 万条记录的 MySQL 表

java - java中的高分辨率定时器

java - 在指定时间后在文本字段中显示文本

java - 这是一种新的排序算法吗? [使用 Java 和伪代码实现]

c - C代码中的矩阵乘法

mysql - 通过 BOOLEAN 值优化 SQL (mySQL)