一般的に、最悪の場合の複雑さO(N * log(N))で実行される任意のデータに対して「よりスマートな」比較ソートが行われます。ストリーミングされたデータをソートされたリストに読み込む
私の質問は、コレクションを並べ替えるのではなく、データのストリームを並べ替えるように求められた場合です。つまり、値は私たちに一つずつ与えられ、次に来るものは示されません(データが有効/範囲内であることを除いて)。直観的には、すべてを集めて後でソートする(ポーカーハンドを仕分けした後にソートする)のではなく、ポーカーハンドを1つずつピックアップするようなデータをソートする方が優れていると考えるかもしれません。これは事実ですか?
収集と並べ替えはO(N + N * log(N))= O(N * log(N))となります。しかし、それが来るようにソートすると、O(N * K)です。ここで、Kは、適切なインデックス+要素を挿入する時間を見つけるための時間です。 Kの値はデータ構造の選択に依存するため、これは事を複雑にします。配列はインデックスを見つける上で優れていますが、要素を挿入する時間が無駄です。リンクリストは簡単に挿入できますが、バイナリ検索でインデックスを見つけることはできません。
この問題に関する完全なディスカッションはありますか?いつどのような方法を使うべきですか?しばらく毎回ソートするのが望ましい中間戦略かもしれませんか?