2

アルゴリズムを考え出すのに問題があります。ここで私を助けてくれませんか?

巨大なファイルがあるため、一度にロードできません。重複データが存在します (汎用データ、文字列の可能性があります)。重複を削除する必要があります。

4

4 に答える 4

2

簡単だが遅い解決策の 1 つは、HashSet で 1 番目のギガビットを読み取ることです。ファイルの残りの部分を順番に読み取り、ファイル内にある重複した文字列を削除します。メモリ(ハッシュセット)で2番目のギガビットを読み取り、ファイル内の重複を何度も削除するよりも... プログラムは非常に簡単で、一度だけ実行したい場合は十分です。

于 2011-05-22T16:46:09.517 に答える
1

各レコードのハッシュを計算し、それをマップに保持できます>

マップを構築するファイルを読み取り、マップに HashKey が存在することがわかった場合は、再確認するために位置を探します (等しくない場合は、マップされたセットに場所を追加します)

于 2011-05-22T17:36:48.690 に答える
0

2番目の解決策:

  1. <String, Position in original file> のペアを書き込む新しいファイルを作成します。
  2. 文字列に従って大きなファイルに従来の並べ替えを使用するよりも(大きなファイルの並べ替え=メモリ内のファイルの小さな部分を並べ替え、それらをマージするよりも)-この間に重複を削除します
  3. そして、元の順序を再構築するよりも=再度ソートしますが、「元のファイルの位置」に従って
于 2011-05-22T17:32:38.483 に答える
0

入力がファイルにどのように配置されているかによって異なります。各行を行データで表すことができる場合。

もう 1 つの方法は、データベース サーバーを使用し、一意の値の列を持つデータベース テーブルにデータを挿入し、ファイルから読み取ってデータベースに挿入することです。最後に、データベースにはすべての一意の行/行が含まれます。

于 2011-05-22T19:19:31.657 に答える