「アルゴリズムって何?」と聞かれて、スラスラと答えられない人も多いのではないでしょうか。本記事では、アルゴリズムとは何かについて解説するとともに、アルゴリズムの種類や具体例、オススメ本などもご紹介します。
さらに、プログラミングを学習する上でのアルゴリズムの重要性に触れることで、アルゴリズムの大切さをより深く学び取っていただける記事になっております。純粋にアルゴリズムについて学びたい方はもちろん、プログラミングを学び始める方も是非お読みください。
アルゴリズムとは
アルゴリズムという言葉は非エンジニアの方であっても耳にする言葉ではないかと思います。たとえば「Googleの検索アルゴリズム」や「迷惑メールを排除するアルゴリズム」など、様々なシーンで使われています。ではまずアルゴリズムの意味から理解していきましょう。
アルゴリズムの一般的な意味
アルゴリズムの意味をコトバンクで調べてみると、次のように紹介されています。
“問題を解決するための方法や手順のこと。問題解決の手続きを一般化するもので、プログラミングを作成する基礎となる。(ASCII.jpデジタル用語辞典の解説)”
“問題を解くための数学的計算手順。算法ともいう。具体的には、プログラミング言語を使って、問題の解決手順を記述したものを、コンピューターのプログラムと呼ぶ。(知恵蔵の解説)”
この解説も踏まえ、アルゴリズムとは、何らかの問題を解決するために考えられた手順や計算方法のことです。プログラミングを作成する基礎となる点も重要なポイントでしょう。
プログラミングにおける重要性
プログラミングは一般的にビジネスの課題を解決するために、システムを構築したり新しい機能をリリースするためにあります。しかし、課題を解決できるようなものなら、どんなプログラムでもよい、というわけではありません。
同じシステムを構築して新しい機能を実行するにしても、より効率良くユーザーからのリクエストやデータを処理できるプログラムを作ることが大切です。それはシステムパフォーマンス向上のためであり、システムの保守性を高めるためでもあります。
プログラミングの世界におけるアルゴリズムは、効率の良いプログラムを作成するために不可欠な手順や計算方法であり、アルゴリズムを習得するということは、プログラミング能力を向上させる上で欠かせないものなのです。
日常生活での例「大根のいちょう切り」
ここまでの解説で、アルゴリズムは「手順や計算方法のこと」「プログラミングに欠かせない」「効率良い処理のためのもの」といった、要点は掴んでいただけたのではないかと思います。そこで、一度プログラミングから離れて別のことでアルゴリズムを捉えてみます。ご紹介するのは「大根のいちょう切り」におけるアルゴリズムです。
大根のいちょう切りの例
料理を始めて最初に学ぶのが野菜の切り方。その中でも最もメジャーな切り方の一つが、このいちょう切りです。根菜などの野菜を四等分にして、薄くスライスしたごくシンプルな切り方ですが、料理初心者に切ってもらうと、いろいろな切り方をする人が出てきます。
ここでは、以下のような2つのパターンでいちょう切りの手順を比較してみました。どちらの方法がより効率的といえるか考えてみてください。
パターン1
① 大根を30枚にスライスする(29回)
② 1枚ずつ四等分にカットしていく(30枚×2回)
⇒ 合計89回カットした
カッコの中の数字は「何回包丁を入れたか?」です。合計すると、89回包丁を入れています。では、次のような手順に変えてみるとどうでしょうか?
パターン2
①' スライスする前に縦4本に切る(3回)
②' カットした4本をまとめてスライスする(29回)
⇒合計32回カットした
このように手順を変更してみると、なんと32回まで回数を削減できます(ちょっと無理して回数削減した部分もありますが、見逃してください!)。この効率の良い方法こそ良い「アルゴリズム」と言えるでしょう。
プログラミングにおけるアルゴリズムでも同じこと
プログラミングにおけるアルゴリズムも同様です。通常なら無数の処理を実行しなければならないプログラムも、少し手順を変更したり新しい手順を加えることで、それまでとは見違えるほど効率良く処理が実行できるようになります。良いプログラムを書き、品質の高いシステムやソフトウェアを開発するためには、アルゴリズムに関する知見が不可欠なわけです。
代表的なアルゴリズム例「バブルソート」
アルゴリズムにはいくつか代表的なものがあります。ここでご紹介するのは数値をある規則に沿って配列する「ソートアルゴリズム」と呼ばれるものです。無数のプログラムによって形成されるシステムは大量のデータを扱います。その際に、データを昇順(値が小さい順)や降順(値が大きい順)にデータを並べ替えたり、その他の規則に従ってアルゴリズムを配列(ソート)する必要があります。
ソートアルゴリズムの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の評価も高いようです。皆さんの書籍選びのご参考になれば幸いです。
![]() |
![]() |
タイトル |
アルゴリズム図鑑 |
タイトル | なっとく!アルゴリズム |
出版社 | 翔泳社 | 出版社 | 翔泳社 |
出版年 | 2017年 | 出版年 | 2017年 |
プログラミングをしながら学習する方法
書籍や参考書を開いて片端からアルゴリズムを学ぶ、というのも一つの方法ですが、より効率良く学ぶためには「今自分に何が足りないのか?」を知ることが大切です。
企業におけるアルゴリズム学習
たとえば企業が社員に対してアルゴリズムを学習させたい場合、プログラミングサービスの活用をおすすめします。
プログラミングテストとはプログラムで様々な課題を解決するために、設問に対し実際にソースコードを書くことでそれを評価するというテスト方式です。テストを実施することで、社員に何が足りず何が必要なのかが自然と見えてくるため、闇雲にアルゴリズムを学ぶのではなく計画性を持った学習ができます。過去の受験記録が蓄積され、成長が見られることも長所といえます。以下は、弊社システムインテグレータが提供している、オンラインでプログラミングテストを実施することで社員のスキルを評価できるサービスです。
設問はプログラミングコンテストで世界的に有名なAtcoder社が提供し、人事担当者は特に手間をかけることなくプログラミングテストの実施と採点ができます。アルゴリズムの学習を取り入れて、エンジニアのスキルアップを狙いたい、そんなニーズを持っている企業様へうってつけです。
個人のアルゴリズム学習
個人での学習は上述したAtCoder社が運営する「AtCoder」というサービスがおすすめです。
こちらもプログラミング知識は必要となりますが、様々な問題を世界中の人たちと同時に挑戦できる「コンテスト」がほぼ毎週末開かれています。さらにコンテストで出題された問題や過去問への解説も充実しています。
問題を解きながら成長していきたいという方は、ぜひチャレンジしてみてください!
競技プログラミングコンテストを開催する国内最大のサイト AtCoder
まとめ(これだけは覚えよう!)
アルゴリズムとは?
・何らかの問題を解決するための手順や計算方法で、
・プログラムを作成する基礎になるものでもある。
アルゴリズムを学ぶには?
・アルゴリズムは日常生活の様々なシーンでも見られる。
・書籍などで「アルゴリズム」を直接学ぶとともに、
・プログラミングをしながら身に付けていく方法もある。
このブログがアルゴリズムを学び始めるきっかけになれば幸いです!
- カテゴリ:
- アルゴリズム