Chaba Content Site

DSA学習ノート

データ構造とアルゴリズム学習ノート 📝

プログラミングでつまずいたところ、理解できた瞬間、「あ、そういうことか!」と思ったことをまとめています。

学習リスト

基本から始めた部分

  1. 配列 (Arrays)

  2. 連結リスト (Linked Lists)

    • ポインタで混乱した経験
    • 図を描いたら理解できた
    • どういう時に配列より便利か
  3. 再帰 (Recursion)

    • 最初は本当に理解できなかった
    • スタックオーバーフローを経験して学んだこと
    • 再帰を使うとエレガントに書ける問題

ソートと探索(よく面接で聞かれる)

  1. ソート (Sorting)

    • バブルソートから始めて、なぜ遅いか理解した
    • クイックソートの分割統治が美しいと思った瞬間
    • 実務でどのソートを使うべきか
  2. 二分探索 (Binary Search)

    • off-by-oneエラーとの戦い
    • while (left <= right) vs while (left < right) の違い
    • 実際に使える場面が意外と多い

ちょっと難しくなってきた部分

  1. 木構造 (Trees)

    • 再帰との相性の良さに気づいた
    • バランス木の必要性を実感した話
    • 実装は大変だけど理解すると楽しい
  2. ヒープ (Heap)

    • 配列で木を表現できることに驚いた
    • 優先度付きキューの便利さ
    • ヒープソートの仕組み
  3. ハッシュ (Hashing)

    • O(1)の魔法
    • 衝突処理で悩んだ話
    • 良いハッシュ関数とは何か

頭を使う系のアルゴリズム

  1. バックトラッキング (Backtracking)

    • 全探索との違いがわからなかった
    • 枝刈りの重要性
    • パズルを解くのが楽しくなった
  2. グラフ (Graphs)

    • 現実世界の問題に一番近い
    • DFSとBFSの使い分け
    • ダイクストラ法を理解した時の感動
  3. 動的計画法 (Dynamic Programming)

    • 最初は本当に難しかった
    • 部分問題への分解がキーだと気づいた
    • メモ化から始めるとわかりやすい
  4. ビット操作 (Bit Manipulation)

    • 黒魔術だと思ってた
    • XORの便利さに気づいた
    • 高速化できるとかっこいい

私の学習方法メモ

このノートは学習しながら更新していきます