Skip to content

Commit 66fa8d4

Browse files
committed
docs: correct Pascal's Triangle complexity analysis and sync initialization state; update index generator with auto-gen marker
1 parent 3918c25 commit 66fa8d4

5 files changed

Lines changed: 12 additions & 8 deletions

File tree

Algorithm/Other/leetcode/118. Pascal's Triangle/claude sonnet 4.6 adaptive/Pascal's_Triangle_Python.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,12 @@
6969
| ----------------------------- | ---------- | ---------- | ---------------- | ------ | ------------------ | -------------- | ---------------------------------------------------------------------- |
7070
| **A. 逐次行構築(今回選択)** | O(n²) | O(n²) || ★★★ | list のみ | 適(内包表記) | 直感的で最もシンプル |
7171
| B. 二項係数で直接計算 | O(n²) | O(n²) || ★★☆ | math.comb || 大きな整数で精度は問題なし(Pythonは多倍長整数)。ただし実装がやや難解 |
72-
| C. 再帰(メモ化なし) | O(n³) | O(n²) || ★☆☆ | なし | 不適 | 同じ値を何度も再計算。`@lru_cache` 追加で改善できるが過剰 |
72+
| C. 再帰(メモ化なし) | 最悪で指数的/再帰定義で変化 | O(n²) || ★☆☆ | なし | 不適 | 同じ値を何度も再計算。`@lru_cache` 追加で改善できるが過剰 |
7373

7474
**選択理由****方法A(逐次行構築)** を選びます。
7575

7676
- **方法Bを選ばなかった理由**`math.comb(n, k)` で計算は可能ですが、「前行を使って次行を作る」というパスカルの三角形の本質的なルールを直接コードで表現できる方法Aの方が可読性・保守性に優れています
77-
- **方法Cを選ばなかった理由**:再帰は呼び出しスタック(=関数呼び出しを記録する領域)を消費し、O(n³) と最も遅く、この問題には適しません
77+
- **方法Cを選ばなかった理由**:再帰は呼び出しスタック(=関数呼び出しを記録する領域)を消費し、計算量も非効率(再帰定義に依存し、指数的になることがある)で、この問題には適しません
7878
- **Python最適化戦略**:各行の内側をリスト内包表記で一括生成することで、CPythonの内包表記最適化の恩恵を受けます
7979

8080
> 📖 **このセクションで登場した用語**

Algorithm/Other/leetcode/118. Pascal's Triangle/claude sonnet 4.6 adaptive/Pascal's_Triangle_Typescript.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
| ----------------------------- | ---------- | ---------- | ------------ | -------- | ------ | --------------------------------------------------------- |
6767
| **A. 逐次行構築(今回選択)** | O(n²) | O(n²) |||| 前の行だけ見て次の行を作る |
6868
| B. 二項係数で直接計算 | O(n²) | O(n²) |||| C(n,k)公式を使う。大きいnで整数オーバーフローのリスクあり |
69-
| C. 再帰(メモ化なし) | O(n³) | O(n²) |||| 同じ値を何度も再計算するため遅い |
69+
| C. 再帰(メモ化なし) | 最悪で指数的/再帰定義で変化 | O(n²) |||| 同じ値を何度も再計算するため非効率 |
7070

7171
> 💡 **Big-O記法の読み方**(初学者向け)
7272
>
@@ -86,7 +86,7 @@
8686
- **選択したアプローチ**: **A. 逐次行構築(イテレーティブ=繰り返し処理による方法)**
8787
- **理由**:
8888
- **方法Bを選ばなかった理由**:二項係数は数式で一見エレガントですが、`numRows=30`のとき `30!`(30の階乗)という非常に大きな数を扱う必要があり、JavaScriptのNumber型(=浮動小数点数)で精度が落ちるリスクがあります
89-
- **方法Cを選ばなかった理由**:再帰は同じ値を何度も計算し直すため、O(n³) と最も遅く、この問題には不向きです
89+
- **方法Cを選ばなかった理由**:再帰は同じ値を何度も計算し直すため、最悪時指数時間となる可能性があり、この問題には不向きです
9090
- **方法Aを選んだ理由**:前の行だけを参照して次の行を作る「積み上げ式」のため、計算の無駄がなく、コードの流れも人間の直感と一致していて読みやすいです
9191

9292
- **TypeScript特有の最適化ポイント**:

Algorithm/Other/leetcode/118. Pascal's Triangle/claude sonnet 4.6 adaptive/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ flowchart TD
9797
Start[Start generate numRows]
9898
Start --> Validate{Valid input?}
9999
Validate -- No --> Err[Raise TypeError or ValueError]
100-
Validate -- Yes --> Init[Init triangle with row0 = 1]
100+
Validate -- Yes --> Init[Init empty triangle]
101101
Init --> Loop{row_index < numRows?}
102102
Loop -- No --> Return[Return triangle]
103103
Loop -- Yes --> BuildRow[Build current row]
@@ -116,8 +116,8 @@ flowchart TD
116116

117117
- `Start``generate(numRows)` の呼び出し入口
118118
- `Validate`(ひし形):型チェックと範囲チェック。不正な入力をここで弾く
119-
- `Init`:結果リストを `[[1]]`(1 行目)で初期化する
120-
- `Loop`(ひし形):`row_index` `numRows` に達するまで繰り返す終了条件の判定
119+
- `Init`:結果リストを `[]`(空リスト)で初期化する
120+
- `Loop`(ひし形):`row_index`(0 から開始)`numRows` に達するまで繰り返す終了条件の判定
121121
- `BuildRow``_build_row()` ヘルパーを呼び出す
122122
- `IsSmall`(ひし形):0 行目・1 行目は特殊処理(内側の要素がない)
123123
- `Inner`:リスト内包表記で `prev[col-1] + prev[col]` を計算
@@ -172,7 +172,7 @@ graph LR
172172

173173
**主要な流れの説明:**
174174

175-
- `Input → Row0`:最初の行 `[1]` は固定値なので計算不要
175+
- `Input → Row0`:最初の行 `[1]` は空の `triangle` に対して `row_index=0` で生成される
176176
- `Rowi → prev`:前の行がそのまま次の行の計算材料(`prev`)になる
177177
- `prev → inner`:隣り合う要素の和を内包表記で一括計算
178178
- `inner → rowi``[1] + inner + [1]` で両端を追加して行を完成させる

generate_index.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,8 @@ def generate_index(self) -> None:
243243
<html lang="ja">
244244
<head>
245245
<meta charset="UTF-8">
246+
<meta name="generator" content="generate_index.py">
247+
<!-- AUTO_GENERATED: DO NOT EDIT THIS FILE DIRECTLY. USE generate_index.py TO REGENERATE. -->
246248
<meta name="viewport" content="width=device-width, initial-scale=1.0">
247249
<title>Algorithm Study Lab</title>
248250
<link rel="preconnect" href="https://fonts.googleapis.com">

public/index.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<html lang="ja">
33
<head>
44
<meta charset="UTF-8">
5+
<meta name="generator" content="generate_index.py">
6+
<!-- AUTO_GENERATED: DO NOT EDIT THIS FILE DIRECTLY. USE generate_index.py TO REGENERATE. -->
57
<meta name="viewport" content="width=device-width, initial-scale=1.0">
68
<title>Algorithm Study Lab</title>
79
<link rel="preconnect" href="https://fonts.googleapis.com">

0 commit comments

Comments
 (0)