スパゲティソート

提供: testwiki
ナビゲーションに移動 検索に移動
スパゲティ・ソートの模式図。台に置いたスパゲティの束から、突き出た順に取り出すことでソートができる。

スパゲティソート (Spaghetti sort) はコンピュータ科学における並べ替えアルゴリズムの一種。一般には使われることがない思考上のアルゴリズムである。数学者で作家のテンプレート:仮リンクが考案した[1][2][3]。スパゲティソートの平均計算時間は、データ数がn倍になると、n倍になる。また、デュードニーがこのソートの説明を乾燥スパゲティを長さ順に並べ替える手順に例えたことで知られる。

アルゴリズム

アルゴリズム考案者のデュードニー自身が、スパゲティの並べ替えに例えて説明している。

  1. 長さが不揃いの乾燥スパゲティの束があったとする。これを手で軽く握ってテーブルの表面に立てる。
  2. 次に、もう一方の手を上から降ろしていき、最初に触った棒を取り出す。これが一番長い棒となる。この棒をリストの最初に追加する。さらに手を降ろしていき、次に触れた棒をリストの2番目に追加する。全ての棒が無くなるまで、この手順を繰り返す。

これをコンピュータアルゴリズムとして使う場合、並べ替えに必要な時間として、(1)与えられた数列と同じ長さのスパゲティを準備する時間、(2)スパゲティを並べ替える時間、(3)並べたスパゲティを数字に変換する時間が挙げられる。これらの時間は全てスパゲティの本数に比例する。

つまり、棒の数がn倍になれば、並べ替えに必要な時間もn倍となる。これをいわゆるランダウの記号で表すと、O(n)となる。 これは、一般的なソートアルゴリズムの時間計算量がO(n2)O(nlogn)である(ソート#ソートアルゴリズムの一覧)ことを考えると、珍しい特性である。

参考文献

テンプレート:Reflist

外部リンク

テンプレート:ソート