Amanjackのブログ

プログラミング初心者、FX初心者の成長日記

世界でもっとも強力な9のアルゴリズム

世界でもっとも強力な9のアルゴリズム

世界でもっとも強力な9のアルゴリズム

 

 

アルゴリズムソースコードを書いてみたいと思い購入しましたが、ソースコードは一切でてきませんでした。

 

しかし、読み物としてとても面白い本です。

 

9のアルゴリズムと言っていますが、正確には生活に及ぼしている9種類のIT技術のお話なので、一つのIT技術に対して数種類のアルゴリズムの話が出てきたり、または出てこない章もあったりします。

 

9章のデータベースや10章の決定不能生に関してはアルゴリズムですら無いです。技術の仕組みや数学の証明を深堀りするお話です。

 

9種類のアルゴリズムを技術レベルまで落とし込んで理解できることを期待していたのですがもっと抽象的で、9種類のIT技術の仕組みをIT分野に疎い方でも理解できるように歴史的な話から仕組みの話までを分かりやすく説明してくれる本です。

 

それでは、9のアルゴリズムを追っていきます。

 

1. 検索エンジンのインデクシング

インデクシングとは検索時に利用しているアルゴリズムです。インデクシングのほかにマッチングと言う文字列に位置情報を関連させるアルゴリズムのお話もあります。検索エンジンのテクニックを簡単に言うと、事前に索引を作っておき、検索時はその索引から検索して結果を表示するものです。その検索テクニックを単純な3つの英語の例文を使ってわかりやすく詳細に説明してくれます。

 

2. ページランク

ページランクとはグーグルの創業者のセルゲイ・ブリンラリー・ペイジが学生のときに発表した検索エンジンのランキングを作るためのアルゴリズムです。簡単に言うと、リンクの数と重みを利用して表す手法です。4種のスクランブルエッグのサイトを見立ててページランクのテクニックを深堀りしつつわかりやすく説明してくれます。

 

3. 公開鍵暗号

オープンな場でも特定の相手にしか分からないように情報を伝える手法のお話です。自分とイブとアーノルドと言った架空の人物の3人が登場します。とても簡単な例から始まりますが、徐々に難しくなっていきます。

 

4. 誤り訂正符号

データが伝送する際は必ずノイズが発生しますが、そのノイズを放置していたらデータはデタラメになってしまいます。パソコンはイレギュラーが無いように思えますが、実際にはとても多くの誤りがあり、その誤りは訂正されてから私たちの目に映っているので私たちの実感として認識しずらいようになっています。本章はそのノイズを修正する仕組みである反復トリック、冗長性トリック、チェックサムトリック、ピンポイントトリックなど説明してくれます。

 

5. パターン認識

機械があまり得意では無い分野であるパターン認識に関して、機械が答えを作り出す仕組みを説明してくれます。最近傍法と言った距離を利用して誤差を判定する技術や決定木と言った質問を重ねて答えに近く技術が出てきます。後半は人間の頭脳を模倣する技術であるニューラルネットワークを使ってパターン認識する仕組みのお話です。

 

6. データ圧縮

データを圧縮する技術はZipだけでなくデータを伝送する際など様々なところで使われています。圧縮には大きく分けてロスなし圧縮とロスあり圧縮の2つあり、その仕組みを説明してくれます。ロスなし圧縮は圧縮した後に元に戻すことができ、反復するものには短いシンボルを振り分けるテクニックや頻繁に出てくるものには短い文章に変更するテクニックを用います。ロスあり圧縮は圧縮後には元に戻せません。影響の少ない部分を除外して圧縮します。

 

7. データベース

データを保存する際に利用するリレーショナルデータベースに関して説明してくれます。トランザクション、todoリストトリック、コミット、ロールバック、仮想テーブルトリックなどが登場します。この章はプログラマーなら誰でも知っている仕組みの話が多くあまり面白くありません。また、アルゴリズムと言えるのか疑問でもある章です。

 

8. デジタル署名

この章では今まで出てきたテクニックが合わさって用いられます。公開鍵暗号法やチェックサムトリックが再登場し、公開鍵を保管する銀行を通してデジタル署名を実現します。後半は素数の特殊な仕組みを利用した公開鍵暗号法であるRSAの仕組みも教えてくれます。コピーできるはずのデジタル技術がコピーできない署名として利用する面白いパラドックスを解決します。

 

9. 決定不能性とはなにか

コンピュータにも不可能なことがあると言うことを証明をします。 背理法を使った数学の証明問題の解法のような内容ですが、丁寧に教えてくれるので全然難しくありません。バグクラッシュ検出システムを例にして最終的にはバグクラッシュ検出システムを作れないことを証明しますが、完璧なシステムでなくとも似たようなシステムを作ることはできる話で落ち着きます。

 

おわりに 

何のためにそのアルゴリズムがあるのかと言えば、なにかを成し遂げるために作られたわけで、難しい問題を成し遂げるには1つのアルゴリズムで解決できるはずもなく、様々なアルゴリズムを組み合わせて技術をつくるので技術の説明をするときはアルゴリズムは1つのわけはなくその全てを合わせて1つの技術になるので1つのアルゴリズムとも言え、題名の9のアルゴリズムはやはり間違っていないのだと思いました。