【发布时间】:2012-08-22 21:01:35
【问题描述】:
有 2 亿个浮点数,可能有些是重复的。
什么是获取其中每个元素排名的有效方法(例如,内存小于 1G)?
像这样:
输入:[3.2, 3.2, 3.4, 7.81, 1.0]
输出:[2, 2, 4, 5 ,1]
我想到了bitmap sort,但在这种情况下它看起来并不节省内存。
【问题讨论】:
-
元素的“等级”到底是什么?
-
你不太可能在远低于 1.6G 的情况下做到这一点。存储浮点数本身需要 2 亿 * 4 字节 = 800 MB,然后存储输出是另一个(至少)800 MB。
-
@dbaupp 我假设这些值最初存储在磁盘上,并且排名也将保存在磁盘上,因此不一定需要将整个数据集存储在内存中.
-
我认为他的意思是“排名”是排序列表中数字的索引,但是有 2 个相等的值占据输出中第一个的排名(在他的示例中,3.2 都排名为 2 . 1.0 排名第 1,因为它是最小值。)
-
位图不起作用:因为 1)你不知道一个元素可以出现多少次(嗯,最多 2 亿次,但这并没有多大帮助) 2)浮动占据连续范围。
标签: java c algorithm sorting hash