「アルゴリズム図鑑」を読んだ

サマリ

動機

Rubyの勉強をしている中で、アルゴリズムのパターンを知っておくと考えを整理するのに便利かもしれないと思い。まずは図が大きく説明の少ない入門書から。

感想

  • 配列などのデータ構造を、コスト面から考えたことはあまりなかったから新鮮だった
  • 情報を整理するための基本的な方針がすでにまとまっているので、自分で一から考えるよりも学んでしまった方が早い部分が多そう

学んだこと

アルゴリズム
計算や作業を遂行するための手順

スタック
データを一列に並べて、新しく追加したデータから順番にアクセスするデータ構造(Last in First out)

キュー(待ち行列)
データを一列に並べて、一番古いデータから順番にアクセスする(First in First out)

ハッシュテーブル
ハッシュとデータの対になったデータ。ハッシュ関数を利用し、素早いアクセスを可能にする

2分探索木
ノードが最大2つの子を持ち、ノードより左側は全てノードより小さく、右側は全てノードより大きいように構成されている

コンピュータサイエンスにおけるグラフ
ノードと辺で表現されるもの。辺自体に値が付いている(電車の運賃表とか)ものや辺に方向があるものがある

データをやりとりする際の主な問題

  • 盗聴
  • 改ざん
  • なりすまし
  • 事後否認

共通鍵暗号方式
暗号化と復号に同じ鍵を使う方式。結局鍵も渡すことになるので、鍵自体を盗まれればデータも復号できてしまう問題がある。

公開鍵暗号方式
受信側が公開鍵と秘密鍵を作成し、公開鍵のみを送信側に渡す。送信側は公開鍵で暗号化を行い送信する。第三者は復号に必要な秘密鍵を盗めないので鍵配送問題が起きない。が、公開鍵自体の書き換えが行われてしまうと、盗聴は可能になってしまう。

デジタル署名
公開鍵暗号方式の逆(送信者側が鍵を発行し、手元の秘密鍵で暗号化し、受信側が公開鍵で開く)を行う。暗号としては意味をなさないが、作成者側に秘密鍵が残っているので、作成者だと保証することができる