この本で取り上げた偉大なアルゴリズムから導き出せる共通のテーマはあるだろうか。この本の著者として私がとても驚いたのは、これらの大きなアイデアは、どれもコンピュータプログラミングやコンピュータ科学の予備知識を一切必要とせずに説明できることだ。
この本のアルゴリズム全体に共通するもう1つの重要なテーマは、コンピュータ科学という学問分野がただのプログラミングよりもずっと大きな世界だということだ。
私が目指したのは、読者に偉大なアルゴリズムについての知識を仕入れてもらって、日常のコンピュータ操作の中でもこれはすごいと感じてもらえるようにすることだ。
9つの偉大なアルゴリズム、検索エンジンのインデクシング、ページランク、公開鍵暗号法、誤り訂正符号、パターン認識、データ圧縮、データベース、デジタル署名、決定不能性を知ることで、僕達の周りでこれらのアルゴリズムがどうやって機能していて、何が担保されているのか理解できるようになります。
これらのアルゴリズムを知ることで、コンピュータの世界はすごいことが起こっていると知ってもらい、新たに出てくる問題の解決の一つになるといいなと思います。
読み物なので、どんな人にもおすすめです。
検索エンジンのインデクシング
検索エンジンは「NEAR」(キーワードが近くにあることを条件にする検索)を使ってランキングの精度を上げている。
また、メタワードトリック(タイトル、見出し、リンクなどのメタ情報のどこにキーワードが含まれているか)をつかって精度を上げている。
ページランク
ハイパーリンクトリック(リンクされているかどうか)、オーソリティトリック(有名なところからのリンクは高評価)、ランダムサーファートリック(ランダムにページを選択肢リンクをたどる)などのアルゴリズムが使われている。
なお、Google のページランクはもっと複雑な条件で行われている。
公開鍵暗号法
「共有された秘密」をどのように作るかがポイント。
誤り訂正符号
人に誤っていると教えることと真実を与えることは別のことだ。
チェックサムと呼ばれる冗長化符号を付与してデータ通信することで、途中でデータが変更されたかどうかを検知する。
パターン認識
パターン認識は、2段階で動作する。訓練データを処理してクラスの特徴を抽出する「学習(訓練)段階」。新しい分類ラベルの付いていないデータを分類する「分類段階」である。
データ圧縮
まとまったデータをより短いシンボルで表すロスなし圧縮と、データの一部を取り除いてしまうロス有り圧縮がある。
データベース
「to-doリスト」、「仮想テーブル」、「準備してからコミット」。
デジタル署名
デジタル署名はあなたが誰か他人に送るものに署名するのではなく、誰か他人があなたにモノを送る前にその送ろうとしているモノに署名をする。
例えば、プログラムをダウンロード、実行しようとするたびに、ウェブブラウザはプログラムがデジタル署名を持っているかどうかをチェックし、その署名が有効かどうかをチェックする。
デジタル署名が提供するのは、機密性ではなく文章の真正性である。
決定不能性
他のプログラムを分析し、そのなかに含まれていてプログラムをクラッシュさせる原因になるようなバグをすべて見つけ出すプログラムは書けない。