上記の質問に対するアルゴリズムを探しているわけではありません。誰かに私の答えにコメントしてもらいたいだけです。
面接で次の質問をされました。
大量の数値セットから上位 100 の数値を取得する方法 (メモリに収まらない)
そして、これは私が言ったことです:
数値をそれぞれ 1000 のバッチで分割します。各バッチを "O(1)" 時間で並べ替えます。これまでの総所要時間は O(n) です。ここで、第 1 バッチと第 2 バッチ (O(1)) から最初の 100 個の数字を取得します。上記の計算された番号と 3 番目のバッチなどから最初の 100 を取得します。これには合計で O(n) が必要になるため、O(n) アルゴリズムになります。
インタビュアーは、1000 個の番号のバッチを分類すると答えます。O(1) 時間はかからないので、バッチから最初の 100 を選択することはありません。多くの議論の後、彼は O(n) 時間かかるアルゴリズムに問題はない、と彼は言いました。バッチの並べ替えには O(1) 時間がかかると言っている私の問題。
私の説明は、1000 は入力 (n) に依存しないということでした。n が何であるかに関係なく、私は常に 1000 個のバッチを作成します。計算する必要がある場合、ソートには O(1000*log 1000)) が必要です。これは本質的に O(1) です。
適当に計算するとこうなる
1000*log 1000 で 1 つのバッチを並べ替える (n/1000) そのようなバッチには 1000 * log 1000 * n/1000 = O(n*log(1000)) 時間 = O(n) 時間
私はこれについても多くの友人に尋ねましたが、彼らは私に同意しましたが、部分的には同意しました. ですから、私の推論が 100% 正しいかどうかは知りたくありません (99% 正しいとしても批判してください)。
この投稿は、上記の投稿された質問に対する回答を求めているわけではないことを覚えておいてください。1億の数字からトップ100の数字を取得するで、より良い答えをすでに見つけました