4-4. アルゴリズムとデータ構造入門
このセクションで学ぶこと
Section titled “このセクションで学ぶこと”- アルゴリズムとデータ構造の違い
- 配列(Array)とハッシュの基本的な役割
- 並べ替え(ソート)の考え方
- データの持ち方が、後の処理の書きやすさにどう影響するか
1. アルゴリズムとデータ構造とは何か
Section titled “1. アルゴリズムとデータ構造とは何か”アルゴリズムとは、問題を解くための手順である。
データ構造とは、データをどのような形で持つか、という考え方である。
データ構造 = データの持ち方アルゴリズム = データの扱い方たとえば「本の一覧を価格順に並べる」なら、
- 本をどの形で持つか → データ構造
- どういう手順で並べるか → アルゴリズム
という分担になる。
なぜ両方が必要なのか
Section titled “なぜ両方が必要なのか”手順がよくても、データの持ち方が不便だと扱いにくい。
逆に、データの持ち方がよくても、手順が曖昧だと正しく処理できない。
実務ではこの 2 つがセットで登場する。
2. 配列(Array)
Section titled “2. 配列(Array)”この節の実行例では、JavaScript の Array を使う。
厳密には配列とリストは別のデータ構造だが、この段階ではまず「順序付きデータを扱う代表例」として配列を中心に学ぶ。
配列は、順序を持つデータの集まりを扱うときの基本である。
JavaScript では、まず Array を使って順序付きデータを扱うことが多い。
const numbers = [10, 20, 30];console.log(numbers[0]);index: 0 1 2 ┌────┬────┬────┐value: │ 10 │ 20 │ 30 │ └────┴────┴────┘配列が向いている場面
Section titled “配列が向いている場面”- 入れた順番を保ちたい
- 先頭から順に見ていきたい
- 同じ種類のデータをまとめて処理したい
たとえば商品一覧、メッセージ一覧、テストの点数一覧などでよく使う。
3. ハッシュとは何か
Section titled “3. ハッシュとは何か”ハッシュは、キーを使って素早く値を取り出したいときに役立つ考え方である。
JavaScript では、まずオブジェクトや Map を使って似たことを表現できる。
const userById = { 1: "Sato", 2: "Suzuki", 3: "Tanaka",};
console.log(userById[2]);key 1 → "Sato"key 2 → "Suzuki"key 3 → "Tanaka"どんなときに便利か
Section titled “どんなときに便利か”- ID から対象をすぐ取り出したい
- 名前から件数を数えたい
- 設定値をキーで管理したい
配列は「何番目か」で取り出すのが得意で、ハッシュは「このキーは何か」で取り出すのが得意だと考えると分かりやすい。
4. ソートとは何か
Section titled “4. ソートとは何か”ソートとは、データを一定の規則で並べ替えることである。
たとえば次のような並び替えがある。
- 価格が安い順
- 名前の昇順
- 作成日の新しい順
ソート前: 3000, 1200, 2500ソート後: 1200, 2500, 3000なぜソートが必要なのか
Section titled “なぜソートが必要なのか”ソートすると、人にもプログラムにも扱いやすくなる。
- 最小値や最大値を見つけやすい
- 一覧が読みやすい
- 次の処理を組み立てやすい
JavaScript では sort() が使えるが、その裏では「どの値をどの順に並べるか」というアルゴリズムが動いている。
5. データ構造の選び方が大事な理由
Section titled “5. データ構造の選び方が大事な理由”同じデータでも、持ち方によって後のコードが変わる。
例:本を管理する場合
Section titled “例:本を管理する場合”順番を保って一覧表示したい → 配列が向いている
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 つのシステムの中でも、目的に応じて複数の持ち方や手順を使い分ける。
7. 初学者が混同しやすい点
Section titled “7. 初学者が混同しやすい点”アルゴリズムとデータ構造は別物
Section titled “アルゴリズムとデータ構造は別物”「配列」はデータ構造、「並べ替え」はアルゴリズムである。
よく一緒に使うが、役割は異なる。
配列とハッシュは競合ではなく使い分け
Section titled “配列とハッシュは競合ではなく使い分け”どちらが優れているかではなく、何をしたいかで選ぶ。
ソートは見た目だけの問題ではない
Section titled “ソートは見た目だけの問題ではない”並びが整うと、人間が読みやすいだけでなく、後の処理も組み立てやすくなる。
| キーワード | 説明 |
|---|---|
| アルゴリズム | 問題を解くための手順 |
| データ構造 | データの持ち方 |
| 配列(Array) | 順序付きデータを扱う構造 |
| ハッシュ | キーから値を取り出しやすい構造 |
| キー | 値を取り出すための識別子 |
| ソート | 一定の規則で並べ替えること |
次のステップ
Section titled “次のステップ”演習問題 に取り組んで理解を確認しよう。
第4章を終えたら、第5章:データベース基礎へ進もう。(準備中)