まず パターン を鍛えよう。
それから LeetCode で練習 。
私たちは問題集ではありません。 問題を読む から 型が見える までの距離を、何時間から数分に縮めます — インタラクティブなアニメーションで 考え方そのものを教えます。文法ではなく。
ツー ポインタ
同じ列上を 2 つの添字が動いて不変条件を保つ — 収束、速い/遅い、スライディングウィンドウの 3 つ。
収束 · 速い/遅い · 窓
二分探索の バリエーション
境界条件はこの分野で最も解決されていない教育上の課題。
3 バリエーション · O(log n)
バックトラッキング
決定木の展開 — アニメーションで理解するのに最も適した構造。
分岐する状態機械
単調 スタック
スタックの状態遷移はコード上では見えないが、アニメーションでは劇的に見える — スタックが主役。
次に大きい要素 · ヒストグラム
グリッド上の BFS / DFS
キューは幅優先、スタックは深さ優先 — 同じアルゴリズム、2 つの順序。
キュー · スタック · 塗りつぶし
ヒープと 優先度付きキュー
極値(最小・最大)へ安価にアクセスでき、残りはゆるい半順序のまま。3 つのサブパターン:Top-K、2 本のヒープ、K 路マージ。
Top-K · 2 本のヒープ · K 路マージ
木の 走査
どの走査も各ノードを 1 回ずつ訪問する — 違うのは子の再帰に対するタイミングだけ。
前順 · 中順 · 後順 · 階層順
連結リストの その場操作
3 本のポインタ — prev、curr、next — があれば、末尾を失わずに連結リストをその場で書き換えられる。
反転 · マージ · 並び替え
動的 計画法
表が 1 マスずつ自身を埋めていき、各マスは定数個の以前のマスから合成される。7 つのサブパターン。
1 次元 · 2 次元 · ナップサック · 区間 · 状態機械 · 木 · ビットマスク
Union Find
N 要素を互いに素な成分に分割して保つ — 2 つの成分をほぼ定数時間でマージし、森はクエリのたびに自身を平坦化する。
連結成分 · O(α(N))
トライ
文字の木の上に文字列集合を格納する — 共通接頭辞を持つ単語はパスを共有し、「単語の終わり」フラグが格納済みの単語と途中の接頭辞を区別する。
接頭辞クエリ · 自動補完 · 単語探索
トポロジカル ソート
有向非巡回グラフを、すべての辺が左から右を向くように線形化する — 各ノードは前提がすべて去った後にのみ列に入る。
Kahn のアルゴリズム · O(V + E) · 循環検出
累積 和
最初に O(N) かけることで、以後の区間クエリはすべて O(1) に償却される — 逆に使えば、区間更新も安価にできる。4 つのサブパターン。
1 次元 · 2 次元 · 差分 · ハッシュ
最短 経路
始点から各ノードへの最短距離を求める — 仕組みは「辺が何を運ぶか」で分岐する。等コストは BFS、非負重みは Dijkstra、負を許すなら Bellman-Ford、全点対は Floyd-Warshall。
BFS · Dijkstra · Bellman-Ford · Floyd-Warshall
区間 マージ
始点でソートしてから線形に走査する — 各区間は現在のマージ区間を右に伸ばすか、それを確定して新しいマージを始めるかのどちらか。パターンの全体はこの 1 つの比較に収まる。
ソート + 線形走査 · O(N log N)
ビット 演算
整数を「値」ではなく「ビットの並び」として見る — 同じ数を XOR すれば 0 になり、0 を XOR すれば変わらない。難しいのは、問題の中に隠れたビットレベルの構造を見抜くこと。
XOR · ビットマスク · O(N)
巡回 ソート
値が [0, N] や [1, N] に収まるとき、添字がポインタになる — 家へスワップするか符号反転で印を付けるか。欠損 / 重複問題が O(N) 時間・O(1) 空間に。
添字をポインタとして · O(N)
スイープ ライン
各区間を始点 +1、終点 −1 の 2 イベントに分解し、位置でソートして走査する。実行中のアクティブ数が増減し — そのピークが「同時最大」型問題の答えになる。
端点イベント · 走行ピーク · O(N log N)
貪欲法
各ステップで局所最適を確定し、その確定が後で覆らないことを示す。バックトラックも DP テーブルも要らない。
区間スケジューリング · ジャンプゲーム · ガスステーション
セグメント 木
平衡二分木の各ノードに範囲の集約値を持たせる。任意の区間は既にノードとして存在する O(log N) 個の「正規分割片」に分解でき、区間クエリも点更新も O(log N)。
区間クエリ · 点更新 · O(log N)
Fenwick 木
最下位ビットで編む暗黙の木 — O(log N) の点更新と前缀和を 10 行で、木を割り当てる必要なし。
暗黙の木 · lowbit · O(log N)
文字列 マッチング
テキスト T 中のパターン P を O(N·M) ではなく O(N + M) で。3 つのサブパターンは事前計算するものだけが違う:失敗関数、ローリングハッシュ、Z 配列。
KMP · Rabin-Karp · Z アルゴリズム
行列
行列は 2 次元の座標空間。コツは歩く順序 — 転置+行反転、境界の内向き収縮、単調な角からの階段。
回転 · 螺旋 · 階段探索
数論
問題に潜む数論構造(割り切り、剰余、乗法)を見抜けば、O(N) のループは O(log N) や O(N log log N) へ縮む。
GCD · 冪剰余 · 素数篩
最小 全域木
重み付き無向グラフの全頂点を最も安く繋ぐ方法 — 辺はちょうど N−1 本、閉路なし、総重量最小。
Kruskal · Prim
キャッシュ 追い出し
容量固定のストアで get も put も O(1)。各方針は同じ問いへの違う答え:満杯のときどれを捨てるか?
LRU · LFU · O(1) get/put
単調 両端キュー
両端で別の仕事 —— 先頭は窓を過ぎた添字を追い出し、末尾は支配された値を落とす。先頭は常に窓の最大値、O(1) で読める。
スライディング最大値 · O(N)
双方向 BFS
ソースとターゲットから同時に BFS を走らせ、中央で出会う。両端点が既知のとき、最短路探索を O(b^d) から O(b^(d/2)) に縮める。
ミート・イン・ザ・ミドル · O(b^(d/2))
線形代数の 基礎記事
Transformer の図解を読む前に必要な最低限の線形代数 —— ベクトル、ドット積、行列積、コサイン類似度、ノルム、転置。9 個の短いトピックを視覚的に。
確率と統計の 基礎記事
LLM の訓練論文を読む前に必要な最低限の確率 —— 確率とは何か、分布、条件付き確率、期待値と分散、対数確率。5 つの短いトピック、文章中心。
微積分の 基礎記事
ディープラーニング論文を読む前に必要な最低限の微積分 —— 導関数、偏微分、連鎖律(= 逆伝播)、最適化を駆動する勾配。積分は扱わない。
データ 基礎記事
どんな ML パイプラインも避けて通れない最低限のデータ配管 —— サンプル、特徴と教師ラベル、訓練 / 検証 / テスト分割、ASCII / UTF-8(LLM が実際に食うバイト)、標準化とクリーニング。
教師あり学習の 基礎記事
ML 論文を読む前に必要な最低限の学習理論 —— 入力から出力への写像、損失関数、勾配ベースの最適化、過学習 vs 汎化、モデルを正気に保つ正則化。
勾配降下の 基礎記事
現代のあらゆるモデルを訓練するオプティマイザ —— 1 行の更新規則、最も調整されるハイパーパラメータ(学習率)、ミニバッチによる SGD、epoch / iteration / step の語彙、数百万回回るループ。
ニューラルネットの 基礎記事
あらゆる深層モデルの構成要素 —— 1 個のニューロン、非線形性を可能にする活性化関数、層(同じ入力を見るニューロンの列)、そして入力を全層に通す順伝播。
誤差逆伝播の 基礎記事
「各パラメータの勾配を計算する」を不可能から逆伝播 1 回まで安くしたアルゴリズム —— 連鎖律による誤差逆伝播、重みを全て 0 で初期化してはいけない理由、勾配消失 / 勾配爆発、そして Transformer の各ブロックに潜む MLP。
損失と安定性の 基礎記事
あらゆる深層学習論文が「当然知ってる」と前提する 4 つの道具 —— softmax(スコア → 分布)、cross-entropy(対をなす損失)、dropout(最も乱暴な正則化器)、そして BatchNorm / LayerNorm(活性のスケールを抑える層)。
LLM のテキスト 入門記事
なぜテキストは ML で最も難しいデータ型なのか —— 可変長、意味を反転させる順序、文脈に依存する各トークンの意味、そして Transformer 以前の「どれも一部しか解けなかった」アプローチの景色。Transformer が解こうとした問題そのもの。
RNN と LSTM の 基礎記事
Transformer 以前の歴史(スキップ可)—— トークンを 1 個ずつ処理する基本の RNN、勾配消失を解いたゲート付き LSTM / GRU、そして再帰時代を終わらせた 3 つの構造的勝利(並列性、長距離記憶、ボトルネックなし)。
ハードウェアとテンソルの 基礎記事
深層学習の物理層 —— なぜ GPU が仕事を食う(単純だが並列の数千コア)、なぜ VRAM が「どれだけ大きい LLM を動かせるか」の最も固い制約か、テンソルとは何か、そして batch / padding / mask が可変長テキストをどう GPU フレンドリーな矩形に詰めるか。
フレームワークと自動微分の 基礎記事
深層学習のソフトウェア層 —— PyTorch、JAX、TensorFlow の概観、自動微分(順伝播を書けば全勾配が無料で返ってくる)、そしてこの仕掛けを成立させる計算グラフ。
オプティマイザと訓練テクニックの 基礎記事
LLM 訓練の実用機構 —— SGD → Adam → AdamW(LLM 既定)、学習率スケジュール(warmup + コサイン減衰)、混合精度訓練(fp16 / bf16)、そして兆パラメータ訓練を可能にする 3 つの分散並列軸(data / tensor / pipeline)。
単語埋め込みの 基礎記事
テキスト → 数値:疎な one-hot から密な単語埋め込み(Word2Vec、GloVe)への旅、有名な king − man + woman ≈ queen のアナロジー、そして静的埋め込みでは依然足りない理由 —— 文脈がない。
トークン化の 基礎記事
テキストが LLM の入力になる過程 —— 文字 / 単語 / サブワードのトレードオフ、BPE(GPT が使うアルゴリズム)、WordPiece / SentencePiece / Unigram、そして現代 LLM の語彙が 5 万 – 20 万に収まる理由。
自己注意の 基礎記事
Transformer の中核機構 —— Query / Key / Value、スコア行列 Q · Kᵀ、√d_k と softmax を伴うスケール付き内積、value の加重和。完全な小例を、端から端まで。
多頭注意の 基礎記事
1 ヘッドでは足りない理由 —— 分割、並列、結合。Q/K/V を h ヘッドに分割し、各々が異なる関係を学び、最後に W_O 射影で各ヘッドの出力を混ぜ戻す。
位置エンコーディングの 基礎記事
自己注意は順序を知らない。Transformer は各トークンに位置情報を注入して解決する —— 正弦余弦パターン(元論文)、学習型埋め込み(GPT-2)、RoPE(現代の標準、Llama、Qwen、DeepSeek が採用)。
Transformer Block の 基礎記事
1 つの Transformer ブロックの完全な構造 —— LayerNorm / RMSNorm、残差接続、position-wise FFN —— と、N ブロックが完全なモデルへ積み上がる様子。AI 前提知識スタックの締めくくり。
Transformer 順伝播近日公開
プロンプトを最新の LLM に最初から最後まで通す —— トークン化、位置エンコード、アテンション、デコード、キャッシュで再利用。5 つの順序付きステージ、各々がパターン。
トークン化 · エンコード · アテンション · デコード · キャッシュ
二進数と数値の 基礎記事
プログラムが触れるあらゆるバイトはたった 8 ビット —— 整数は 2 の補数、浮動小数点は IEEE-754、メモリ配置はビッグエンディアン / リトルエンディアン。上のすべての層が前提とする土台。
CPU アーキテクチャの 基礎記事
1 つのコアの中身 —— レジスタ、ALU、制御ユニット、パイプライン、分岐予測、アウトオブオーダー実行。タイトなループがアセンブリから予想する 20 倍速い理由。
メモリ階層の 基礎記事
L1 キャッシュ(1 ns)とディスク(10 ms)の間には 6 桁の差。局所性の原理が、コードが速く感じるか遅く感じるかを 1 つで決める。
キャッシュ一貫性の 基礎記事
MESI がマルチコアのキャッシュを一致させる —— そして 1 本の 64 バイトキャッシュラインの上で起こる false sharing が、マルチスレッドのスループットを静かに半分にする。
アセンブリと ISA の 基礎記事
コンパイラが実際に吐くもの —— x86 vs ARM、レジスタ vs メモリ、syscall が特別な理由。あなたのコードとシリコンを繋ぐ薄い接着剤。
プロセスとスレッドの 基礎記事
プロセス = アドレス空間 + PCB、スレッド = その中で走れる文脈。ユーザモード vs カーネルモード、そして毎 syscall が支払う 1–2 マイクロ秒のコンテキストスイッチ。
CPU スケジューリングの 基礎記事
Linux CFS が次に走るプロセスをどう決めるか —— 仮想実行時間、nice 値、プリエンプション、リアルタイム方針。「レイテンシ敏感なタスクが枯れた」の答えはここにある。
仮想メモリの 基礎記事
ページテーブル、TLB、ページフォールト、mmap、コピーオンライト、スワップ。ポインタを一度デリファレンスするたびに、物理 RAM までは一回の翻訳が挟まる。
メモリ割り当ての 基礎記事
スタック vs ヒープ、malloc / free、断片化、jemalloc / tcmalloc / mimalloc。アロケータを替えるだけで、マルチスレッドサーバのスループットが倍になる理由。
システムコールと割り込みの 基礎記事
制御がユーザ / カーネルの境界を超える 2 つの道 —— あなたのコードが頼む(syscall)か、ハードウェアが要求する(割り込み)か。すべての I/O が依存する配管。
ファイルシステムの 基礎記事
inode、ディレクトリ、ジャーナリング、page cache、そして fsync の残酷な誠実さ。「書いた」と「クラッシュしても残る」は別の命題。
I/O モデルの 基礎記事
ブロッキング vs ノンブロッキング vs select / poll / epoll / kqueue / io_uring、それにゼロコピー。1K 接続と 1M 接続を分けるアーキテクチャ選択。
並行プリミティブの 基礎記事
ミューテックス、セマフォ、condvar、futex、アトミック、メモリオーダリング。ロックフリーもロックベースも、ここから組み上がる —— そして(メモリオーダリング)誰もが間違える 1 つ。
ネットワークスタックの 基礎記事
OSI の実用版:パケットがソケットを離れて NIC に届くまで —— イーサネットフレーム、IP ヘッダ、TCP / UDP セグメントが 14 + 20 + 20 バイトに包まれる。
TCP 詳解の 基礎記事
3-way ハンドシェイク、スライディングウィンドウ、輻輳制御(Reno → CUBIC → BBR)、TIME_WAIT、Nagle。「なぜ接続が遅い?」の答えはここのどこか。
DNS と HTTP の 基礎記事
ホスト名が IP になる仕組み、HTTP/1.1 vs HTTP/2 vs HTTP/3 (QUIC)、keep-alive、ヘッダ、body framing。Web スタック全部が座るアプリケーション層。
TLS とセキュリティの 基礎記事
TLS 1.3 ハンドシェイク、X.509 証明書、PKI の信頼チェーン、mTLS。緑の鍵アイコンが実際に何をしているか —— そして壊れたとき何が壊れているか。
ディスクストレージの 基礎記事
HDD のシークタイム vs SSD のランダム読み、IOPS vs スループット、書き込みアンプリフィケーション、RAID レベル。あらゆるデータベースの下に座る物理学。
データベースストレージの 基礎記事
B-tree(Postgres / MySQL)vs LSM-tree(RocksDB / Cassandra)、WAL、ページ管理、バッファプール。書き込みスループットと読み出しレイテンシを決める 2 種のデータ構造。
トランザクションの 基礎記事
ACID、4 つの分離レベルが実際に防ぐもの、MVCC、2 相コミット。違うデータベースが「整合的」と言うとき、まったく違うことを意味する理由。
Web リクエスト全経路の 基礎記事
1 回の `curl https://api.example.com/user/42` を端から端まで追う —— キー入力、システムコール、TCP、TLS、DNS、カーネルスケジューラ、page cache、B-tree 探索、そして帰路。本スタックすべての primer を呼び出す締めくくり。