この問題を解決するより良い方法はありますか?
これには2つの見方があります...「より良い」とはどういう意味かによって異なります。
「より良い」が「より少ない時間やメモリを使用する」ことを意味する場合、問題のサイズと利用可能なリソースに応じて、これに対処する潜在的な方法があります。例えば:
テキスト ファイル (または複数のファイル) がこれを正当化するのに十分な大きさである場合は、問題を分割してマルチプロセッサで実行することを検討できます。しかし、それは単純ではありません...そして、問題が小さすぎることが判明した場合、パーティション化のオーバーヘッドにより、実際にはソリューションが遅くなる可能性があります!
リンクされた Q&A には、ステップ 2 と 3 を潜在的に高速化する方法が説明されています。問題は、コードをベンチマークすると、ステップ 1 でほとんどの CPU 時間が費やされていることがわかるでしょう。(そして、入力ファイルが大きいほど、その効果は顕著になる可能性があります...)
「より良い」が「問題をより迅速に解決する」ことを意味する場合、答えは「おそらくいいえ」です。説明したアルゴリズムの適切に実装されたバージョンがあると仮定すると、(潜在的に) 高速なより洗練されたアルゴリズムに移行するための労力は、それだけの価値がない場合があります。
コンピューターの時間は、ソフトウェア開発者の時間よりも安い!
私のアドバイスは、次のことを行うことです。
既存のプログラムをベンチマークします。実際の入力ファイルで十分に高速に実行されますか? 「はい」の場合、プログラムが完了したと呼びます。
実際の入力ファイルで実行されている既存のプログラムをプロファイリングします。プロファイリングは明らかなパフォーマンスのホットスポットを示していますか? コードをチューニングする機会はありますか? 「はい」の場合は、それらを試して、ベンチマークの手順を繰り返して、実際に役立つかどうかを確認してください。
GC ログを見てください。コードに過剰な GC オーバーヘッドがある兆候はありますか? 「はい」の場合は、単純な GC チューニング (ヒープ サイズの増加など) で違いが生じるかどうかを確認してください。
上記のすべてを行っても満足のいくパフォーマンスが得られない場合は、今が代替アルゴリズムを探し始めるときです。