筋のいい計算手段かどうかが、サービスの利便性を決める

新刊『テクノベートMBA基本キーワード70』の7章「コンピュータ/インターネットの基本」から、「Keyword064 アルゴリズム」を紹介します。

コンピュータを動かすプログラムを書くというと、PythonやJAVA、C#といったプログラミング言語を連想する人も多いでしょう。もちろん、実際のプログラムはこれらを用いて書かれるわけですが、プログラムの有効性を決めるのは、プログラミング以前のアルゴリズム(数学的な計算手順、段取りを指定すること)なのです。

実際、優れたアルゴリズムは、課題解決にあたって、平凡なアルゴリズムの数百倍、数万倍・・・の効果をもたらすことも少なくありません。一般のビジネスパーソンがすべてのアルゴリズムを理解できている必要はありませんが、ある程度の感覚は欲しいところです。そのためにも、機会があればネット上で公開されている無料の簡単なプログラミング機能を実際に触ってみることで、アルゴリズムの差が結果にどのような違いをもたらすか、実感してみるとよいでしょう。

(このシリーズは、グロービスの書籍から、PHP研究所了承のもと、選抜した項目を抜粋・転載するワンポイント学びコーナーです)

アルゴリズムとは?

コンピュータを用いて問題を解決するための数学的な計算手順、段取りのこと。

解説

コンピュータを用いて課題を解くためには、どのような順番でどのように計算を行えば効率良く課題が解けるかについて、まず人間が考える必要があります。ここでいう「効率良く」とは、ある課題について、それをできるだけ少ない計算量で解決することを指します。

計算量が多くなると、処理時間が長くなってしまいます。0.1秒が0.15秒になる程度なら大した問題ではないかもしれませんが、たとえばSNS上で過去の投稿を検索しようと思った時、その検索に数十秒、ましてや数分もかかってしまうようだと、そのSNSを利用したいと考える人は激減してしまうでしょう。フェイスブックをはじめとする有名なSNSではこうした計算が瞬時に行われますが、それはそうした企業が優秀な人材(コンピューターサイエンスを学んだ人材など)を大量に雇い、多額の資金を投資して優れたアルゴリズムを作っているからこそ実現できているのです。このように、良いアルゴリズムの条件として、計算量が少なくて済むというのは非常に大切なのです。

もう少し具体的に考えてみましょう。たとえば、ある人の誕生日を当てる課題を解決するためのアルゴリズムを考えてみます。この時、コンピュータはYES/NOを問う質問しかできないものとします。つまり「誕生日は何月何日ですか?」という質問はできないわけです。この設定は、コンピュータは1度に1つの情報しか見ることができないという実際のコンピュータの動作を仮想的に反映したものになります。

ここで考えられる案として、「誕生日は1月1日ですか?」→(1月1日ではない場合)「1月2日ですか?」→「1月3日ですか?」と頭から順番に聞いていくやり方があります。しかしこの場合には誕生日を当てるまで、平均183回の質問=計算が必要になります。これではあまり筋がいいとは言えません。

一方、「誕生日は1~6月ですか? それとも7~12月ですか?」→(1~6月までの場合)「それは1~3月ですか?それとも4~6月ですか?」と、候補日の範囲を2分割してそのどちらに当たるかを聞いていくやり方が考えられます。この場合、なんと最大でも9回の計算で、誕生日を当てることができます(実際に試してみてください)。ちなみに、こうなる理由は、誕生日の候補数の366が、2の9乗の数である512より小さい数だからです。

今回の誕生日のケースではたかだか366通りの解しか候補がないので「力づく」でも何とかなりますが、1兆通りもの答えがあるような場合には、悪いアルゴリズムでは計算量が莫大に増えてしまうため時間がかかってしまい、とても実用に耐えないプログラムとなってしまいます。

それに対し、1兆通りの答えがあっても、2分割していく方法では最大40回の計算で済みます。1兆という大きな数でもたかだが2の40乗未満の数だからです。このように、アルゴリズムの良し悪しは、問題が複雑になるにつれて、計算量に指数関数的な差をもたらしてしまうのです。

通常、ITプロジェクトの発注者はこうしたアルゴリズムに無関心なことが多いですが、実は発注者サイドにもこうしたアルゴリズムについての理解があると、プロジェクトの効率は大きく向上すると言えます。

利便性を大きく改善したページランク

当然ですが、目的に適った結果を出すことも良いアルゴリズムの条件です。その代表が、グーグル創業者のラリー・ペイジ氏らが作った「ページランク」のアルゴリズムです。ページランクとは、ウェブページの重要度を評価するシステムのことで、その結果が検索結果に反映されて表示される仕組みになっています。

ページランクのアルゴリズムが画期的だったのは、「重要なウェブページは多くのウェブページからリンクされている」、そして「重要なウェブページにリンクされているウェブページは重要度が高い」という2つのシンプルな前提に基づいてアルゴリズムを構成した点です。

ページランクが登場する以前の検索のアルゴリズムは、必ずしも精度が良くありませんでした。たとえば、検索した単語がたくさん含まれているウェブページを検索結果の上位に出すというものもありましたが、これではユーザーの望むページがなかなか上位にきませんでした。ページランクは、こうした問題を有効に解決したのです。

(本項担当執筆者:嶋田毅 グロービス出版局長)

RELATED CONTENTS