アルゴリズムとは?プログラミングをする上でなぜ重要なのか

 2018.07.10  株式会社システムインテグレータ

皆さんは「プログラミングの勉強」と聞いて何が思い浮かぶでしょうか?プログラミングについて多少なりの知識がある方なら「プログラミング言語の構文を理解し、ソースコードを書いてみて習得すること」と答えるのではないでしょうか。

確かに、プログラミングの勉強において言語の構文を理解したり、実際にソースコードを書いてみるというのは欠かせない勉強です。しかし、大切なことはそれだけではありません。もう一つ大切なことは「アルゴリズム」の理解と習得です。今回はそのアルゴリズムについてご紹介します。

アルゴリズムとは?どんな意味?

アルゴリズムという言葉は非エンジニアの方であっても耳にする言葉ではないかと思います。たとえば「Googleの検索アルゴリズム」や「迷惑メールを排除するアルゴリズム」など、様々なシーンで使われています。ではまずアルゴリズムの意味から理解していきましょう。

アルゴリズムの一般的な意味

アルゴリズムの意味をコトバンクで調べてみると、次のように紹介されています。

“問題を解決するための方法や手順のこと。問題解決の手続きを一般化するもので、プログラミングを作成する基礎となる。(ASCII.jpデジタル用語辞典の解説)”

“問題を解くための数学的計算手順。算法ともいう。具体的には、プログラミング言語を使って、問題の解決手順を記述したものを、コンピューターのプログラムと呼ぶ。(知恵蔵の解説)”

この解説からするにアルゴリズムは「何らかの問題を解決するために考えられた手順や計算方法」を指すようです。「プログラミングを作成する基礎となる」点も重要なポイントでしょう。つまりアルゴリズムを習得するということは、プログラミング能力を向上させる上で欠かせないものなのです。

なぜアルゴリズムが必要なのか

プログラミングは一般的にビジネスの課題を解決するために、システムを構築したり新しい機能をリリースするためにあります。しかし課題を解決できるようなものなら、どんなプログラムでもよい、というわけではありません。

同じシステムを構築して新しい機能を実行するにしても、より効率良くユーザーからのリクエストやデータを処理できるプログラムを作ることが大切です。それはシステムパフォーマンス向上のためであり、システムの保守性を高めるためでもあります。

アルゴリズムとはつまり、効率の良いプログラムを作成するために用意された手順や計算方法なのです。

日常生活におけるアルゴリズムの例「大根のいちょう切り」

ここまでの解説で、アルゴリズムは「手順や計算方法のこと」「プログラミングに欠かせない」「効率良い処理のためのもの」といった、要点は掴んでいただけたのではないかと思います。そこで、一度プログラミングから離れて別のことでアルゴリズムを捉えてみます。ご紹介するのは「大根のいちょう切り」におけるアルゴリズムです。

大根のいちょう切りの例

料理を始めて最初に学ぶのが野菜の切り方。その中でも最もメジャーな切り方の一つが、このいちょう切りです。根菜などの野菜を四等分にして、薄くスライスしたごくシンプルな切り方ですが、料理初心者に切ってもらうと、いろいろな切り方をする人が出てきます。

いちょう切り1

ここでは、以下のような2つのパターンでいちょう切りの手順を比較してみました。どちらの方法がより効率的といえるか考えてみてください。

いちょう切り2-1

パターン1
① 大根を30枚にスライスする(29回)
② 1枚ずつ四等分にカットしていく(30枚×2回)
 ⇒ 合計89回カットした

カッコの中の数字は「何回包丁を入れたか?」です。合計すると、89回包丁を入れています。では、次のような手順に変えてみるとどうでしょうか?

パターン2
①' スライスする前に縦4本に切る(3回)
②' カットした4本をまとめてスライスする(29回)
 ⇒合計32回カットした

このように手順を変更してみると、なんと32回まで回数を削減できます(ちょっと無理して回数削減した部分もありますが、見逃してください、、)。この効率の良い方法こそ良い「アルゴリズム」と言えるでしょう。

新規CTA

プログラミングにおけるアルゴリズムでも同じこと

プログラミングにおけるアルゴリズムも同様です。通常なら無数の処理を実行しなければならないプログラムも、少し手順を変更したり新しい手順を加えることで、それまでとは見違えるほど効率良く処理が実行できるようになります。良いプログラムを書き、品質の高いシステムやソフトウェアを開発するためには、アルゴリズムに関する知見が不可欠なわけです。

代表的なアルゴリズムの例「バブルソート」

アルゴリズムにはいくつか代表的なものがあります。ここでご紹介するのは数値をある規則に沿って配列する「ソートアルゴリズム」と呼ばれるものです。無数のプログラムによって形成されるシステムは大量のデータを扱います。その際に、データを昇順(値が小さい順)や降順(値が大きい順)にデータを並べ替えたり、その他の規則に従ってアルゴリズムを配列(ソート)する必要があります。

ソートアルゴリズムの1つ「バブルソート」

たとえば「バブルソート」と呼ばれるアルゴリズムは次のように数値を配列します。

例)(9, 7, 6, 8, 5, 3)を昇順にソート(配列)する

バブルソート

 (9, 7, 6, 8, 5, 3) この並び順でスタート

→(9, 7, 6, 8, 3, 5) 5と3を交換

→(9, 7, 6, 3, 8, 5) 8と3を交換

→(9, 7, 3, 6, 8, 5) 6と3を交換

→(9, 3, 7, 6, 8, 5) 7と3を交換

→(3, 9, 7, 6, 8, 5) 9と3を交換、先頭要素が確定

→(3, 9, 7, 6, 5, 8) 8と5を交換

→(3, 9, 7, 5, 6, 8) 6と5を交換

→(3, 9, 5, 7, 6, 8) 7と5を交換

→(3, 5, 9, 7, 6, 8) 9と5を交換、先頭から2番目の要素が確定

→(3, 5, 9, 6, 7, 8) 7と6を交換

→(3, 5, 6, 9, 7, 8) 9と6を交換、先頭から3番目の要素が確定

→(3, 5, 6, 7, 9, 8) 9と7を交換、先頭から3番目の要素が確定

→(3, 5, 6, 7, 8, 9) 9と8を交換、5番目、6番目の要素が確定 ★昇順ソート完了★

このような手順によって数値を配列していくものをバブルソートと呼びます(並べ替えの過程で数字が右から左へ移動していく様子が、泡(バブル)がフワフワと浮かんでいくように見えることから名づけられたそうです)。他にも様々なアルゴリズムがあるので、それらを学習し、理解し、習得することでプログラミング能力や飛躍的に成長するでしょう。

その他のアルゴリズム

その他にも多くの種類のアルゴリズムが存在します。幅広くアルゴリズム自体を学ぶもよし、問題を見つけて実際にプログラミングでアルゴリズムを実装してみるもよしです。以下にアルゴリズムの一部を掲載します。

  • ソートアルゴリズム
  • 探索アルゴリズム
  • 暗号化アルゴリズム
  • 幾何学系アルゴリズム
  • 遺伝的アルゴリズム

アルゴリズム学習のためのオススメの本

個人のアルゴリズムの習得もさることながら、企業においてはプログラマーの能力の基礎ともいえるのがこのアルゴリズムに関わる能力です。なぜなら、その能力の違いによって、アプリケーションの品質や生産性が大きく変わってしまうからです。そんなアルゴリズムを学習するために、まずはお薦めの書籍からご紹介します。

社内で「アルゴリズム・プログラミングを学ぶためのお薦め書籍」アンケートを取った中から、アルゴリズムに関する書籍を2点ピックアップしました。どちらの書籍もAmazonの評価も高いようです。皆さんの書籍選びのご参考になれば幸いです。

51ElwXwvJ-L 61bXMHbyv3L
タイトル

アルゴリズム図鑑
絵で見てわかる26のアルゴリズム

タイトル なっとく!アルゴリズム
出版社 翔泳社 出版社 翔泳社
出版年 2017年 出版年 2017年

効率の良い学習方法

書籍や参考書を開いて片端からアルゴリズムのソースコードを書く、というのも一つの方法ですが、より効率良く学ぶためには「今自分に何が足りないのか?」を知ることが大切です。

企業におけるアルゴリズム学習

たとえば企業が社員に対してアルゴリズムを学習させたい場合、最初にプログラミングテストを実施することをおすすめします。

プログラミングテストとはプログラムで様々な課題を解決するために、設問に対し実際にソースコードを書くことでそれを評価するというテスト方式です。テストを実施することで、社員に何が足りず何が必要なのかが自然と見えてくるため、闇雲にアルゴリズムを学ぶのではなく計画性を持った学習ができます。過去の受験記録が蓄積され、成長が見られることも長所といえます。以下は、弊社システムインテグレータが提供している、オンラインでプログラミングテストを実施することで社員のスキルを評価できるサービスです。

 プログラミングスキル判定サービス TOPSIC

設問はプログラミングコンテストで世界的に有名なAtcoder社が提供し、人事担当者は特に手間をかけることなくプログラミングテストの実施と採点ができます。アルゴリズムの学習を取り入れて、エンジニアのスキルアップを狙いたい、そんなニーズを持っている企業様へうってつけです。

個人のアルゴリズム学習

個人での学習は上述したAtCoder社が運営する「AtCoder」というサービスがおすすめ。

こちらもプログラミング知識は必要となりますが、様々な問題を世界中の人たちと同時に挑戦できる「コンテスト」がほぼ毎週末開かれています。さらにコンテストで出題された問題や過去問への解説も充実しています。

 競技プログラミングコンテストを開催する国内最大のサイト AtCoder

問題を解きながら成長していきたいという方は、ぜひチャレンジしてみてください!

新規CTA

新規CTA
新規CTA

RELATED POST関連記事


RECENT POST「プログラミング」の最新記事


この記事が気に入ったらいいねしよう!