コンテンツにスキップ

ボゴソート

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。U-ichi (会話 | 投稿記録) による 2007年7月16日 (月) 17:34個人設定で未設定ならUTC)時点の版であり、現在の版とは大きく異なる場合があります。

ボゴソートは、ソートアルゴリズムの一つ。 平均的な計算時間はO(n×n!)で、非常に効率の悪いアルゴリズムとして知られている。 安定ソートではない。

アルゴリズム

トランプを順に並べる場合を例にすると、次のようになる。

  1. トランプ52枚の束を放り投げて、ばらばらにする。
  2. 1枚ずつ無作為にすべてを拾い集める。
  3. ソートされているか確認する。もしソート済みでなければ、1から3までの手順を繰り返す。

カードをシャッフルし続けて、偶然一列に並ぶのをひたすら待ちつづけるアルゴリズムと考えても良い。

疑似コード

function bogosort(array)
  repeat 
    array := random_permutation(array)
  until is_sorted(array)

計算時間および停止性

すべての要素が互いに異なる場合、時間計算量はO(n×n!)となる。 実際の計算時間は、等しい要素が含まれているか、そしてそれらがどのくらいの頻度で含まれているかに依存する。

アルゴリズムの停止性無限の猿定理en:Infinite monkey theorem)により保証される。 ただし計算機擬似乱数を用いて実行すると、入力によっては停止しない場合がある。