seegongsik
アルゴリズム

わかりやすく 乱択アルゴリズム とは

貪欲では、目の前の最善を選びました。ところが、いっそサイコロを振る解き方もあります。何を選ぶかをランダムに決めるのです。不思議に聞こえますが、このほうが速くて簡単なこともあります。運に任せることが、どう役に立つのでしょうか。

01

サイコロで選ぶ

ある解き方は、次に何をするかをサイコロを振って決めます。考えて選ぶのではなく、ただ運に任せるのです。
ボタンを押すたびに、サイコロが一回転がります。
どの目が出るかは、前もってわかりません。

押して振ってみる
これまでの目

押すとサイコロが転がります。次の目は前もってわかりません。

なぜわざわざ運に任せるのでしょうか。いつも同じやり方で選んでいると、だれかがその癖をねらって、わざと難しい入力を作れてしまいます。
ランダムに選べば、そうしたねらいをかわせます。
本当の使い道は、次の段階で見えてきます。

02

ランダムな基準を使う

速い並べ替えの中には、基準を一つ決めて、それより小さいものは左、大きいものは右に分けるやり方があります。
ところが、いつも最後の値を基準にすると、もう並んでいる入力では分け方が片方にばかり偏り、とても遅くなります。

いつも最後が基準
ランダムな基準

いつも最後が基準 vs ランダムな基準で、分ける回数を比べます。(片方に偏る = 遅い)

基準をランダムに選べば、どんな入力が来ても、片方にばかり偏ることはほとんどなくなります。悪い入力をねらったわなも通用しません。
だから平均すると分け方がまんべんなくなり、並べ替えが速くなります。

03

たくさん投げて見積もる

ランダムは見積もりにも使えます。正方形の中に、円を四つに分けた一切れ、つまり四分円を描き、その中に点をどんどん打ちます。
四分円の中に入った点が全体のどれくらいかを見れば、四分円が占める面積を見積もれます。
点を一つずつ打ってみましょう。

円の中: 0全部: 0割合: -真の値: 0.785
点を打って割合を見て

点を打つほど、割合が真の値に近づきます。(円の中の点 / 全部の点)

点が少ないうちは、見積もりがばらばらです。でも点をたくさん打つほど、割合は真の値にぴたりと寄っていきます。
一、二回の運は信用できなくても、数えきれないほど投げた平均は信用できるからです。
これが、たくさん投げて答えを見積もる方法です。

04

確かさと速さを交換する

ランダムな解き方はただではありません。速くて簡単なかわりに、毎回同じ答えになるとは約束できず、運が悪いとときどき遅くなることもあります。
何を得て何を手放すのか、両方を押して比べてみましょう。

両方を押して比べて

得るものと手放すものを押して比べます。(速さ·簡単さ vs 毎回同じ答えとは限らない)

だからランダムはいつもよいわけではなく、ふさわしい場所があります。
速くて簡単なことが、少しの不確かさより価値があるときに使います。確かさを少し手放して、速さと単純さを買うのです。

05

ひと目でまとめる

ランダムな解き方をひと目でまとめるとこうなります。サイコロで選び、ランダムな基準でわなを避け、たくさん投げて答えを見積もり、確かさと速さを交換する。
要点を順に押して、自分でまとめましょう。

要点を順に押してまとめます

要点の四つを順に押してまとめます。(サイコロ · ランダムな基準 · たくさん投げて見積もる · 交換)

運に任せるというと頼りなく聞こえますが、うまく使えばランダムは速くて心強い道具です。
データが途方もなく多いところほど、たくさん投げて見積もるこの考え方が大きく生きてきます。
次のレッスンでは、点と線でつながった世界、グラフへ進みます。

一言でいうとある解き方は、サイコロを振って何をするかをランダムに選びます。クイックソートでいつも最後の値を基準にすると悪い入力で遅くなりますが、基準をランダムに選べばそのわなを避けて、平均的に速くなります。また、正方形の中に点をどんどん打って四分円の中に入った割合を見れば、面積を見積もれます。たくさん投げるほど、見積もりは正確になります。ランダムな解き方は毎回同じ答えを約束できませんが、そのかわり速くて簡単です。確かさを少し手放して、速さを得るのです。
← アルゴリズム
このページがお役に立ったなら支援する