基本的なデータ構造構造とアルゴリズムを学ぶのはプログラマーの第一歩です。
プログラマー、システムエンジニアのまず初めに取得を目指す基本情報技術者試験でもデータ構造とアルゴリズムが出題範囲であり、午前、午後どちらにも出題されます。
試験対策だけならテキストの問題を解くだけで十分ですが、理解してプログラムを組めるようにした方が成長への近道になります。
プログラマを組んで覚えていきましょう!
基本的なアルゴリズム
アルゴリズムとは
JIS X0001では、アルゴリズムとは「問題を解くものであって、明確に定義され、順序付けられた有限個の規則からなる集合。」と定義されています。
簡単に言うと、単純な計算や操作を複数個組み合わせて問題を解決するための効率的な方法や手段のことです。
整数の集まりから最大値を求めるプログラム、while文やfor文で繰り返し、合計値を求めるプログラムなども簡単であるが基本的なアルゴリズムです。
基本的なデータ構造
データ構造とは
JIS X0015 03.01ではデータ構造は「データ単位とデータ自身とのあいだの物理的または論理的な関係。」と定義されています。
簡単に言うと、データの集まりをコンピュータで扱いしやすくするために並び替えたりして、ある決まった形式で格納したもののことです。
配列の構成要素の大きさを昇順、降順に並び替えたりしてのちの処理を簡単にすることが出来ます。
テストに良く出るアルゴリズム
ここでは、大学のテストや基本情報技術者試験で良く出題されるアルゴリズムの紹介を軽く紹介します。
2分探索
2分探索は、昇順(または降順)に並び替えられたデータの真ん中にある要素と取り出したい要素の大小関係を比較して大きいなら中央の数値より大きい方数字が並んでいるのブロックの中央値を再び抽出して比較を繰り返す。
取り出したい要素が中央より小さい数値なら、中央の数値より小さい方数字が並んでいるのブロックの中央値を再び抽出して比較を繰り返します。
この繰り返しで、取り出したい要素を絞り込みます。
ハッシュ法
探索だけでなく追加・削除も効率よく行うのがハッシュ法です。
簡単な計算で算出した(例えば13で割った剰余)ハッシュ値を用いてデータ本体の代わりに比較に用いります。データが長いほど効率化出来ます。
バブルソート
バブルソートは単純交換ソートとも呼び、名前の通り、単純に交換を行います。具体的には隣り合う要素を1つ1つ比較して昇順、降順に並び替えます。
昇順だと軽い(数字が低い)順に浮き上がってくるように見えるので、液体中の気泡のようなので、バブルソートと呼びます。
ヒープソート
ヒープソートはヒープを用いてソートを行うアルゴリズムです。
ヒープとは、親の値が子の値以上であるという条件を満たす完全2分木です。
テストによく出るデータ構造
次に同じく、大学のテストや基本情報技術者試験で良く出題されるデータ構造の紹介を軽く紹介します。
スタックとキュー
スタックとキューと同時に簡単に説明します。
どちらもデータを一時的に蓄えるデータ構造で、スタックは後入れ先出(最後に入ったものから一番先に出す)、キューは先入れ先出し(入った順に出す)です。
スタックはデータを入れることをプッシュ、出すことをポップと言います。
キューはデータを入れることをエンキュー、出すことをデキューと言います。
木構造
木構造は階層的な関係を表現するデータ構造です。木の形をしているので木構造と呼ばれています。
ここでは紹介のみに留めておきますが、2分木などテストによく出てくるのでしっかり学習しておきましょう。
後日この木構造については別ページで解説します。
まとめ
全て細かく解説すると長くなってしまうので、紹介のみにしましたがどれも重要であるのでしっかり勉強して覚えることをお勧めします。学生なら早い段階で覚えてしまうとその後の単位取得に有利になります。(よく出てくる上に高配点のことが多い)
また、今回の内容は柴田望洋氏の新明解javaで学ぶアルゴリズムとデータ構造に詳しく載っており、お勧めの1冊です!
新・明解 Javaで学ぶアルゴリズムとデータ構造 [ 柴田 望洋 ] 価格:2,640円 |
javaを学習してなくてもC言語などの他言語を学習していればこの1冊で十分ですが、初めての言語学習がjavaから始める方は少し難しいかもしれないです。
これからjavaを学習する方は同氏の新明解java入門をお勧めします!
価格:2,970円 |
分かりやすく丁寧に解説、プログラムが書いています。
以上が、アルゴリズムとデータ構造についての簡単な紹介でした。