LoginSignup
12
11

More than 5 years have passed since last update.

【変なソートアルゴリズム】ビーズを落としてソートをするじゃの巻

Posted at

p098_02j.jpg
↑ビーズの写真

ビードソートって知ってますか

Bead sort(ビードソート)はbeads(ビーズ細工のビーズ)というようにビーズを使うソートアルゴリズムです。
ソートアルゴリズムの中でもいろんな意味で色が強めです。

ビードソートのアルゴリズム

[2, 4, 1, 3, 3]の数列をソートしたい場合を考えます。

まず、数列の数に応じてビーズを以下のように通していきます。

380px-BeadSort-Figure1.svg.png

そして、ビーズを重力にまかして落とす。

380px-BeadSort-Figure2.svg.png

するとなんということでしょう。
勝手にソートされてますね!すごい!

見たほうがわかりやすい方はこちら
IMAGE ALT TEXT HERE
Extended Bead-Sort - YouTube(クリックすると見れます)

詳しく知りたい方はこちら
Bead sort - Wikipediaより

計算量

Wikipediaをご覧ください。
Bead sort - Wikipedia #Complexity

出展は不明ですが、確かハードウェア上にソートアルゴリズム実装するときに使われるものらしいです(?)

Pythonでの実装

import numpy as np

def beadsort(series, max_num=10):
    len_series = len(series)
    array = np.array([[True]*num + [False]*(max_num-num) for num in series])
    array = np.array([[True]*sum(array[:,idx]) + [False]*(len_series-sum(array[:,idx])) for idx in range(max_num)])
    return [sum(array[:,idx]) for idx in range(len_series)]

a = [2,4,1,3,3]
print(beadsort(a)) # [4, 3, 3, 2, 1]
12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11