← メディア一覧

バブルソート_vs_クイックソート:速さの秘密

5分41秒 | アルゴリズム基礎FE

基本情報技術者試験の頻出テーマを解説した動画コンテンツです。

トランスクリプト(字幕テキスト)

いやぁどうも皆さん。今日はですね、コンピューターの世界で行われるいわばアルゴリズムバトルロイヤルをお届けしようと思います。 かたや地味な努力家、そしてもう一方は頭脳派の天才。全然スタイルが違う二つの並べ替え方法が、 速さを巡って激突するんです。さぁ、一体どっちが勝つんでしょうか? でも、そもそも不思議に思いませんか?だって、やってることってただバラバラの数字を順番に並べるだけですよ。 なのに、なんでこんなにたくさんのやり方があるんでしょうね。どれも同じじゃないの?って思いますよね。 実は、そこに、もう点と地ほどの差が隠されてるんです。 というわけで、まずは一人目の挑戦者から見ていきましょうか。 たぶん一番直感的で、誰でも最初に思いつきそうなアプローチ。その名もバブルソートです。 このバブルソートのやり方、本当にシンプルなんですよ。まず、こう隣同士の数字をちまちまと見比べるんです。 で、もし順番が逆だったらその場でくるっと入れ替える。これをリストの端っこまでやったら、また最初に戻って、 何度も何度も何度も繰り返す。いや、本当に気が遠くなるような地味な作業ですよね、これ。 なんでバブルソートっていうか、その理由がまさにこれなんです。 この地味な作業をずっと繰り返していくと、小さい数字、つまり軽いものがまるで泡みたいにリストの上の方へ プクプクプクプクって浮かび上がってくるからなんですね。なんかイメージしやすいですよね。 でもこのシンプルさが、逆に弱点になっちゃうんです。並べるデータが10個くらいなら、まあ可愛いもんですけど、 これが1000個、1万個って増えたらどうなるか。もう比べる回数と入れ替える回数が文字通り爆発的に増えちゃって、 いつまでたっても終わらない。あぁ、もうって思わず溜め息が出ちゃいます。まさにやれやれって感じですね。 そんな絶望的な状況に颯爽と現れるのが、次の挑戦者です。 もっと賢くて、もっとパワフルな解決策。クイックソートの登場です。 そう、彼こそがソートアルゴリズムの王様。 その圧倒的な効率の良さで、色んな場面で大活躍する、まさに天才的な手法なんです。 じゃあ、クイックソートはなんでそんなに速いのか。その強さの秘密はこの分割統治っていう考え方にあるんですよ。 つまり、手に負えないような大きな問題を一気に片付けようとしないで、まず扱いやすい小さな問題に分けちゃうんですね。 具体的にはこんな感じです。まずリストの中から、ピボットっていう基準になる数字をえいやっと一つ選びます。 で、残りの数字全部を、この基準より小さいグループと大きいグループに、 この線を境にしてバサっと一気に真っ二つに分けるんです。 あとは、この小さくなったグループの中で同じことを繰り返していくだけ。なんか気持ちいいですよね。 これ、凄くないですか?たった1回バサっとリストを分けるだけで、比べなきゃいけない組み合わせの数が一瞬で半分以下になっちゃうんですよ。 1個1個ちまちま比べていたバブルソートとはもう効率が全然違います。 さて、ここまで見てきた二つの方法。なぜこんなにも速さに違いが生まれるんでしょうか。 その秘密を直接対決させながらもう少し深掘りしていきましょう。 こうして並べてみると、もう一目瞭然ですよね。アプローチは一つずつに対して一気に。 性格は地味で忍耐強いタイプと頭脳的で効率的なタイプ。 その結果、スピードは遅いと速い。もうキャラクターが全く違うのがよく分かります。 実は、こういうアルゴリズムの速さとか効率の良さには、ちゃんとした専門用語があるんです。それがこの計算量。 まあ、そのアルゴリズムがどれだけ賢く動けるかを示す速さの公式みたいなものですね。 そして、クイックソートの驚異的な速さは、この O(n log n) っていう記号で表されるんです。なんか難しそうに見えますよね。 でもこれ、要するにデータがどれだけ増えても、かかる時間はそんなに爆発的に増えませんよ。 すごく緩やかにしか増えませんよっていう賢さの証明書みたいなもんなんです。 この性質があるからこそ、あのシュバッと一瞬で終わるような切れのある速さが実現できるわけですね。 さて、そろそろまとめです。今日一番大事なポイントは、何か問題を解決する方法っていうのは決して一つじゃないってことなんです。 もし、この二つのアルゴリズムを人に例えるとしたら、こんな感じでしょうか。バブルソートは、一つ一つの仕事をとにかく真面目にコツコツこなす地味な働き者。 それに対してクイックソートは、まず全体を見渡して一番効率のいい道筋を考える賢い戦略家。 どっちが良いとか悪いとかじゃなくて、スタンスと個性が違うんですよね。 というわけで、最後に皆さんにちょっと問いかけてみたいと思います。あなたが普段何か問題にぶつかった時、 その解決の仕方って、一歩一歩着実に進めるバブルソートタイプですか? それとも、まず問題を切り分けて全体像を掴むクイックソートタイプでしょうか。 自分のスタイルを考えてみるのも、ちょっと面白いかもしれませんね。

このコンテンツは Web society で視聴・学習できます。