選択ソートがバブルソートよりも速いのはなぜですか?


28

ウィキペディアには、「...選択ソートはほとんど常にバブルソートおよびGNOMEソートよりも優れている」と書かれています。どちらもバブルソートよりも選択ソートが速いと考えられる理由を誰にでも説明してください:

  1. 最悪の場合の時間の複雑さO(n2

  2. 比較の数On2

  3. 最適な時間の複雑さ

    • バブルソート:On
    • 選択ソート:On2
  4. 平均ケース時間の複雑さ

    • バブルソート:On2
    • 選択ソート:On2

回答:


32

あなたが提供した複雑さはすべて真実ですが、それらはBig O表記法で与えられているため、すべての加算値と定数は省略されています。

あなたの質問に答えるには、これら2つのアルゴリズムの詳細な分析に焦点を合わせる必要があります。この分析は手作業で行うことも、多くの本で見つけることもできます。KnuthのArt of Computer Programmingの結果を使用します。

比較の平均数:

  • バブルソート12N2NlnNγ+ln21N+ON
  • 挿入ソート14N2N+NHN
  • 選択ソートN+1HN2N

これらの関数をプロットすると、次のようになります。 プロット プロット2

ご覧のとおり、両方の並べ替え方法の漸近的な複雑さは同じですが、要素の数が増えるとバブルの並べ替えははるかに悪くなります。

この分析は、入力がランダムであるという仮定に基づいています-これは常に真実ではないかもしれません。ただし、並べ替えを開始する前に、(任意の方法を使用して)入力シーケンスをランダムに並べ替えて、平均ケースを取得できます。

時間の複雑さの分析は実装に依存するため省略しましたが、同様の方法を使用できます。


「入力シーケンスをランダムに並べ替えて平均ケースを取得できる」という問題があります。ソートに必要な時間よりも速く処理できるのはなぜですか?
サショニコロフ

1
NNONログNN

私は眠かったと思います、あなたは正しいです、シーケンスは線形時間で並べ替えられます
サショニコロフ2013

HN=ΘlogN

ガンマ= 0.577216はオイラー・マスケローニの定数です。関連する章は、「プログラミングの技術」第3巻5.2.2ページです。109および129。バブルソートの場合、特にO(sqrt(N))の項を正確にどのようにプロットしましたか?あなたはただそれを無視しましたか?
mxmlnkn

11

O

関数や比較やスワップの数などの関数自体は、同じレートで成長する限り、漸近コストが同じ2つのアルゴリズムでは異なる場合があります。

n/41

k×nkn/2n1×n2/2

要約すると、漸近的制限は、入力サイズに対してアルゴリズムのコストがどのように増加するかをよく理解できますが、同じセット内の異なるアルゴリズムの相対的なパフォーマンスについては何も言いません。


1
これは、非常に良い答えです
Grijesh Chauhan

好きな本は?
グリジェシュショーハン

@GrijeshChauhan:本は趣味の問題ですので、お勧めは塩一粒です。個人的には、Cormen、Leiserson、Rivestの「Introduction to Algorithms」では多くのトピックの概要を説明しています。特定のトピックの詳細が必要な場合は、Knuthの「The Art of Computer Programming」シリーズが好きです。書籍の質問が以前にここで尋ねられたかどうかを確認するか、そうでない場合はその質問を投稿することができます。
ペドロ

私にとって、あなたの答えの3番目のパラは実際の答えです。他の回答で与えられた、大きな入力のグラフではありません。
過剰交換

3

バブルソートはより多くのスワップ時間を使用しますが、選択ソートはこれを回避します。

ソートの選択を使用する場合n、最大で時間をスワップします。ただし、バブルソートを使用すると、ほとんどスワップされn*(n-1)ます。そして、明らかに、読み取り時間は、メモリ内であっても書き込み時間よりも短くなります。比較時間およびその他の実行時間は無視できます。そのため、スワップ時間は問題の重大なボトルネックです。


Bartekのもう1つの答えはもっと合理的だと思いますが、投票したりコメントしたりすることはできません。
simonmysun

2つのアイテムを比較するのにかかる時間が2つのアイテムを交換するのにかかる時間をはるかに超える場合があるため、単純に比較回数を無視することはできません。非常に長い文字列のリンクリストを考えてみてください(それぞれ10万文字)。各文字列の読み取りは、ポインターの再割り当てよりもはるかに時間がかかります。
アービン・リム

@IrvinLimあなたは正しいかもしれませんが、考えを変える前に統計データを見なければならないかもしれません。
-simonmysun
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.