我在一次编程比赛中遇到了这个与数据结构相关的谜题。
某个星球上有无数棵树(真正的树木,不是树形数据结构!)。国王下令使用碳定年法找到所有树木的年龄(以整数年为单位)的中位数。(方法不重要
)
限制条件:
1.
最老的树被认为有2000岁。
2.
他们只有一台机器,可以存储范围从负无穷到正无穷的整数。
3.
但是每次可以同时存储在内存中的这种整数的数量最多为100万。
因此,一旦您存储了100万个整数,为了存储下一个整数,您必须删除已经存储的整数。
因此,他们必须想办法随着树龄的统计来跟踪中位数。
他们该如何实现呢?
我的思路
使用外部排序的变体将年龄分块并将它们写入文件。
应用k路归并[对于这些块]。
以上方法的问题是需要两次扫描文件。
我能想到另一种方法,它使用信息最老的树被认为有2000岁。
我们不能采用一个计数数组[因为树龄的范围是固定的
]吗?
我想知道是否存在更好的方法?
是否存在一种不需要将数据存储在文件中的方法?[只需要主内存就足够了?
]