ストゥージソートとは
ストゥージ
ソート(Stooge sort)は、
再帰的な構造を持つ
ソートアルゴリズムの一つです。その特徴は、極めて非効率な計算時間にあります。具体的には、計算時間がO(n^(log 3 / log 1.5)) = O(n^2.7095...)と非常に大きくなり、実用的な
ソートアルゴリズムとして使われることはほとんどありません。むしろ、アルゴリズムの効率を学ぶ上で、その非効率さを際立たせる例としてしばしば取り上げられます。
ストゥージソートのアルゴリズム
ストゥージ
ソートのアルゴリズムは、以下の3つのステップで構成されます。
1.
比較と交換:
- まず、
ソート対象のリスト(または部分リスト)の末尾の要素が先頭の要素よりも小さい場合、それらの要素を交換します。
2.
再帰的なソート:
- リスト(または部分リスト)の要素数が3以上である場合、次の3つのステップを順に実行します。
- リストの先頭から2/3の部分に対して、ストゥージ
ソートを
再帰的に適用します。
- リストの末尾から2/3の部分に対して、ストゥージ
ソートを
再帰的に適用します。
- 再び、リストの先頭から2/3の部分に対して、ストゥージ
ソートを
再帰的に適用します。
3.
終了条件:
- リストの要素数が2以下になった場合、アルゴリズムは終了します。
このアルゴリズムは、
再帰的な呼び出しを繰り返すことで、リスト全体を
ソートします。しかし、同じ部分リストに対して何度も
ソートを行うため、非常に非効率な結果となります。
ストゥージソートの計算時間
ストゥージ
ソートの計算時間は、前述の通りO(n^2.7095...)と非常に大きいです。これは、同じ部分リストに対して何度も
ソートを繰り返すというアルゴリズムの性質に起因します。
一般的な
ソートアルゴリズムであるマージ
ソートの計算時間がO(n log n)であることと比較すると、ストゥージ
ソートの非効率さが際立ちます。また、単純な
ソートアルゴリズムの代表格であるバブル
ソートの計算時間O(n^2)よりも遅いという点からも、実用的なアルゴリズムとは言えません。
ストゥージソートの利用例
ストゥージ
ソートは、その非効率性から、実用的な
ソートの場面で使われることはまずありません。主に、以下のような目的で利用されます。
アルゴリズム学習:
- 非効率な
ソートアルゴリズムの代表例として、アルゴリズムの効率性を学ぶための教材として利用されます。
教育:
-
再帰の概念を理解するための例として使用されることがあります。
理論的な研究:
- 特定のアルゴリズムの特性を研究するために利用されることがあります。
まとめ
ストゥージ
ソートは、そのユニークな
再帰的構造を持つ一方で、非常に非効率な
ソートアルゴリズムです。実用的な
ソートには全く不向きですが、アルゴリズムの効率性を理解するための良い例となります。このアルゴリズムを通して、効率的な
ソートアルゴリズムの重要性を再認識することができます。
参考文献
Black, Paul E. “stooge sort”. Dictionary of Algorithms and Data Structures. National Institute of Standards and Technology.
Cormen, Thomas H.; Leiserson, Charles E., Rivest, Ronald L., Stein, Clifford (2001) [1990]. "Problem 7-3". Introduction to Algorithms (2nd ed.). MIT Press and McGraw-Hill. pp. 161-162. ISBN 0-262-03293-7.
外部リンク
Everything2.com - Stooge sort
Sorting Algorithms (including Stooge sort)
Stooge sort - implementation and comparison