コンテンツにスキップ

4-4. アルゴリズムとデータ構造入門

  • アルゴリズムとデータ構造の違い
  • 配列(Array)とハッシュの基本的な役割
  • 並べ替え(ソート)の考え方
  • データの持ち方が、後の処理の書きやすさにどう影響するか

1. アルゴリズムとデータ構造とは何か

Section titled “1. アルゴリズムとデータ構造とは何か”

アルゴリズムとは、問題を解くための手順である。
データ構造とは、データをどのような形で持つか、という考え方である。

データ構造 = データの持ち方
アルゴリズム = データの扱い方

たとえば「本の一覧を価格順に並べる」なら、

  • 本をどの形で持つか → データ構造
  • どういう手順で並べるか → アルゴリズム

という分担になる。

手順がよくても、データの持ち方が不便だと扱いにくい。
逆に、データの持ち方がよくても、手順が曖昧だと正しく処理できない。

実務ではこの 2 つがセットで登場する。


この節の実行例では、JavaScript の Array を使う。
厳密には配列リストは別のデータ構造だが、この段階ではまず「順序付きデータを扱う代表例」として配列を中心に学ぶ。

配列は、順序を持つデータの集まりを扱うときの基本である。

JavaScript では、まず Array を使って順序付きデータを扱うことが多い。

const numbers = [10, 20, 30];
console.log(numbers[0]);
index: 0 1 2
┌────┬────┬────┐
value: │ 10 │ 20 │ 30 │
└────┴────┴────┘
  • 入れた順番を保ちたい
  • 先頭から順に見ていきたい
  • 同じ種類のデータをまとめて処理したい

たとえば商品一覧、メッセージ一覧、テストの点数一覧などでよく使う。


ハッシュは、キーを使って素早く値を取り出したいときに役立つ考え方である。

JavaScript では、まずオブジェクトや Map を使って似たことを表現できる。

const userById = {
1: "Sato",
2: "Suzuki",
3: "Tanaka",
};
console.log(userById[2]);
key 1 → "Sato"
key 2 → "Suzuki"
key 3 → "Tanaka"
  • ID から対象をすぐ取り出したい
  • 名前から件数を数えたい
  • 設定値をキーで管理したい

配列は「何番目か」で取り出すのが得意で、ハッシュは「このキーは何か」で取り出すのが得意だと考えると分かりやすい。


ソートとは、データを一定の規則で並べ替えることである。

たとえば次のような並び替えがある。

  • 価格が安い順
  • 名前の昇順
  • 作成日の新しい順
ソート前: 3000, 1200, 2500
ソート後: 1200, 2500, 3000

ソートすると、人にもプログラムにも扱いやすくなる。

  • 最小値や最大値を見つけやすい
  • 一覧が読みやすい
  • 次の処理を組み立てやすい

JavaScript では sort() が使えるが、その裏では「どの値をどの順に並べるか」というアルゴリズムが動いている。


5. データ構造の選び方が大事な理由

Section titled “5. データ構造の選び方が大事な理由”

同じデータでも、持ち方によって後のコードが変わる。

順番を保って一覧表示したい
→ 配列が向いている
ID ですぐ本を探したい
→ ハッシュが向いている

もし「ID ですぐ探したい」のに配列だけを使うと、先頭から順に見ていく必要がある。
データが少なければ問題になりにくいが、量が増えると処理しづらくなる。

つまりデータ構造の選択は、あとで書くアルゴリズムの書きやすさや速さに影響する。


6. 配列・ハッシュ・ソートを一緒に使う例

Section titled “6. 配列・ハッシュ・ソートを一緒に使う例”
const books = [
{ id: 3, title: "Network", price: 2800 },
{ id: 1, title: "Git", price: 2200 },
{ id: 2, title: "JavaScript", price: 3200 },
];
const byId = {};
for (const book of books) {
byId[book.id] = book;
}
books.sort((a, b) => a.price - b.price);

この例では、

  • books は順序付きの一覧として配列を使っている
  • byId は ID 検索のためにハッシュ的な形を使っている
  • sort() で価格順に並べ替えている

つまり 1 つのシステムの中でも、目的に応じて複数の持ち方や手順を使い分ける。


アルゴリズムとデータ構造は別物

Section titled “アルゴリズムとデータ構造は別物”

「配列」はデータ構造、「並べ替え」はアルゴリズムである。
よく一緒に使うが、役割は異なる。

配列とハッシュは競合ではなく使い分け

Section titled “配列とハッシュは競合ではなく使い分け”

どちらが優れているかではなく、何をしたいかで選ぶ。

ソートは見た目だけの問題ではない

Section titled “ソートは見た目だけの問題ではない”

並びが整うと、人間が読みやすいだけでなく、後の処理も組み立てやすくなる。


キーワード説明
アルゴリズム問題を解くための手順
データ構造データの持ち方
配列(Array)順序付きデータを扱う構造
ハッシュキーから値を取り出しやすい構造
キー値を取り出すための識別子
ソート一定の規則で並べ替えること

演習問題 に取り組んで理解を確認しよう。

第4章を終えたら、第5章:データベース基礎へ進もう。(準備中)