先週私はつまずいた この論文 著者が2ページ目に言及しているところ:
これにより、整数のEdgeウェイトの線形実行時間が得られることに注意してください。
3ページ目でも同じ:
これにより、整数エッジの重みの線形実行時間と、比較ベースの並べ替えのO(m log n)が得られます。
そして8ページ目:
特に、高速整数ソートを使用すると、おそらくGPAが大幅に高速化されます。
これは、整数値の特別な状況下でO(n)ソートアルゴリズムがあることを意味しますか?または、これはグラフ理論の専門ですか?
PS:
最初のページで彼らが言うのは、参考文献[3]が役立つ可能性があるからです。
[..]整数エッジ重み[3]、[...]などのグラフクラスのさらなる改善が達成されました。
しかし、私はどの科学雑誌にもアクセスできませんでした。
はい、基数ソートとカウントソートはO(N)
です。これらは比較ベースのソートではなく、Ω(N log N)
下限を持つことが証明されています。
正確には、基数ソートはO(kN)
です。ここで、k
は、ソートされる値の桁数です。並べ替えのカウントはO(N + k)
です。ここで、k
は並べ替えられる数値の範囲です。
k
が十分に小さく、基数ソートとカウントソートの両方が実際に線形時間のパフォーマンスを示す特定のアプリケーションがあります。
比較ソートは、平均で少なくともΩ(n log n)でなければなりません。
ただし、 counting sort および radix sort は入力サイズに比例してスケーリングします。これらは比較ソートではないため、入力の固定構造を活用します。
カウントのソート: http://en.wikipedia.org/wiki/Counting_sort 整数がかなり小さい場合。数値が大きい場合は基数ソート(これは基本的にカウントソートの一般化、または必要に応じて数値が大きい場合の最適化です): http://en.wikipedia.org/wiki/Radix_sort
バケットソートもあります: http://en.wikipedia.org/wiki/Bucket_sort
(主に大きなメモリオーバーヘッドのため)あまり実用的ではありませんが、別の興味深い線形時間ソートアルゴリズムとして Abacus(Bead)Sort に言及すると思いました。
これらのハードウェアベースの並べ替えアルゴリズム:
比較のないソートアルゴリズム
ハードウェアでの2進数のソート-新しいアルゴリズムとその実装
レーザードミノソートアルゴリズム -カウントソートのO(n)
を超えるO(n + k)
時間の複雑さを達成するためのカウントソートに基づく私による思考実験。
もう少し詳細を追加する-実際には、日付までの最良のソートアルゴリズムはO(n)ではなく0(n\sqrt {\ log\log n})です。
このアルゴリズムの詳細については、ペーパーで確認できます。 http://dl.acm.org/citation.cfm?id=652131