白黒つけようぜ!くまねこ(@kumanecoblog)です。
今日もプログラミング捗っていますか?
アルゴリズムって聞いたことあるけれど、なんのことかわからない。
興味があって調べてみたけれど、難しい言葉が並んでてよくわからなった
単語は知ってるけれど意味はなんとなくしかわからない。調べたけれど、専門用語ばかりで意味が分からなかった。
実は僕もこのようなことを思ったり経験をしました。
もっとわかりやすく説明してくれたらいいのに!と思っていました。
なので、今回はアルゴリズムについてわかりやすく簡単にご紹介します!
日常生活に置き換えた例えや画像も使ってどこよりもわかりやすくご紹介します。
アルゴリズムが理解できると、あなたの生活がさらに効率的に送れて、時間の余裕が生まれるかもしれません。
生まれた時間でなにをしたいですか?
実はあなたも普段から無意識にアルゴリズムを使ってるかも・・・!
と言う方の役に立つ記事です。
1. アルゴリズムとは
アルゴリズムと聞くと、ものすごくむずかしいもので頭がグルグルグルっと回ってしまい、なんのことやらわからない感じがありますが、イメージできてしまえばこっちのものです!
1.1 簡単に言うと
アルゴリズムとは、簡単に一言で言うと「ご飯を作るときのレシピ」のことです。
え!なんかイメージと違う・・・と思ったあなた。正直僕も思いました。
アルゴリズムについて、詳しく説明していきます。
1.2 わかりやすく解説
1.2.1 アルゴリズム=レシピ
イメージしてください。カレーを作る時のことを。
作ったことのない人は今から作ってみるか、インド人が踊っているところを想像してみてください。
カレーを作る時の手順は、
野菜を切る
↓
お肉を炒める
↓
野菜を入れる
↓
煮る
↓
野菜が柔らかくなったらルーを入れる
↓
完成
こんな感じだと思います。これがカレーのレシピですよね。
カレーのレシピには、カレーを作るため
「作業する手順を、実行する順に書いてある」
という全体像とその流れが書かれています。
これがアルゴリズムです。
1.2.2 改めてアルゴリズムの定義を見てみよう
アルゴリズム(英:algorithm)とは
ブリタニカ国際大百科事典
有限回の手続きによって,問題を解決するための一定の手順のこと。
カレー作りに置き換えてみましょう。
問題 → カレーが食べたい
解決 → カレーを作る
一定の手順 → レシピ
有限回の手続き → 終わりがある作業
つまり上の文を言い換えると、
終わりがある作業で、カレーが食べたい時にカレーを作るためのレシピのこと。
となります。カレー作りに置き換えたらとてもわかりやすくありませんか?
つまりアルゴリズムとは、全体像とその流れのことで、作業の手順を実行する順番に書いてあるレシピのようなもののことです。
1.2.3 実は日常生活でも・・・?
あれをやって、これをやって、最後にそれをやると完了!
と、普段から家事や業務と頭の中で作業を組み立てていることも多いですよね?
これもアルゴリズムの1つです。
シャワーを浴びたり、歯を磨いたり、ご飯を作ったり・・・
色んな所で無意識にアルゴリズムを組み立てて実行していたのです。
1.2.4 はじめに想像していたアルゴリズムは間違い?
- Qはじめに想像していたアルゴリズムは間違い?
- A
間違いではありません。
想像していたアルゴリズムは、レベルMAXみたいなやつだと思ってもらえれば大丈夫です。想像していたアルゴリズムはきっと、「解決したい問題が複雑になったもの」や「手順が専門的になったもの」です。なので、間違いではありません。
基礎的なものはあくまで上で説明したものです。
2. プログラミングとの関係
アルゴリズムとプログラミングの関係は大変深い関係です。
ですが、恐れることはありません。
深い関係ですが、関係性的には簡単です。
アルゴリズムをプログラミング言語に翻訳したものが、「プログラム」となり、
その「プログラム」が、コンピューターに実行させることができます。
つまり、アルゴリズムを日本語英語のように、コンピューターがわかる言語に翻訳したものが「プログラム」ということです。
それを作るのが、プログラミングと言うことです。
2.1 アルゴリズムの理解がプログラミング力をアップさせる
アルゴリズムについて興味がある方の中には、
プログラミングをやっていたり、もしくはこれからやってみたいなと思っている方が多いと思います。
ではなぜ、アルゴリズムとプログラミングが深い関係なのか解説します。
結論から言うと
アルゴリズムを理解することで、必ずプログラミング力がアップします。
そしてこれからプログラミングを始めようと思っている方には学習効率が飛躍的にアップします。
2.1.1 理由その1 無駄なコードを書かなくなる
例えば、カレーを作るときの選択肢として
「レトルト・手作り・本格手作り」などの選択肢があります。
今日はサッと食べたいからレトルトにしよう!
と決めた時に、野菜を切り出したら無駄な作業ですよね。
アルゴリズムを理解することで、こういった無駄な作業を省くことができるようになります。
つまり、無駄なコードを書かなくなるということに繋がります。
2.1.2 理由その2 処理スピードをあげることができる
適材適所と言う言葉がありますが、先ほどの例のように
レトルトカレーを食べるという時に、野菜を切っていたら作業スピードは落ちます。
このように、アルゴリズムを理解していることで
「この問題解決にはこの作業手順が最適だ!」と判断ができるようになります。
これが、プログラムの処理スピードに関係してきます。
アルゴリズムを理解しなくてもプログラミングはできます。
しかし、より良いものを作ろうとする時にアルゴリズムを理解しているかそうでないかで大きく結果が変わってきます。
もしこれからプログラミングを学習しようと思っている方には、始めのうちはかなり難易度が高いことだと思いますが、学習から1ヶ月後には飛躍的に学習効率がアップし始めますのでぜ挑戦してみてください。
3. アルゴリズムの3つの基本構造
アルゴリズムには「順次進行」「条件分岐」「繰り返し」3つの基本構造があります。
例えば、カレーの作り方のようなレシピは、順次進行と言います。
その3つの基本構造をご紹介します。
しかし、ただ紹介するのは飽きてしまうし、イメージしづらいものもあるかもしれません。
なので、日常生活のことと組み合わせてご紹介します。
僕たちの日常生活にはたくさんのアルゴリズムがあふれています!
3.1 順次進行
順次進行とは、上から順番にやることを書いていく構造のことです。
「今やっていることが終わったら次にやることに進む」というイメージです。
文字通り、「順番(順次)に進んでいく(進行)」です。
日常生活で例えると
- レシピ
- スケジュール
勉強や家事、業務でスケジュールを組む時に、1日を効率よく過ごすために
まずあれをやって、これをやってから、それから・・・
と考えますよね。そしてこれを決めて順番通りにスケジュールを行っていく。
ご飯を作るときのレシピも同じですね。
これが順次進行です。
3.2 条件分岐
条件分岐とは、選択肢が含まれている構造のことです。「選択構造」とも言います。
「もし○○なら●●をする、△△なら▲▲をする」というようなものです。
日常生活で例えると
- テストの合否
- 歩いて帰るか、バスに乗るか
テストの合否は、「もし60点以上なら合格、それ未満なら不合格」といったような、学生の時にならう「if」と同じように使えるものです。
「もし雨が降っていたら、バスで帰ろう」と思う時も無意識に条件分岐してますよね。
3.3 繰り返し
繰り返しとは、文字通り同じことを繰り返す構造のことです。「反復構造」とも言います。
決まった回数や条件が終わるまで繰り返すのが特徴です。
日常生活で例えると
- 歯磨きや髪を洗っているとき
- 筋トレ
歯磨きを細かく分解すると「歯を一本磨く」→「全部磨き終わりましたか?」→「まだです」→「次の歯を磨く」→・・・を無意識に繰り返してますよね。
筋トレも同じように「10回やるぞ!」という時は、
1(まだ10じゃない)・・・2(まだ10じゃない)・・・3(まだ10じゃない)・・・
10回になるまで同じ動作を繰り返します。
これが繰り返しです。
何気ない日常生活も振り返ってみると、アルゴリズムでたくさんですね。
なにか動作する時に、「あ、これは順次進行だ」なんて思うと普段の生活も違って見えるかもしれません。
3.4 基本構造じゃないけど有名なアルゴリズム
ダイクストラ法
有名なのでもしかすると名前だけはどこかで聞いたことがある人もいるかもしれません。
僕は知りませんでした。
まず、これは何に使われているかと言うと
- カーナビ
- 乗換案内
に使われています。
このアルゴリズムは、A地点からB地点までの「最短距離を求めるアルゴリズム」のことです。
有名なので、ぜひ名前と何に使われているのだけでも覚えてください。
まとめ
今回は、アルゴリズムについてご紹介しました。
カレーのレシピから始まったアルゴリズムの解説でしたが、
アルゴリズムはこんなにも日常生活に溢れていて「決してよくわからないむずかしいこと」ではないんだと感じてもらえたら、嬉しいです。
プログラマーやIT関係の人のみではなく、どんな人でも
アルゴリズムを理解することで、日常生活をより効率的にできるものです。
実は他にも、アルゴリズムを可視化させて分かりやすくしたフローチャートというものもあります。
フローチャートが書けるようになると、アルゴリズムを分かりやすくだけでなく、さらに効率的に作れるようになります。
この記事が少しでも役立ててもらえたらうれしいです。
今回も最後まで読んでいただき、本当にありがとうございました!
コメント