【エンジニアになりたい人必見!】データ構造とアルゴリズム
今回は、データ構造とアルゴリズムについてまとめました。
エンジニアになりたい方に、欠かせない内容となっています。
ぜひ最後までお読みください!
1. データ構造とは
データ構造とは、データの集まりをコンピュータプログラムで扱いやすいように「一定の形式で格納したもの」です。
何かを文字や符号、数値などのまとまりとして表現したものを「データ」といいます。
データはコンピュータの主記憶装置(メインメモリ)に保存されます。
データ構造にはいくつかの種類があり、目的に対して適切なデータ構造を選択できるかどうかで、プログラムの複雑さや処理性能に大きな差がつくことがあります。
2. データ構造の種類
データ構造の種類は、以下のとおりです。
1.スタック
2.キュー
3.配列
4.連結リスト
5.木構造(ツリー構造)
1つずつ順番に解説していきます。
2-1. スタック
スタックとは、データを1列に並べて、「最後」に格納したデータを「最初」に取り出すデータ構造のことです。途中にあるデータを取り出すことはできません。
このようなデータ構造を「LIFO(Last in First Out / 後入れ先出し)」といいます。
スタックは、「机の上に積み上げられた本」と同じような仕組みです。
本は上に上にと積み上げられていき、読みたい本は上から順番に取っていかなければならないからです。
2-2. キュー
キューとは、データを1列に並べて、「最初」に格納したデータを「最初」に取り出すデータ構造のことです。列の途中にデータを挿入することはできません。
このようなデータ構造を「FIFO(First in First Out / 先入れ先出し)」といいます。
キューは、「順番を待つ人の行列」と同じ仕組みであるため「待ち行列」ともよばれます。
2-3. 配列
配列は、複数のデータを連続的に並べたデータ構造のことです。
1つ1つのデータを「要素」といい、要素の位置をあらわす数字を「インデックス(添字)」といいます。
配列は、ほとんどのプログラミング言語に存在する最も基本的なデータ構造の一つです。
配列には「1次元配列」や「2次元配列」などがあります。
2-4. 連結リスト
連結リストは、データを数珠つなぎに並べたデータ構造のことです。
配列と同じく、1つ1つのデータを「要素」といいます。
要素は、「ポインタ」とよばれる次の要素への参照情報をもちます。
連結リストには、以下の種類があります。
・単方向リスト
・双方向リスト
・線形リスト
・環状リスト
配列と連結リストの違い
配列と連結リストの違いは、以下のとおりです。
・配列:参照、更新が速い
・連結リスト:挿入、削除が速い
2-5. 木構造(ツリー構造)
木構造とは、一つの要素が複数の子要素を持ち、子要素が複数の孫要素を持ち、というように「階層が深くなるほど枝分かれしていく」構造のことです。
ツリー構造ともよばれます。
親要素が0〜2個の木構造を「2分木」といい、親要素が0〜3個の木構造を「3分木」といいます。
3. アルゴリズムとは
アルゴリズムとは、問題を解決したり目標を達成したりするための「計算方法」や「処理方法」のことです。
アルゴリズムは、以下のような方法で表現できます。
・文字(文章)による表現
・図(流れ図/フローチャート)による表現
・関数(数式)による表現
・プログラム言語による表現
1つずつ順番に解説していきます。
3-1. 文字(文章)による表現
文字(文章)による表現では、プログラムを文字(文章)であらわします。
例) 手順1. A < 10 なら手順2へ進み、A >= 10 なら手順3に進む
3-2. 図(流れ図/フローチャート)による表現
図(流れ図/フローチャート)による表現では、プログラムを図(流れ図/フローチャート)であらわします。
流れ図(フローチャート)では、「長方形(処理をあらわす)」や「ひし形(条件分岐をあらわす)」などの記号を使用します。
使用する記号は「JIS(日本産業規格)」によって統一されています。
3-3. 関数(数式)による表現
関数(数式)による表現では、プログラムを関数(数式)であらわします。
関数とは、複数の処理をひとまとめにしたもののことです。
3-4. プログラム言語による表現
プログラム言語による表現では、プログラムをプログラム言語を使ってあらわします。
例) if A < 10 return B
4. アルゴリズムの種類
アルゴリズムには、以下のような種類があります。
・整列(ソート)アルゴリズム
・探索アルゴリズム
・再帰的アルゴリズム
1つずつ順番に解説していきます。
4-1. 整列(ソート)アルゴリズム
整列アルゴリズムとは、データを「特定の順番に並べる」アルゴリズムのことです。
ソートアルゴリズムともよばれます。
整列アルゴリズムには、以下のような種類があります。
・バブルソート
・選択ソート
・挿入ソート
・クイックソート
1つずつ順番に見ていきましょう。
バブルソート
バブルソートは、隣同士のデータを比較し、順序が間違っていたら交換することを繰り返すアルゴリズムのことです。
選択ソート
選択ソートは、データを比較して最小値を選択し、選択した最小値を先頭のデータと交換することを繰り返すアルゴリズムのことです。
バブルソートの改良版ともいえます。
挿入ソート
挿入ソートは、未整列のデータから1つずつ数値を確認し、整列済みの列の適切な位置に挿入していくアルゴリズムのことです。
クイックソート
クイックソートは、「基準値より大きいグループ」と「基準値より小さいグループ」の2つにデータを分け、分けたグループに対しても同じようにグループ分けをおこなうアルゴリズムのことです。
4-2. 探索アルゴリズム
探索アルゴリズムとは、与えられた複数のデータの中から条件に合った特定のデータを見つけ出すアルゴリズムのことです。
探索アルゴリズムには、以下のような種類があります。
・線形探索法
・ハッシュ法
・2分探索法
1つずつ順番に見ていきましょう。
線形探索法
線形探索法とは、データを先頭から順番に比較していきながら、目的のデータと一致しているかどうかを確認していくアルゴリズムのことです。
ハッシュ法
ハッシュ法とは、ハッシュ表とよばれる配列を使用して、目的のデータを探し出すアルゴリズムのことです。
2分探索法
2分探索法とは、調べる範囲を2つに分割することで、目的のデータを探し出すアルゴリズムのことです。
4-3. 再帰的アルゴリズム
再帰的アルゴリズムとは、処理の途中で「自分自身を呼び出す」アルゴリズムのことです。
「再帰」には、「繰り返し」という意味があります。
5. おわりに
今回は、データ構造とアルゴリズムについて解説しました。
データ構造とアルゴリズムはとても難しいですが、理解できるとエンジニアとして確実にスキルアップできるでしょう。
「もっと知りたい!」という方は、ぜひ参考記事を読んだり、ご自身で調べてみたりしてください。
参考記事
https://www.youtube.com/watch?v=TEe0bzycD7c&list=PLsTAEhSYnkGaHi6Ng2CaOPcRsR2KQr3Sg