- 更新日: 2020年12月26日
- 公開日: 2020年12月23日
プログラミングに必須のアルゴリズム入門!勉強法についても解説
近年、アルゴリズムという言葉がよく使われるようになりました。
簡単にいうと"処理手順"や"計算方法"のことですが、プログラミングで使う場合はもう少し深く理解する必要があります。
この記事ではアルゴリズムを理解するポイントについて、具体例を挙げて解説します。
フローチャートの書き方やアルゴリズムの勉強方法についても解説しますので、ぜひ最後まで読んでみてください!
アルゴリズムとは
アルゴリズムは問題を解決するための処理手順のことです。
たとえばルーティンワークや料理のレシピなど、いつも同じ結果を出せる手順はアルゴリズムといえます。
私たちはプログラミングに限らず、日常生活のなかで自然にアルゴリズムを使っているのです。
最適なアルゴリズムは目的によって違う
ある問題を解決するアルゴリズムは、複数ある場合がほとんどです。
そのなかから目的に応じて、より効率よく処理できるアルゴリズムを選ぶ必要があります。
ここではお札の数え方を例に挙げて解説してみましょう。
お札の数え方には1枚ずつ縦にめくる"縦読み"と、扇状に広げ4枚ずつ数える"横読み"の2通りがあります。
お札を数えるアルゴリズムには、縦読みと横読みの2種類があるということです。
お札50枚を数える場合、縦読みでは1枚ずつ50回めくって数えます。
それにくらべ横読みの場合は4枚を12回、2枚を1回数えるため合計13回数えれば済みます。お札を速く数えられるアルゴリズムが横読みなのはいうまでもありません。
しかし1枚ずつお札をめくる縦読みには、違う種類のお札がまぎれていると見つけやすいメリットがあります。
縦読みと横読みのどちらが最適なのかは、解決したい問題によって違うのです。
金融機関では速く正確に金額を知るために、お札を数えるときは縦読みと横読みの両方を続けておこなっています。
アルゴリズムの制御構造
アルゴリズムには基本的な3つの制御構造があり、どんなに難しいアルゴリズムでもこの構造を使って記述できます。
[アルゴリズムの制御構造]
- 順次・・・ひとつの処理が終わったら次の処理に進む
- 分岐(選択)・・・条件によって実行する内容を変える
- 反復・・・ある条件が成立するまで繰り返し処理をおこない、終わったら次の処理へ進む
Eテレの子ども向け番組『ピタゴラスイッチ』に出てくる『アルゴリズムたいそう』の歌詞にも、この3つの制御構造が隠れています。興味があれば調べてみてくださいね。
アルゴリズムの性質
処理の手順を単純に並べただけでは、まだアルゴリズムとはいえません。
ある処理をアルゴリズムと呼ぶためには、以下の条件を満たす必要があります。
[アルゴリズムの性質]
- 正当性・・・導き出した結果(出力)は正しい
- 決定性・・・同じ入力を与えたとき同じ結果になる
- 有限性・・・処理の回数には限りがある
- 停止性・・・最終的には正しく停止する
よく知られているのは、処理が永遠に繰り返される無限ループです。無限ループが起こる処理は有限性と停止性が満たされておらず、アルゴリズムとはいえません。
フローチャート
フローチャート(フロー図)とは、アルゴリズムを記述した図のことです。
図にすることでアルゴリズムの全体像を直感的に理解できるほか、プログラムの設計や説明、処理内容の洗い出しにも役立ちます。
いきなりプログラムを組む前に、フローチャートを書いてからはじめるのがおすすめです。
フローチャートの書き方
フローチャートは、処理の手順にしたがいフローチャート記号を配置し、記号どうしを矢印でつないで書いていきます。
[フローチャートに使う記号(フローチャート記号)]
記号名 | 説明 |
---|---|
端子 | 処理の始まりと終わり。置く場所によって開始(start)/終了(end)とも呼ばれる。 |
処理 | 処理をあらわす記号。記号のなかに処理の内容を書く。 |
条件分岐 | 分岐をあらわす記号。記号のなかに分岐の条件を書く。 |
定義済み処理 | 関数など、すでに定義してある処理を呼び出す記号 |
ループの開始 | 反復(繰り返し処理)を開始する記号 |
ループの終了 | 反復(繰り返し処理)を終了する記号 |
まずは手書きで十分ですが、パソコンで書くときはツールを使うと便利です。あらかじめフローチャート記号が登録されており、記号を並べて矢印でつなぐだけで図ができます。
代表的なツールにdiagrams.netやGoogleスライドがあり、無料で使えます。diagrams.netは英語版のみですが、図の記述には日本語も使えるため安心です。
FizzBuzzのフローチャートを書いてみよう
エンジニア転職で頻出のFizzBuzz問題を、フローチャートに書いてみましょう。
FizzBuzz問題の詳細についてはよりくわしく解説された記事がありますので、参考になさってください。
参考記事:【エンジニア転職対策】FizzBuzz問題を解いてみよう
まず予備知識として、アルゴリズムの基本構造3つ(順次、分岐、反復)をフローチャートで表してみます。
この3つの構造ごと書き方を覚えておけば、頭のなかにあるしくみをフローチャートに書きあらわすのがグッと楽になります。
それでは、FizzBuzz問題のフローチャートを書いてみましょう。
1〜30までを変数iに代入し、iが3の倍数なら"Fizz" 、5の倍数なら"Buzz"、両方の倍数なら"FizzBuzz"と出力されるプログラムは、以下のようなフローチャートで表せます。
3つの制御構造を組み合わせて図にすれば、パッと見ただけではわかりにくいアルゴリズムが直感的に理解できます。
アルゴリズムを勉強する方法
プログラムが複雑になると、1からアルゴリズムを考えていたのでは効率化に限界があります。
プログラムに最適なアルゴリズムを選択するためには、汎用的に使われているアルゴリズムについての学習も必要です。
アルゴリズムへの理解をさらに深められる、アプリと本について解説します。
[アルゴリズム図鑑]
(出典:Apple)
『アルゴリズム図鑑』は、スマホでアルゴリズムを学べるアプリです。
ソートや探索など各種アルゴリズムとデータ構造について、解説つきのスライドアニメーションでわかりやすく学習できます。
スライドには初期値をさまざまな値に変えて動かせる"実験モード"もあり、ゲーム感覚でさらに理解を深めることが可能です。
すべての内容を見るにはアプリ内課金(360円)が必要ですが、初心者にとっては値段以上の価値があるアプリといえます。
著者は技術情報共有サービスQiitaで、3年にわたりアルゴリズムに関する記事を多数投稿している技術者です。
アルゴリズムの初心者向け技術書が少ないなか、この本は親しみやすいイラスト入りで、初歩からわかりやすく書かれています。
また既存のアルゴリズムを紹介するにとどまらず、自分でアルゴリズムを設計・利用する方法が丁寧に解説されている良書です。
[基本情報技術者試験のアルゴリズム問題がちゃんと解ける本 第2版]
基本情報技術者試験の午後試験ではアルゴリズム問題の解答が必須なうえ、配点も100点満点中25点と決して低くありません。
アルゴリズム問題はフローチャートの代わりに、この試験特有の擬似言語とよばれる図を使い出題されます。
しかし一般的な参考書では擬似言語の説明に数ページが割かれているのみで、あとは過去問で補う必要があります。
擬似言語が読めず、試験勉強に挫折してしまう方も少なくありません。
そんな方のためにこの本では、全6章のうち半分以上の4章を擬似言語の理解と練習に割き、丁寧に解説されています。
出版年は2016年と少し古めですが、人気のある参考書です。
\Webサイト担当者としてのスキルが身に付く/
まとめ
アルゴリズムの入門的な知識と、さらに理解を深めるための本やアプリについて解説しました。
どのようなプログラミング言語を使う場合も、アルゴリズムは共通の知識です。
またアルゴリズムについてなんとなく理解しているプログラマーと、アルゴリズムに精通しているプログラマーとでは、作るプログラムの質に大きな違いが出ます。
この機会に、ぜひアルゴリズムの知識を身につけてみましょう。
CodeCampなら、現役エンジニアから実際に使うアルゴリズムを学べます!
オンラインの無料体験レッスンがありますので、お気軽にお問い合わせください。
- この記事を書いた人
- 鳥飼千愛