私は SO や他の場所でさまざまな同様の質問を見てきましたが、新しい質問を正当化する特別な状況があると感じました。
これは質問です:
最大 10 億の整数を格納できる整数の配列があります。これらの数値は 10 億から 10 億の間ですが、値が欠落している可能性があります。したがって、値ごとに 32 ビットで十分です。私がやりたいことは、重複がないことを確認することだけです。重複の最初の発生を見つけた瞬間、大騒ぎして終了します。これは多数のファイルに対して行う必要があり、ファイルに重複があることはめったにないと予想されます。そのため、平均的なケースが最悪のケースになることもよくあります。
シェルでこれを非常に簡単に行う方法を知っています(テキストファイルで、次の整数を読み取ります:sort | uniqなど)。約13秒かかります。したがって、うまくいけば、純粋な C スマート アルゴリズムの方がうまくいくでしょう。私の考えは、配列で高速な (できればすぐに利用できる) 並べ替えを使用し、連続する各ペアの違いを繰り返し計算するというものです。ゼロを見つけた瞬間、立ち止まって終了します。
おもちゃの例を次に示します。
1001
1002
1003
1004
1005
1003
...
最初に配列をソートして取得します: 1001 1002 1003 1003 1004 1005 ...
次に、line3 - line4 == 0 と表示された 4 行目で停止します。
すべてが順調であれば、終了コード 0 で黙って終了します。
これらは私の要件/制約です: 1) 私は C の初心者です (私のベルトの下には数百行のコードしかありません)。2) 私は純粋な C ソリューションを学ぶことを強く好みます。標準ライブラリは問題ありません。3) C++ ソリューションがプログラミング時間の短縮に関して非常に優れている場合は、それも提案してください。
どうもありがとう。