数十億の整数を含む非常に大きなファイルがありk
、これらの値の最大の要素を見つけたいとします。
トリッキーな部分は、k
それ自体も非常に大きいことです。つまり、k
要素をメモリに保持することはできません (たとえば、1000 億の要素を含むファイルがあり、100 億の最大の要素を見つけたいとします)。
でこれを行うにはどうすればよいO(n)
でしょうか。
私が思ったこと:
ファイルの読み取りを開始し、最大の要素を保持する別のファイルでチェックしますk
(昇順でソート)。読み取った要素が 2 番目のファイルの最初の行よりも大きい場合は、最初の行を削除して 2 番目の行に挿入します。 file 、時間の複雑さはO(NlogK)
(そのファイルにランダムにアクセスできる場合、それ以外の場合は「O(Nk)」になります)
でこれを行うアイデアはありますが、(クイックソートのパーティショニングアルゴリズム)のO(n)
外部バージョンがあれば、でSelection algorithm
これを行うことができると思いますがO(n)
、どこにも見つかりませんでした