文字列を含むファイルを並べ替えることができれば、並べ替えられたリストを読み取って重複を数えるのは簡単です。(元のファイルを保持して、ソートされた文字列の新しいファイルを作成できます。) 大きなファイルを効率的にソートすることは、古いテクノロジです。そのためのユーティリティを見つけることができるはずです。
を並べ替えることができない場合は、文字列を消化することを検討してください。MD5 は、あなたの目的にはやり過ぎかもしれません。あなたは何かを石畳にすることができます。数十億の文字列の場合、8 バイトのダイジェストを使用できます。ダイジェストのツリー (おそらく BST) を使用します。ダイジェストごとに、そのダイジェストを生成する一意の文字列のファイル オフセットを保存します。
文字列を読み取るときは、ダイジェストを計算して調べます。ダイジェストが見つからない場合は、文字列が一意であることがわかります。ツリーに格納します。ダイジェストが見つかった場合は、関連する各文字列をチェックして一致するかどうかを確認し、それに応じて処理します。
文字列を比較するには、ファイルに移動する必要があります。保存したのはファイル オフセットだけだからです。
2 つのダイジェストが異なる場合、それらを生成した文字列も異なる必要があることを覚えておくことが重要です。ダイジェストが同じ場合、文字列が同じではない可能性があるため、確認する必要があります。このアルゴリズムは、重複する文字列が少ないほど効率的になります。