アルゴリズムとは、ある問題を解決するために必要な段取りを記述したもの、つまり答えを出す「手順」のことです。プログラムとよく似ていますが、問題解決のためのアイデアをまとめたものが「アルゴリズム」、そのアイデアを実際のコンピュータで動作するよう具体的に指示するのが「プログラム」です。
たとえば、三角形の面積を求めるための「公式」や、4桁の数字の掛け算を行うための「筆算」もアルゴリズムの一種。人類は何千年も前から、アルゴリズムを考案してきました。
以前ならば人間自身が実行するしかなかったアルゴリズムも、今はコンピュータに任せることができます。そのためコンピュータの発展とともにいくつものアルゴリズムが実用化され、一層便利な社会になってきました。ここでは、そんな実用的なアルゴリズムの例を紹介します。
「ファイルを圧縮する」アルゴリズム
容量の大きなデータを「zip」形式に圧縮したあと、メールなどで送ることがありますね。データ圧縮の技術は至るところで使われていて、たとえば、携帯電話の音声も送られてくる途中はデータ圧縮されています。そのほうが、同じ設備で多くの携帯電話利用者の音声を効率よく送ることができるからです。
いくつもある圧縮のアルゴリズムで一番簡単なのは、文章中の繰り返し部分を見つけてより短い文字列に置き換えてしまうことです。たとえば「AAABBBBBCCCCC」というデータがあったとします。よく見るとAが3回、BとCが5回ずつ繰り返されているので「A3B5C5」のようにデータを置き換えられます。13文字あったデータが6文字に圧縮されました。しかも、圧縮されたデータから元のデータ「AAABBBBBCCCCC」を再現することもできます。
「人気サイトを見つける」アルゴリズム
Googleのような検索サービスは、短時間で有用な情報にたどり着けるのでとても便利です。その秘密は「ページランク」というアルゴリズムにあります。まず、次のような方針を立てます。
(1)ほかのサイトから張られているリンクが多いサイトほど価値が高い。
(2)人気サイトからのリンクがあるサイトほど価値が高い。
そして、ネット上のサイトがどのサイトにリンクを張っているかを調べます。次にそのデータをもとに、サイトごとにどのサイトからリンクを受けているかを調査・計算することで、サイトのランクを決めていきます。現在数十億はあるというサイトに対して、このような計算をするのは膨大な作業が必要です。しかし、サイトの人気という曖昧なものが計算できることを示した点で、「ページランク」は画期的なアルゴリズムでした。
「人工知能(AI)が将棋や囲碁で人間に勝つ」アルゴリズム
最近Google DeepMind社が開発した「アルファ碁」というプログラムが、碁のプロ棋士に勝利して話題になりました。これら碁や、将棋のプログラムはどのような方法を使って強くなったのでしょうか。重要なのは、ある局面が有利か不利かを正しく判断することです。まず、評価基準となる項目をたくさん用意して、その重要度を数値にしておきます。次に、局面を評価基準に照らし合わせ、重要度を考慮して評価値を計算します。これを敵味方それぞれで計算して比較すれば、有利か不利かがわかります。あとは、自分に有利な局面になる手を指していきます。一番の問題は評価項目の重要度の決め方です。以前は将棋ソフトの開発者が長年の経験をもとに調整していましたが、現在のソフトが持つ評価項目数は数万個もあり、人力では不可能になっています。現在はプロ棋士の将棋をもとにして、プロの指し手と同じ手がさせるように重要度をコンピュータに計算させる「機械学習」の方法が主流になっています。