アルゴリズムとデータ構造についの復習
アルゴリズムとは
入門編で説明したとおり、現在、コンピュータには、JavaやC/C++言語、C#言語など、様々なプログラミング言語が存在します。しかし、これらプログラミング言語の文法を理解していても、コンピュータのプログラムを作ったり、ましてやソフトウェアを開発したりすることはできません。なぜなら、プログラミングとは、あくまでもコンピュータに段取りを教える手段に過ぎないからです。
コンピュータの世界では、このような段取りのことを特に、アルゴリズムと読んでいます。アルゴリズムは、言語の枠を超えた普遍的な考え方で、現在要なコンピュータ(ノイマン型コンピュータと呼ばれています。)が使われる限り、変わることはありません。
データ構造とは
また、このアルゴリズムと同様に大事なのが、データ構造と呼ばれるものでした。コンピューターで様々な計算や処理を行う前に、あらかじめ扱うデータを加工しておき、コンピュータの実行速度が速くなるようためのものです。実はこのデータ構造は、アルゴリズムと切っても切り離せないのです。
アルゴリズムとデータ構造の関係性
要するに、プログラミングを料理に例えるのならば。アルゴリズムとデータ構造はレシピに相当するものでした。どんな料理も、レシピがあれば作れるように、どんなプログラムでも、適切なアルゴリズムとデータ構造があれば、作れるわけです。
しかし、レシピがあれば、手際よく料理ができるのかというと、それはまた別の話です。一つの問題を解決する方法は多数あり、プログラマーは、それに対して適切なアルゴリズムとデータ構造を選ばなくてはなりません。
つまり、プログラミングでは適切なデータ構造とアルゴリズムが選ばれれば問題を手際よく解決できるのです。
学習の内容
以上のことから、アルゴリズムとデータ構造の大事さが理解できたかと思います。入門編では、アルゴリズム→データ構造という順序で学習したのに対し、基本編での学習に際しては、データ構造→アルゴリズムの順序で行っていくこととします。なぜなら、特に高度なアルゴリズムほど、データ構造に大きく依存しているからです。したがって、このサイトでは、この順序で説明していくことにします。
データ構造
まずは、データ構造については、以下の流れで説明していくことにします。(表0-1)
| 種類 | 内容 |
|---|---|
| 線形データ構造 | リスト |
| 連想記憶(ハッシュテーブル、辞書、マップ) | |
| スタックとキュー | |
| グラフデータ構造 | ツリー構造 |
| ヒープ構造 |
アルゴリズム
続いて、アルゴリズムは以下の流れで説明していくことにします。(表0-2)
| 種類 | 内容 |
|---|---|
| 探索アルゴリズム | リニアサーチ |
| バイナリサーチ | |
| ソートアルゴリズム | バブルソート |
| 選択ソート | |
| 挿入ソート | |
| シェルソート | |
| バケットソート | |
| 分布数え上げソート | |
| 基数ソート | |
| マージソート | |
| ヒープソート | |
| クイックソート |








