世界で最も強力な9のアルゴリズム
- アルゴリズムとプログラムの違いについて
SEの仕事をする前はあまり区別がありませんでした。
難しいアルゴリズムでプログラムを書くのが仕事かと思っていたのですが、難しい理論的なプログラムを書く仕事をすることは少なく、ものを動かすためのエンジニアリングの仕事が中心で、思っていたのと仕事の内容が異なりました。
最初、SEの仕事をするときに思っていたイメージを実現するため、今後は高度な数学を使うプログラム(パターン認識や人工知能)を開発できるように数学・人工知能等の勉強に励もうと思います。(世間的な基準だと若くない年齢と言われますが、まだまだ考える能力は向上させることができると思っています。)
- 『世界でもっとも強力な9のアルゴリズム』について
コンピュータの入門書は仕事や勉強でコンピュータを使う人(=専門家の入門者)に対して書かれるものが多いのですが、この本は一般向けにコンピュータ科学の考え方を伝えようとしたもので特徴的だと思いました。(教養書にあたるのでしょうか?)
この本の邦題が原題と異なりますが、日本では教養書は売れないので、売るためにはビジネス書のようなタイトルにしないといけないという事情があったのでしょうか。
- 世界を変えたアルゴリズム/理論
世界を変えたアルゴリズム/理論を勝手に10個選んでみました。(1~5までは『世界でもっとも強力な9のアルゴリズム』に出てきたものと同じ。)
どれも情報処理技術者試験に基本項目として出てくる内容で深く突っ込んで理解している訳ではないのですが、なくてはならない考え方だと思います。
①クローリング(インターネット分野)
インターネットのリンクを辿ってページを収集する。
②公開鍵暗号方式(セキュリティ分野)
公開鍵を使って暗号化してもらう。
③誤り訂正(コンピュータ科学分野)
ハードウェア/ネットワークなどの物理的要因で生じたビット化けを修正する。
④データ圧縮
連続した値を別の表現にして、データ量を圧縮する。
⑤パターン認識(AI分野)
特徴量のパターンで分類を行う。
⑥リレーショナルデータベース(DB分野)
二次元の表を連携させて情報の整理を行う。
⑦構造化プログラミング(プログラミング分野)
条件分岐と繰り返しで全ての処理を行う。
⑧オブジェクト指向プログラミング(プログラミング分野)
抽象クラスと派生クラスの階層構造でプログラムを作成する。
⑨ルーティング(ネットワーク分野)
IPアドレスでネットワークを区切り、ルーターで自動的に振り分けする。
⑩ バイナリーサーチ等のサーチ/ソートアルゴリズム(アルゴリズム分野)
例:バイナリーサーチ 大小順番に並んでいるデータから、特定のデータを探すとき、中間の値より大きいか小さいかで探索する範囲を狭める。