スマートフォンで友だちを探す、ゲームで次の敵の動きを予測する、YouTubeで見たい動画をすすめてくれる…こんなことがなぜできるのか不思議に思ったことありませんか?それらはすべて「アルゴリズム」という仕組みのおかげなんです。アルゴリズムって言葉は難しそうに聞こえるかもしれませんが、実は毎日の生活に溶け込んでいるもの。この記事を読めば「あ、そっか!」と納得できますよ。
- アルゴリズムは「問題を解くための手順」。料理のレシピみたいに、やり方が決まっているということ
- コンピュータは勝手には動かず、プログラマーが書いたアルゴリズムにしたがって動く
- 良いアルゴリズムを使うと、処理が速くて正確になるから、アルゴリズムの工夫が大事
もうちょっと詳しく
アルゴリズムはコンピュータサイエンス(つまり、コンピュータと情報の学問)の中で一番大切な考え方です。なぜなら、どんなにパワフルなコンピュータでも、アルゴリズムが悪いと遅いし、効率的なアルゴリズムを使うと同じパソコンでも速く正確に動くから。世界中のプログラマーは「最高のアルゴリズムを見つける」という仕事に時間をかけているんです。
アルゴリズムは「何をするか」じゃなくて「どうやってするか」という工夫のこと
⚠️ よくある勘違い
→ アルゴリズムは数学じゃなくて「やり方の工夫」。数学が得意じゃなくても理解できます
→ 友だちを探すときの手順、ゲームのルール、料理の作り方…全部アルゴリズム的な考え方です
[toc]
アルゴリズムって何に使われてるの?
あなたがスマートフォンを使っているとき、実は裏側でいっぱいのアルゴリズムが動いています。具体例を挙げると、LINEでメッセージを送るとき、スマートフォンは「このメッセージをどうやって相手に一番速く届けるか」というアルゴリズムを実行しているんです。
YouTubeを見ているときも同じです。「このユーザーは何が好きそうか」「どんな順番で動画をすすめたら見てくれそうか」という判断は、全部アルゴリズムでやっています。AI(人工知能)が判断してるって聞くかもしれませんが、AIも結局はアルゴリズムで動いているんだ。つまり、AIのイメージは「すごい賢いロボット」かもしれませんが、実は「賢いアルゴリズムで組み立てられたもの」という方が正しいんです。
ゲームでも使われています。例えば、RPGで敵が「プレイヤーに向かって移動する」という動きをしているのは、敵キャラの位置とプレイヤーの位置から「最短ルートはどこか」を計算するアルゴリズムが使われているんです。格闘ゲームなら「次にどんな技を出したら勝つ確率が高いか」を判断するアルゴリズムが敵を操作しています。
つまり、デジタル技術を使うあらゆる場面でアルゴリズムが活躍しているんです。検索エンジンで調べ物をするときも、銀行でお金を管理するときも、自動運転の車も、天気予報だって、みーんなアルゴリズムで動いています。「アルゴリズムなんて遠い話だ」と思うかもしれませんが、実は毎日あなたの近くにあるんだよ。
よくあるアルゴリズムの種類を知ろう
アルゴリズムにはいろいろな種類があります。どんな問題を解くかによって、使うアルゴリズムが変わるんです。代表的なものをいくつか紹介しますね。
探索アルゴリズム
「探す」という問題を解くためのアルゴリズムです。100人の中から特定の人を探すときを考えてください。一番単純な方法は、1番目の人から順に「あなたですか?」と聞いて回る。これを線形探索(せんけいたんさく)といいます。つまり、一直線に確認していく方法ですね。
でも、このやり方は遅いです。100人なら100回聞く可能性があります。ここで賢いアルゴリズムが登場します。もし100人が身長順に並んでいたら、どうしますか?真ん中の人に「探している人は右ですか左ですか」と聞いて、その半分だけを探す。さらにその中の真ん中に聞いて、また半分に絞る…このやり方を二分探索(にぶんたんさく)といいます。100人から探すなら、7回の質問で見つかります。これが「アルゴリズムの工夫」なんです。
ソート(並べ替え)アルゴリズム
野菜を価格の安い順に並べたい、テストの点数を高い順に表示したい、こんなときに使うのがソートアルゴリズムです。「バブルソート」という初心者向けの方法は、隣同士を比べて入れ替える。ちょうど、息の泡が水面に向かって上がるように、大きい数字が右へ移動していく…だからバブル(泡)という名前なんです。
でも、このやり方も遅い。そこで「クイックソート」という方法があります。これは「基準を決めて、基準より小さいグループと大きいグループに分ける」という工夫を使います。分けたら、また同じことをそれぞれのグループで繰り返す。こうすると、とても速く並べ替えられるんです。
その他の重要なアルゴリズム
最短ルートを見つける「ダイクストラ法」(カーナビで使われます)、効率的に物を詰める「ナップサック問題」(荷物の梱包で使われます)、グラフ構造を調べる「深さ優先探索」や「幅優先探索」など、いろいろな種類があります。でも大事なのは「種類を全部覚えること」ではなく、「アルゴリズムは工夫の集まりだ」という考え方なんです。
なぜアルゴリズムは大事なのか
想像してください。銀行には何百万人ものお客さんがいます。あなたがお金を引き出すとき「あなたの口座はどこにある?」と1番目の人から順に探してたら、1時間かかっちゃいます。でも、銀行はコンピュータで一瞬で見つけます。それは効率的なアルゴリズムを使っているからです。
また、アルゴリズムが悪いと、間違った結果が出ることもあります。例えば、医療の現場で患者さんを診断するとき、ちょっと間違ったアルゴリズムだと命に関わります。だから、医者とプログラマーが一緒に「最も正確なアルゴリズムは何か」と考えるんです。
さらに、スマートフォンやパソコンのバッテリーが長持ちするのも、アルゴリズムの工夫のおかげです。電力をムダにしない効率的なアルゴリズムを使うことで、バッテリーが減りにくくなるんです。つまり、アルゴリズムは「目に見えない部分で、あなたの生活をずっと支えている」んですね。
大規模なデータを扱う企業(Google、Amazon、Facebookなど)は、アルゴリズムの研究に莫大なお金をかけています。なぜなら、アルゴリズムのちょっとした工夫が、会社全体の利益や処理速度に大きく影響するからです。0.1秒速くなると、ユーザーが増えたり、お金が節約できたりするんだ。だからこそ、世界中の優秀なエンジニアが「最高のアルゴリズムを見つける」ために日々働いているんです。
アルゴリズムを学ぶとどうなる?
もしあなたがアルゴリズムを理解すると、コンピュータがどうやって動いているのかが見えるようになります。ゲームをプレイするときも「あ、この敵の動きはこんなアルゴリズムなんだ」と思えるようになる。YouTubeの動画がなぜあなたの好みにぴったり合っているのか、その理由がわかるようになります。
また、プログラミングの勉強をするときも、アルゴリズムを知ってると一気に上達します。なぜなら「何をしたいか」に対して「最も効率的なやり方」を自分で設計できるようになるからです。これはプログラマーとしての大きな武器になります。
さらに、情報学やコンピュータサイエンスの大学進学を考えている人なら、絶対に理解しておくべき知識です。大学の専門科目は「アルゴリズムをどう工夫するか」という研究ばかり。早いうちに理解しておくと、進学後の勉強がずっと楽になります。
そして意外かもしれませんが、アルゴリズムの考え方は、プログラミング以外でも役に立ちます。例えば、勉強をするときに「何を覚えるか」の優先順位をつける、テスト前に「どんな順で教科を復習するか」計画を立てる…これも実は「効率的なアルゴリズムを設計する」のと同じ考え方なんです。つまり、アルゴリズムを学ぶことは「どんなことでも効率的に進める力」を身につけることでもあるんだよ。
