バケットソート単語

3件
バケットソート
1.1千文字の記事
  • 1
  • 0pt
掲示板へ

バケットソートはソートアルゴリズムの一種。

ここで言うバケットはいわゆるバケツのこと。同じ意味でビンソートと呼んだりする。バリエーションが多すぎるため名称が少々混乱しているが、本来バケットソートと呼ぶべき考え方はかなりアブトラクトな部分である。日本語ナニpediaの記述はちょっと怪しい。度数ソートや分布数え上げソートなどもバケットソート系だが一応別物。

使うためには、配列内の値の種類がある程度限定できて、どのような値が含まれるか事前に分かっていなければならないという条件がつくものの、均計算時間O(n+k) (k≒値の種類)を叩き出せる特殊な高速ソートとして知られる。基本的には安定ソート

原理

  1. 値の種類の数だけ入れ物を用意する
  2. それぞれの値を自分の種類に応じた入れ物に移す
  3. 入れ物は最初から順番通りに並んでいるので、先頭から取り出せばできあがり

トランプカードを並び替える時、スートや数字別にカードを配って最後に束ねるやり方といえば分かりやすいだろう。

入れ物内の順序に関してはまた別に考える必要があり、典的な実装では挿入ソートを使うが、大きさによってクイックソートだったりマージソートだったりするかもしれない。種類だけえればいいならここで終了。

性能検討

移動先を種類によって最初から決め打ちできるので、他の値との前後関係を調べなくてよいというのがミソ。他の要素の存在に左右されないので全に線形時間で分類できる。データ構造的にはハッシュテーブルの動きに近い。

最初に書いた通り、値の種類がそれほど多くない時に価を発揮する。理屈上は整数一般で分類するような形でも使えなくはないものの、例えば32bit=4,294,967,296個のバケツ用意すんのかよ!という話になるので実用にはならないわけである。まあ分類が大雑把すぎてもバケツで割る効果が出ないので、バケ死せず、かつ下位ソートに負担が掛からない程度に割れてくれるのが理想形である。

弱点はバケツの保存スペースが大きいことと、分布が悪いとバケツ内の並び替えで性悪化すること。挿入ソートを併用する基本形だとすれば、すべての値が一つのバケツに集中したらただの挿入ソートになってしまうので、わざわざバケツを用意するメリットゼロである。この辺りはクイックソートと同じく均等な配分になることが望ましく、配列内の値の分布状態が正しく分かっている程有利という、バケットソートならではの特性となっている。

バケツの構造やら何やらでクセのある変種が多いため、詳しいことは個別のアルゴリズムを検討した方が良いだろう。

関連項目

【スポンサーリンク】

  • 1
  • 0pt
記事編集 編集履歴を閲覧

ニコニ広告で宣伝された記事

ボリノーク・サマーン (単) 記事と一緒に動画もおすすめ!
提供: モリノーク・マサーン
もっと見る

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

バケットソート

まだ掲示板に書き込みがありません…以下のようなことを書き込んでもらえると嬉しいでーす!

  • 記事を編集した人の応援(応援されると喜びます)
  • 記事に追加して欲しい動画・商品・記述についての情報提供(具体的だと嬉しいです)
  • バケットソートについての雑談(ダラダラとゆるい感じで)

書き込みを行うには、ニコニコのアカウントが必要です!