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