catch-img

アルゴリズムって?身近な事例もご紹介

 アルゴリズムとは、ある目的を達成するための「作業手順」のことを言います。プログラミングの世界でよく使われる言葉ですが、たとえば、料理のレシピや家電製品の取扱説明書なども、アルゴリズムと言えるものです。また近年は、アルゴリズム的思考(プログラミング的思考)の重要性が叫ばれています。今回は、アルゴリズムの例や活用するメリット、主なアルゴリズムの種類などについて解説していきます。

▼【リンクアンドモチベーションのサービス特徴】が分かる資料はこちら


アルゴリズムとは?


 アルゴリズムとは、簡単に言えば「作業手順」のことです。特定の課題を解決したり、特定の目的を達成したりするための計算手順や処理手順がアルゴリズムです。その手順に沿っていれば、誰がやっても同じ答え(結果)を出せるのがアルゴリズムの特徴だと言えます。

 アルゴリズムは、プログラミングの世界でよく使われる言葉ですが、心理学においても使われます。その他、料理のレシピや音楽の楽譜、家電製品の取扱説明書などはすべてアルゴリズムと言えるもので、身近なところにもアルゴリズムは溢れています。

 本来、アルゴリズムに形はなく、考え方やアイデアのことを指しますが、フローチャートとして図式化したり、コンピュータで処理するためにプログラミング言語で記述したりします。レシピや楽譜も、アルゴリズムを言語化・可視化したものだと言えます。


アルゴリズム的思考(プログラミング的思考)の重要性


 近年、子どもの教育においても、ビジネスパーソンにとっても、アルゴリズム的思考(プログラミング的思考)が重要だと言われるようになっています。アルゴリズムとは作業手順のことですが、アルゴリズム的思考(プログラミング的思考)と言ったら、「効率良く問題を解決するための筋道・順序を考えること」を言います。

 ちなみに、文部科学省はプログラミング的思考を以下のように説明しています。

 自分が意図する一連の活動を実現するために、どのような動きの組合せが必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、記号の組合せをどのように改善していけば、 より意図した活動に近づくのか、といったことを論理的に考えていく力

※参考:小学校段階におけるプログラミング教育の在り方について(議論の取りまとめ):文部科学省

https://www.mext.go.jp/b_menu/shingi/chousa/shotou/122/attach/1372525.htm


 たとえば、特定の目的地に向かうのに、様々な移動手段やルートがあるとします。それらを組み合わせて、最短で目的地にたどり着く方法を考えるのがアルゴリズム的思考(プログラミング的思考)です。手間がかかる方法を省いたり、手順を入れ替えたりすることで、最適なルートを導き出していきます。

 先行きが不透明で、将来の予測が困難な「VUCA時代」が到来しています。これから、私たちが直面する課題はより複雑で、容易には解決できないものが増えていくでしょう。そんな時代を生き抜いていくための一つの素養として、アルゴリズム的思考(プログラミング的思考)が注目されるようになっているのです。

アルゴリズム的思考(プログラミング的思考)に必要な4つの要素


 アルゴリズム的思考(プログラミング的思考)には、「分解」「一般化」「抽象化」「組み合わせ」の4つの要素が必要だと言われます。逆に言えば、この4つの考え方を使って課題を解決していくのが、アルゴリズム的思考(プログラミング的思考)ということになります。

・分解

 複雑な課題や大きな課題を、理解しやすいように噛み砕きます。これが分解です。課題を小さな単位に分解して、優先順位を付けて解決していきます。課題を分解することによって解決策が見えやすくなるだけでなく、解決方法がうまくいった場合・うまくいかなかった場合の原因分析もしやすくなります。

・一般化

 分解した複数の課題のなかから、共通点や類似性を見いだしていきます。これが、一般化(パターン化)です。一見すると異なる物事にも共通点があったり、類似性があったりするケースは少なくありません。そのようなポイントを見いだして一般化することによって、課題を汎用化して解決できたり、別のことに利用できるようになったりします。

・抽象化

 課題の解決策などを検討するなかで、考えなくてもいいことを省き、本当に重要なポイントだけを取り出します。これが、抽象化です。課題解決に向けて必要な要素だけを抽出し、その他の要素を削ぎ落としていくことによって、物事の原則や全体的な傾向を捉えることができます。これによって、問題点をより明確に認識できたり、より的確な解決策を見いだせたりします。

・組み合わせ

 課題解決に向けて試行錯誤しながら、より良い解決手順をつくり出していきます。これが、組み合わせです。プログラミングの3つの基本処理である「順次」「分岐」「反復」は、まさに組み合わせに当たります。既存の要素やアイデアを組み合わせることで、課題に対して最適なソリューションを導き出すことができるでしょう。


身近なアルゴリズムの例

家電製品の取扱説明書


 家電製品を初めて使うときは、何らかの設定や操作が必要になります。この手順が記載された取扱説明書はアルゴリズムの一種と言えるものです。取扱説明書の手順を無視したり省いたりすると、家電製品が動作しないこともあります。

料理のレシピ


 料理のつくり方が記されたレシピもアルゴリズムの一種と言えるものです。誰がつくっても同じ味の料理ができるように、材料の分量や料理の手順が記載されています。

カーナビ・乗換案内


 車のカーナビや、電車の乗り換え案内もアルゴリズムの一種と言えるものです。たとえば、カーナビで目的地を検索すると最短ルートが表示されますが、これは渋滞情報なども踏まえ、数あるルートのなかからどのルートを使うともっとも早く目的地にたどり着けるのかをアルゴリズムによって導き出した結果です。

楽譜


 楽譜は五線譜に音符が左から右へと書かれており、そのとおりに演奏していきます。つまり、楽譜は特定の曲を演奏するという目的を達成するためのアルゴリズムを視覚的に表現したものだと言えます。

プログラム


 プログラムは、アルゴリズムをプログラミング言語によって表現したものです。コンピュータは、プログラムに記載された手順に従って動いています。


アルゴリズムを活用するメリット

作業を標準化できる


 アルゴリズムは、基本的に誰がやっても同じ結果になるようにつくられています。そのため、アルゴリズムに従って作業をすれば、誰でも同じレベルで業務を処理することができるはずです。たとえば、新人教育などにアルゴリズムを活用することで作業の標準化が可能になり、一定以上のクオリティを担保できたり、スキルの習得が早くなったりする効果が期待できます。

問題の所在を特定できる


 たとえば、レシピどおりにつくったのに料理の味が美味しくなかったとします。レシピを見直してみると、「たまねぎを炒める」という手順がありました。しかし、これだけの記述だと、調理をする人によって炒める度合いが変わってしまうため、味にバラつきが生じてしまいます。たとえば、「たまねぎをキツネ色になるまで炒める」というように手順を書き換えれば味が安定するでしょう。このように、作業をアルゴリズムで表現しておくと、問題が発生したときに、どの作業・工程に問題があるのかを特定しやすくなります。

業務効率化を図りやすい


 作業をアルゴリズムで記述しておくと、ムダな作業や非効率な作業、負担がかかっている作業などが見えやすくなります。その結果、「A作業とB作業を入れ替える」「C作業を省く」「Dの工程を外部委託する」など、様々な施策によって業務効率化を図ることができます。


主なアルゴリズムの種類

サーチアルゴリズム(探索アルゴリズム)


 サーチアルゴリズム(探索アルゴリズム)とは、膨大なデータのなかから目的のデータを探し出すために用いられるアルゴリズムです。サーチアルゴリズム(探索アルゴリズム)は、大きく「リニアサーチ(線形探索法)」と「バイナリサーチ(二分探索法)」に分けることができます。

 リニアサーチ(線形探索法)とは、端から順番に目的のデータを探していくアルゴリズムのことです。バイナリサーチ(二分探索法)とは、羅列されたデータの真ん中から目的のデータを探していくアルゴリズムで、探しているデータが真ん中のデータよりも大きいか小さいかで切り分けていきます。

ソートアルゴリズム(整列アルゴリズム)


 ソートアルゴリズム(整列アルゴリズム)とは、大量のデータを一定のルールに沿って並び替えるために用いられるアルゴリズムです。以下のように、いくつかの方法があります。

・バブルソート

 バブルソートは、隣のデータと大小を比較して並び替えをおこなうソートアルゴリズムです。

・選択ソート

 選択ソートは、データの配列から最小値、もしくは最大値を探し、配列の先頭要素と入れ替えていくことで並び替えをおこなうソートアルゴリズムです。

・挿入ソート

 挿入ソートは、未整列の配列から値を1つずつ取り出し、整列済みの配列の適切な位置に挿入していくことで並び替えをおこなうソートアルゴリズムです。

・シェルソート

 シェルソートは、一定間隔でグループをつくり、グループごとに並び替えをおこなうソートアルゴリズムです。

・クイックソート

 クイックソートは、基準値を決めて、基準値より小さい値のグループと基準値より大きい値のグループに分け、グループ単位で並び替えをおこなうソートアルゴリズムです。

遺伝的アルゴリズム


 遺伝的アルゴリズムとは、生物の進化の仕組みを模したアルゴリズムです。遺伝子に相当する大量のデータ構造をランダムに生成し、それを評価し、成績の良いものだけを次世代に残して子孫をつくらせるという手順を何世代も繰り返すことで、優秀なデータ構造に進化させていきます。ベストな解は得られないものの、ベストに近い近似解を短時間で探索できるのが遺伝的アルゴリズムの特徴です。


まとめ


 アルゴリズム的思考(プログラミング的思考)と言うと、ITエンジニアなど、限られた職種の人に必要なスキルだと考えられがちです。しかし、VUCAと呼ばれる時代においては、既存の思考パターンでは対処できない複雑な問題が続々と生まれてくるはずです。


 また同時に、アルゴリズム的思考は業務の標準化に寄与することも大きな利点です。


 顧客価値に寄与する業務を特定し、プロセスを標準化することで、業務への習熟度が浅いメンバーが多かったとしても顧客への貢献機会を拡大することが可能になります。当然メンバーのモチベーション向上にもつながります。


 その結果、組織としての「生産性の向上」「効果の極大化」を両立することができるのです。


 これからの時代、アルゴリズム的思考(プログラミング的思考)はあらゆるビジネスパーソンに求められる重要な資質になっていくでしょう。


アルゴリズムに関するよくある質問

Q:良いアルゴリズムの条件とは?


 プログラミングの世界で良いアルゴリズムの条件として挙げられるのが、「信頼性が高い」「処理速度が速い」「分かりやすい」といった点です。

・信頼性が高い

 どんな場合でも正しい結果が得られることは、良いアルゴリズムの必須の条件です。安定性があるアルゴリズムと言い換えることもできるでしょう。

・処理速度が速い

 同じ結果を出すアルゴリズムでも、より短い時間で結果を出してくれるアルゴリズムのほうが優秀だと言えます。計算回数が少ないアルゴリズムや大量のメモリを使わないアルゴリズムは、処理速度が速くなります。
​​​​​​​

・分かりやすい

 誰が見ても同じように理解できることは良いアルゴリズムの重要な条件です。アルゴリズムが分かりやすいものであれば、プログラムの保守もしやすくなります。


Q:アルゴリズムとプログラムの違いとは?


 アルゴリズムとプログラムは混同されがちな概念ですが、決定的な違いが「目に見えるかどうか(形があるかどうか)」ということです。本来、アルゴリズムには形がなく、目に見えません。抽象的な考え方やアイデアがアルゴリズムです。一方、プログラムはアルゴリズムを具体的な形にしたものなので、目に見えます。


 たとえば、コンピュータに実行してもらいたい処理があったとしましょう。あなたは、「その処理をおこなうためには、このような作業手順が必要だ」と考えました。このとき、あなたの頭の中にあるアイデアがアルゴリズムです。しかし、実際にコンピュータに処理してもらうためには、コンピュータに分かるようにコードという形で作業手順を記述しなければいけません。この作業手順を具体的なコードの形に落とし込んだものがプログラムであり、コードを記述する工程をプログラミングと言います。


▼【リンクアンドモチベーションのサービス特徴】が分かる資料はこちら

木藤 綾佳
木藤 綾佳
【プロフィール】 リンクアンドモチベーション入社。以降、大手企業向けのコンサルティング部隊に所属。 営業企画として人材育成サービスに関するマーケティング施策に携わる。

新着記事

この記事を読んだ人は、こんな記事にも興味を持っています

あなたの組織にも、課題はありませんか?

各種サービス資料が無料ダウンロードできます

3分でわかる管理職研修サイクル

3分でわかる管理職研修サイクル

サービスご紹介資料

3分でわかるモチベーションクラウド

3分でわかるモチベーションクラウド
ページトップへ戻る