7

それぞれが1,000万行を超える2つの大きなテキストファイルがあります。C ++を使用してファイルを比較し、ファイル内の異なる行を取得するにはどうすればよいですか。

1つのファイルをメモリにロードしてメモリをソートし、バイナリツリーロジックを使用してファイルを比較してみました。比較して、20秒で結果が出ました。しかし、それはより多くのメモリを消費しています。(テキストファイルは約500 MBです)。

メモリを消費せずに2つのファイルを比較し、パフォーマンスを向上させ、ハードディスクへの影響を最小限に抑えたいと考えています。

4

1 に答える 1

4

2パス方式を使用できます。

最初のパスでは、ファイルを読み取りますが、ハッシュ値と行の行の開始位置のみを保存します。その後、uはハッシュ値に基づいてファイルを比較できます。2つの行が同じハッシュ値を持つ場合、2番目のパスで完全に比較するために行を再度読み取るだけです。これにより、メモリ消費量とCPU時間が節約されますが、一部の行を2回読み取ると少しペナルティがあります。

于 2012-08-06T17:27:04.367 に答える