「アルゴリズムとは何か」という質問に、パッと答えられますか?
本記事では、アルゴリズムについて解説するとともに、アルゴリズムの種類や具体例、オススメ本などもご紹介します。さらに、プログラミングを学習するうえでのアルゴリズムの重要性に触れ、アルゴリズムの重要性をより深く理解できる内容になっています。
アルゴリズムについて知りたい方はもちろん、これからプログラミングを学び始める方もぜひ参考にしてください。
アルゴリズムとは
「アルゴリズム」という言葉は、非エンジニアの方であっても一度は耳にしたことがあるでしょう。たとえば「Googleの検索アルゴリズム」や「迷惑メールを排除するアルゴリズム」など、開発現場以外でもさまざまなシーンで使われています。まずはアルゴリズムの意味から理解していきましょう。
アルゴリズムの一般的な意味
アルゴリズムの意味を調べてみると、次のように紹介されています。
「問題を解決するための方法や手順のこと。問題解決の手続きを一般化するもので、プログラミングを作成する基礎となる」(ASCII.jpデジタル用語辞典の解説)
「問題を解くための数学的計算手順。算法ともいう。具体的には、プログラミング言語を使って、問題の解決手順を記述したものを、コンピューターのプログラムと呼ぶ」(知恵蔵の解説)
この解説も踏まえ、アルゴリズムとは、何らかの問題を解決するために考えられた手順や計算方法のことです。プログラミングを作成する基礎となる点も重要なポイントでしょう。
「大根のいちょう切り」の例
ここまでの解説で、アルゴリズムは「手順や計算方法のこと」「プログラミングに欠かせない」「効率良い処理のためのもの」といった、要点は掴んでいただけたのではないかと思います。そこで、一度プログラミングから離れて別のことでアルゴリズムを捉えてみます。ご紹介するのは「大根のいちょう切り」におけるアルゴリズムです。
料理を始めて最初に学ぶのが野菜の切り方。その中でも最もメジャーな切り方の一つが、このいちょう切りです。根菜などの野菜を四等分にして、薄くスライスしたごくシンプルな切り方ですが、料理初心者に切ってもらうと、いろいろな切り方をする人が出てきます。
ここでは、以下のような2つのパターンでいちょう切りの手順を比較してみました。どちらの方法がより効率的といえるか考えてみてください。
パターン1
① 大根を30枚にスライスする(29回)
② 1枚ずつ四等分にカットしていく(30枚×2回)
⇒ 合計89回カットした
カッコの中の数字は「何回包丁を入れたか?」です。合計すると、89回包丁を入れています。では、次のような手順に変えてみるとどうでしょうか?
パターン2
①' スライスする前に縦4本に切る(3回)
②' カットした4本をまとめてスライスする(29回)
⇒合計32回カットした
このように手順を変更してみると、なんと32回まで回数を削減できます(ちょっと無理して回数削減した部分もありますが、見逃してください!)。この効率の良い方法こそ良い「アルゴリズム」と言えるでしょう。
プログラミングにおけるアルゴリズムでも同じこと
プログラミングにおけるアルゴリズムも同様です。通常なら無数の処理を実行しなければならないプログラムも、少し手順を変更したり新しい手順を加えることで、それまでとは見違えるほど効率良く処理が実行できるようになります。良いプログラムを書き、品質の高いシステムやソフトウェアを開発するためには、アルゴリズムに関する知見が不可欠なのです。
ビジネスシーンにおける活用例
アルゴリズムは、生活の中だけではなくビジネスでも様々な場面で使われています。ここではその例を一部ご紹介します。
①Google
Googleがアルゴリズムを頻繁に変えたり、そのためにエンジニアにお金を払ったりしていることをご存知でしょうか。Googleの検索結果がより良いものになれば、皆がGoogleを使うようになります。そしてGoogleは検索結果に表示する広告で対価を得ているため、利用者や利用回数が多ければ多いほどビジネス的には効果が高いといえます。
②インターネット広告
インターネット広告にもアルゴリズムが使われています。最近のインターネット広告は、広告枠に対して自動的に配信されるものが多くなっています。どのようなアルゴリズムで表示する広告を決めるかというと、オークション形式が一般的です。しかし、普段イメージするようなオークションではなく、このオークションは自動かつ一瞬で行われています。事前に広告を掲載したい事業者を募集しておき、掲載希望料金など様々な要素から配信される広告が決定します。
代表的なアルゴリズム5種類
その他にも多くの種類のアルゴリズムが存在します。幅広くアルゴリズム自体を学ぶもよし、問題を見つけて実際にプログラミングでアルゴリズムを実装してみるもよしです。以下にアルゴリズムの一部を掲載します。
ソートアルゴリズム
データを昇順、降順など、一定の規則に従って整列させる必要があります。そのための技術がソートアルゴリズムです。
探索アルゴリズム
数あるアルゴリズムのなかでも、もっとも基本的なアルゴリズムの1つです。 複数のデータの中から条件に一致した値を見つけます。
暗号化アルゴリズム
暗号アルゴリズムとは、暗号化処理の手順や規則のことです。たとえば「ABC」を暗号化して「BCD」にする場合、「アルファベット順に1つ後ろにずらす」がアルゴリズムといえます。
幾何学系アルゴリズム
幾何学の言葉で述べることのできるアルゴリズム
遺伝的アルゴリズム
人工生命同様、偶然の要素でコンピューターの制御を左右する。4つの主要な進化的アルゴリズムの一つであり、その中でも最も一般的に使用されている。
ソートアルゴリズム、探索アルゴリズムなどのブログ
ソートアルゴリズム、探索アルゴリズムなどの関連ブログをご紹介します。よろしければご活用ください!
代表的なアルゴリズムの例「バブルソート」
アルゴリズムにはいくつか代表的なものがあります。ここでご紹介するのは数値をある規則に沿って配列する「ソートアルゴリズム」と呼ばれるものです。無数のプログラムによって形成されるシステムは大量のデータを扱います。その際に、データを昇順(値が小さい順)や降順(値が大きい順)にデータを並べ替えたり、その他の規則に従ってアルゴリズムを配列(ソート)する必要があります。
ソートアルゴリズムの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番目の要素が確定 ★昇順ソート完了★
このような手順によって数値を配列していくものをバブルソートと呼びます(並べ替えの過程で数字が右から左へ移動していく様子が、泡(バブル)がフワフワと浮かんでいくように見えることから名づけられたそうです)。他にも様々なアルゴリズムがあるので、それらを学習し、理解し、習得することでプログラミング能力も飛躍的に向上するでしょう。
プログラミングにおける重要性
プログラミングは一般的にビジネスの課題を解決するために、システムを構築したり新しい機能をリリースするためにあります。しかし、課題を解決できるようなものなら、どんなプログラムでもよい、というわけではありません。
同じシステムを構築して新しい機能を実行するにしても、より効率良くユーザーからのリクエストやデータを処理できるプログラムを作ることが大切です。それはシステムパフォーマンス向上のためであり、システムの保守性を高めるためでもあります。
プログラミングの世界におけるアルゴリズムは、効率の良いプログラムを作成するために不可欠な手順や計算方法であり、アルゴリズムを習得するということは、プログラミング能力を向上させる上で欠かせないものなのです。
なぜアルゴリズムを学習する必要があるのか?
二分探索法は初歩的なアルゴリズムで、日常的に使っているコンピューターやアプリ、Webサービスでは、もっと複雑なアルゴリズムによって動いている場合もあります。
プログラマーやシステムエンジニアを目指すのであれば、アルゴリズムの知識を仕事に活かすことができるかもしれません。しかしプログラミングの現場においても、すでに用意されている関数やパッケージを使うだけで済む場合も多く、実務の中で役に立つと感じることは意外と少ないケースもあります。また、そもそもプログラミングを仕事にしないのであれば、アルゴリズムなんて自分には関係ないと思ってしまうかもしれません。
しかし、アルゴリズム思考を学ぶことは仕事や生活の上でも役立ちます。アルゴリズムの手法を知っていると、「何とかできないかな?」と常に考える癖がつきます。
アルゴリズムを使って物事を改善したりするのは、頭を使わなければならないし面倒なことです。しかし、改善を一度行えば、その作業をするたびに時間を節約することができます。
自分には関係ないと思っている方も、アルゴリズムを学ぶこと仕事や生活に応用することができるかもしれません。
以下の記事も合わせてご覧ください。
探索アルゴリズムとは?基本から応用まで分かりやすく解説します!
【初心者におすすめ】アルゴリズムの最適な勉強方法とは?参考Webサイト・本・アプリを紹介
学習におすすめの本
個人のアルゴリズムの習得もさることながら、企業においてはプログラマーの能力の基礎ともいえるのがこのアルゴリズムに関わる能力です。なぜなら、その能力の違いによって、アプリケーションの品質や生産性が大きく変わってしまうからです。そんなアルゴリズムを学習するために、まずはお薦めの書籍からご紹介します。
社内で「アルゴリズム・プログラミングを学ぶためのお薦め書籍」アンケートを取った中から、アルゴリズムに関する書籍を2点ピックアップしました。どちらの書籍もAmazonの評価も高いようです。皆さんの書籍選びのご参考になれば幸いです。
タイトル |
アルゴリズム図鑑 |
タイトル | なっとく!アルゴリズム |
出版社 | 翔泳社 | 出版社 | 翔泳社 |
出版年 | 2017年 | 出版年 | 2017年 |
プログラミングをしながら学習する方法
書籍や参考書を開いて片端からアルゴリズムを学ぶ、というのも一つの方法ですが、より効率良く学ぶためには「今自分に何が足りないのか?」を知ることが大切です。
企業におけるアルゴリズム学習
たとえば企業が社員に対してアルゴリズムを学習させたい場合、プログラミングサービスの活用をおすすめします。
プログラミングテストとはプログラムで様々な課題を解決するために、設問に対し実際にソースコードを書くことでそれを評価するというテスト方式です。テストを実施することで、社員に何が足りず何が必要なのかが自然と見えてくるため、闇雲にアルゴリズムを学ぶのではなく計画性を持った学習ができます。過去の受験記録が蓄積され、成長が見られることも長所といえます。以下は、弊社システムインテグレータが提供している、オンラインでプログラミングテストを実施することで社員のスキルを評価できるサービスです。
設問はプログラミングコンテストで世界的に有名なAtcoder社が提供し、人事担当者は特に手間をかけることなくプログラミングテストの実施と採点ができます。アルゴリズムの学習を取り入れて、エンジニアのスキルアップを狙いたい、そんなニーズを持っている企業様へうってつけです。
個人のアルゴリズム学習
個人での学習は上述したAtCoder社が運営する「AtCoder」というサービスがおすすめです。
こちらもプログラミング知識は必要となりますが、様々な問題を世界中の人たちと同時に挑戦できる「コンテスト」がほぼ毎週末開かれています。さらにコンテストで出題された問題や過去問への解説も充実しています。
問題を解きながら成長していきたいという方は、ぜひチャレンジしてみてください!
競技プログラミングコンテストを開催する国内最大のサイト AtCoder
まとめ(これだけは覚えよう!)
アルゴリズムとは?
- 何らかの問題を解決するための手順や計算方法で、
- プログラムを作成する基礎になるものでもある。
アルゴリズムを学ぶには?
- アルゴリズムは日常生活の様々なシーンでも見られる。
- 書籍などで「アルゴリズム」を直接学ぶとともに、
- プログラミングをしながら身に付けていく方法もある。
このブログがアルゴリズムを学び始めるきっかけになれば幸いです!
-----参考情報-----
■TV出演動画:ええじゃない課Biz(2022/05/29 放送 TOKYO MX)
アンタッチャブル柴田さん、アルコ&ピースさんがレギュラーのビジネス情報番組「ええじゃない課Biz」にて、プログラミングスキル判定サービス「TOPSIC」と企業・学校対抗プログラミングコンテスト「PG BATTLE」のご紹介をさせていただきました。5分位の動画ですので、ぜひご覧くださいませ。