私はコーディングコンテストで このpuzzle
質問[ ]に直面しました。related to data structure
木の惑星があります (木のデータ構造ではなく、実際の木です!!)。そこには何十億、あるいは何兆もの木があります。王は、炭素年代測定法を使用して、すべての木の年齢の中央値 (年と整数) を見つけるように命じました。( Method does not matter.
) 注: 中央値は、並べ替えられた数字のリストの「中間の数字」です。
制約:
1.
最も古い木は 2000 歳であることが知られています。
2.
-infinity から +infinity までの範囲の整数を格納できる単一のマシンがあります。
3.
ただし、一度にメモリに格納できるそのような整数の数は 100 万です。
したがって、100 万個の整数を保存して次の整数を保存したら、既に保存されている整数を削除する必要があります。
そのため、樹木の年齢を数えながら、中央値を追跡する必要があります。
彼らはどのようにこれを行うことができますか?
私のアプローチ
外部ソートのバリアントを使用して、年齢をチャンクでソートし、ファイルに書き込みます。
[チャンクに] k-way マージを適用します。
上記のアプローチの問題は、ファイルを 2 回スキャンする必要があることです。
情報を使用する別のアプローチを考えることができます[ ]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?
]