30 個のファイルがあり、いずれのファイルにも約 100,000 個のデータ項目が含まれています。データ項目は次のようになります。 1 つのファイルに一度だけ出現しましたが、他のファイルに出現する可能性があります。
10個のキーを取得するにはどうすればよいですか。その合計カウント値は、30個のファイルから上位10個すべてに含まれる必要があります。
どんな助けでも大歓迎です。
合計数が最大の10個のキーが必要だと仮定しています[最初のコメントによると、これは本当のようです]
設計ガイドライン:
アルゴリズム :
HashMap:key->int
であり、ファイルの読み取り中に入力されます。読み取っている各キーについて、それが既にヒストグラムにある場合は、カウントをヒストグラムの既存の値に追加し、存在しない場合は、(key,count) ペアをヒストグラムに追加します。【O(n)
平均走行時間】O(n)
も同様です。利点:
O(n)
平均実行時間。不利益:
1:仮定が正しくない場合、キーをハッシュし、キーのみを保存することで部分的に解決できます。ディスク自体でハッシュの衝突が発生したら、等しいかどうかを確認します。読み取り数は増えますが、衝突の数は比較的少なく、優れたハッシュ関数を使用できます。また、それらのハッシュがメモリに衝突したキーをロードする必要があります [繰り返しますが、複数のディスク読み取りを避けるため]、それらのみをロードすると、要素の総数よりもはるかに小さい数になります。
私は次のことを試みます: