最新動向

プログラミングで重要なアルゴリズムとは?

  • 2018.07.10
  • 株式会社システムインテグレータ
プログラミングで重要なアルゴリズムとは?

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

確かに、プログラミングの勉強において言語の構文を理解したり、実際にソースコードを書いてみるというのは欠かせない勉強です。しかし、大切なことはそれだけではありません。

もう一つ大切なことは「アルゴリズムの理解と習得」です。今回は、この「アルゴリズム」についてご紹介します。

アルゴリズムとは?

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

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

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

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

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

アルゴリズムについてより理解するためには「なぜアルゴリズムが必要なのか」を知ることから始めましょう。

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

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

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

アルゴリズムを野菜の飾り切りに例えてみる

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

おせち料理や煮物など、日本料理に欠かせないのが野菜の飾り切りです。桜の花びらのようにして他の野菜やお肉と一緒に煮込んだり、星形にしてチラシ寿司の上に乗せたり、目で見て楽しく、食べても美味しいという特長があります。

たとえば1本のにんじんを30枚の星形に切りたい場合、皆さんならどうしますか?おそらく次のような手順でにんじんを切ることでしょう。

①にんじんの天地を落とす(2回)

②にんじんを30枚の輪切りにする(29回)

③1枚ずつ星形にしていく(10回×30回)

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

①にんじんの天地を落とす(2回)

②輪切りにする前に星形にする(10回)

③にんじんを30枚の輪切りにする(29回)

このように手順を変更してみると、331回も包丁を入れなければならなかったものがなんと41回までその工数を削減できます。この効率の良い方法こそ「アルゴリズム」と言えるでしょう。(輪切りにする前のにんじんをきれいな星形にできるかどうかは置いておきます。。)

プログラミングにおけるアルゴリズムも同様です。通常なら無数の処理を実行しなければならないプログラムも、少し手順を変更したり新しい手順を加えることで、それまでとは見違えるほど効率良く処理が実行できるようになります。

代表的なアルゴリズム

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

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

例)(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番目の要素が確定

このような手順によって数値を配列していくものをバブルソートと呼びます。他にも様々なアルゴリズムがあるので、それらを学習し、理解し、習得することでプログラミング能力や飛躍的に成長するでしょう。

アルゴリズムを学ぶためには?

個人のアルゴリズムの習得もさることながら、企業においてはプログラマーの能力の基礎ともいえるのがこのアルゴリズムに関する能力です。これによってアプリケーションの品質や生産性が大きく変わってしまうからです。

参考書を開いて片端からアルゴリズムのソースコードを書く、というのも一つの方法ですが、より効率良く学ぶためには「今自分に何が足りないのか?」を知ることが大切です。たとえば企業が社員に対してアルゴリズムを学習させたい場合、最初にプログラミングテストを実施することをおすすめします。

プログラミングテストとはプログラムで様々な課題を解決するために、設問に対し実際にソースコードを書くことでそれを評価するというテスト方式です。テストを実施することで、社員に何が足りず何が必要なのかが自然と見えてくるため、闇雲にアルゴリズムを学ぶのではなく計画性を持った学習ができます。

当社システムインテグレータが提供するプログラミングスキル判定サービス「TOPSIC(トップシック)」は、オンラインでプログラミングテストを実施することで社員のスキルを評価できるサービスです。

設問はAtcoder社が作成し、人事担当者は特に手間をかけることなくプログラミングテストの実施と採点ができます。アルゴリズムを学ばせてスキルアップを狙いたい、そんなニーズを持っている企業はTOPSICの利用ぜひご検討ください。

TOPSIC ご説明資料

TOPSIC ご説明資料