我在编码竞争中遇到了这个问题[related to data structure
]。关于数据结构的一个难题
有一颗行星树(真正的树不是树数据结构!!)。它拥有数十亿甚至数万亿棵树。国王命令使用说碳定年来找出所有树木的年龄中位数(年数和整数)。 (Method does not matter.
) 注意:中位数是排序数字列表中的“中间数字”。
约束:
1.
最古老的树被称为是2000年的历史。
2.
他们有单机可以存储整数范围从-infinity到+ infinity。
3.
但是,一次可以存储在内存中的这种整数的数量是100万。
因此,一旦您存储100万整数来存储下一个整数,您必须删除已存储的整数。
因此,他们不得不跟踪中位数,因为他们继续计算树木的年龄。
他们如何做到这一点?
我的做法
使用外部排序的变体,在&它们写入文件块的年龄排序。
应用k-way合并[对于块]。
上述方法的问题是它需要对文件进行两次扫描。
我能想到的另一种方法它采用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?
]
不知道这是否有助于:[Huffman编码](http://en.wikipedia.org/wiki/Huffman_coding) – lllluuukke
使用Gödel编码将所有树木的年龄存储在一个存储位置是否存在作弊? – Ishtar
不,更好的主意是赞赏。 –