输入1:一个包含长整数列表的.csv文件。例如:
1
10
23
2450
12
560
320
705
...输入2:一个包含整数列表的.csv文件,以及每个整数旁边的空白位置。
5 -
12 -
15 -
13 -
350 -输出:从输入1中查找输入2整数大于或等于的整数计数,并将其追加到.csv文件中。
问题是,这涉及DNA测序,而输入1有超过一百万个数据条目。怎样才能有效地解决这个问题?
我的想法是将输入1的所有条目读入一个大数组中,并对其进行排序,但这既效率低下,又需要大量内存。如有任何指导,将不胜感激。
编辑:
输出(与输入2相同的文件):
整数,计数
5 1
12 3
15 3
13 3
350 5 发布于 2017-12-05 21:05:20
将第二个文件中的数字放入值为零的排序映射中:
TreeMap<Integer, Integer> counts = new TreeMap<>();
for (Integer i : fromFile2) {
counts.put(i, 0);
}然后,对于从第一个文件读取的每个数字,将计数增加到该数字:
for (Integer i : fromFile1) {
counts.headMap(i).replaceAll((k, v) -> v + 1);
}请注意,第二个循环不需要将整个文件读入内存:您可以一次只读取一个文件。
另外,请注意,headMap(i)返回键严格小于i的条目。假设是i < Integer.MAX_VALUE,您可以简单地将1添加到该值。
https://stackoverflow.com/questions/47662240
复制相似问题