我在编码比赛中 遇到了这个puzzle
问题[ ]。related to data structure
有一颗树的星球(真正的树不是树的数据结构!!)。它有数十亿甚至数万亿棵树。国王命令使用碳测年法找出所有树木的年龄中位数(以年和整数为单位)。( Method does not matter.
) 注意:中位数是排序后的数字列表中的“中间数字”。
限制条件:
1.
已知最古老的树有 2000 年的历史。
2.
他们有一台机器,可以存储从 -infinity 到 +infinity 范围内的整数。
3.
但是一次可以存储在内存中的这种整数的数量是 100 万个。
所以,一旦你存储了 100 万个整数来存储下一个整数,你必须删除已经存储的一个。
因此,当他们继续计算树木的年龄时,他们必须以某种方式跟踪中位数。
他们怎么能做到这一点?
我的方法
使用外部排序的变体对年龄进行分块排序并将它们写入文件。
应用 k 路合并[对于块]。
上述方法的问题是它需要对文件进行两次扫描。
我可以想到另一种使用信息的方法The oldest tree is known to be 2000 years old.
我们不能采用count array
[ as range of ages of tree is fixed
] 吗?
我想知道有没有更好的方法?
是否存在不需要将数据存储在文件中的任何方法?[ where only main memory is sufficient?
]