Re-translate the Japanese version (#1871)

* Retranslate Japanese docs with GPT-5.4

* Retranslate Japanese code with GPT-5.4
This commit is contained in:
Yudong Jin
2026-03-30 07:30:15 +08:00
committed by GitHub
parent fe6443235b
commit d7b2277d2b
1444 changed files with 83312 additions and 8363 deletions
@@ -1,34 +1,34 @@
# ハッシュ最適化戦略
# ハッシュによる最適化戦略
アルゴリズム問題において、**線形探索をハッシュベースの探索に置き換えることでアルゴリズムの時間計算量を削減することがよくあります**。アルゴリズム問題を使用して理解を深めましょう。
アルゴリズム問題では,**線形探索をハッシュ探索に置き換えることでアルゴリズムの時間計算量を下げることがよくあります**。ここでは,あるアルゴリズム問題を通じて理解を深めましょう。
!!! question
整数配列`nums`と目標要素`target`が与えられ、配列内で「和」が`target`に等しい2つの要素を探索しそれらの配列インデックスを返してください。任意の解が受け入れられます。
整数配列 `nums` と目標要素 `target` が与えられたとき,配列内から和が `target` となる 2 つの要素を探索しそれらの配列インデックスを返してください。任意の 1 つの解を返せば十分です。
## 線形探索:時間を空間と交換
## 線形探索:時間と引き換えに空間を節約
すべての可能な組み合わせを直接横断することを考えてみます。図に示すように、ネストしたループを開始し、各反復で2つの整数の和が`target`に等しいかどうかを判します。そうであればそれらのインデックスを返します。
考えられるすべての組み合わせを直接走査することを考えます。次の図に示すように2 重ループを開始し,各ラウンドで 2 つの整数の和が `target` であるかを判します。そうであればそれらのインデックスを返します。
![Linear search solution for two-sum problem](replace_linear_by_hashing.assets/two_sum_brute_force.png)
![線形探索で 2 数の和を求める](replace_linear_by_hashing.assets/two_sum_brute_force.png)
コードは以下の通りです:
コードは次のとおりです:
```src
[file]{two_sum}-[class]{}-[func]{two_sum_brute_force}
```
この方法の時間計算量は$O(n^2)$空間計算量は$O(1)$で、大容量データでは非常に時間がかかる可能性があります。
この方法の時間計算量は $O(n^2)$ 空間計算量は $O(1)$ であり,大規模データでは非常に時間がかかります。
## ハッシュ探索:空間を時間と交換
## ハッシュ探索:空間と引き換えに時間を節約
ハッシュテーブルの使用を考えてみましょう。キーと値のペアはそれぞれ配列要素とのインデックスす。配列をループし、各反復中に下図に示すステップを実行します。
ハッシュテーブルを利用し,キーと値をそれぞれ配列要素と要素のインデックスにします。配列をループで走査し,各ラウンドで次の図に示す手順を実行します。
1. 数値`target - nums[i]`がハッシュテーブルにあるかどうかを確認します。ある場合は、これら2つの要素のインデックスを直接返します。
2. キーと値のペア`nums[i]`とインデックス`i`をハッシュテーブルに追加します。
1. 数値 `target - nums[i]` がハッシュテーブルにあるかを判定します。あれば,この 2 つの要素のインデックスを直接返します。
2. キーと値の`nums[i]` とインデックス `i` をハッシュテーブルに追加します。
=== "<1>"
![Help hash table solve two-sum](replace_linear_by_hashing.assets/two_sum_hashtable_step1.png)
![補助ハッシュテーブルで 2 数の和を求める](replace_linear_by_hashing.assets/two_sum_hashtable_step1.png)
=== "<2>"
![two_sum_hashtable_step2](replace_linear_by_hashing.assets/two_sum_hashtable_step2.png)
@@ -36,12 +36,12 @@
=== "<3>"
![two_sum_hashtable_step3](replace_linear_by_hashing.assets/two_sum_hashtable_step3.png)
実装コードは以下に示され、単一ループのみが必要です:
実装コードは次のとおりで,単一ループだけで済みます:
```src
[file]{two_sum}-[class]{}-[func]{two_sum_hash_table}
```
この方法はハッシュ探索を使用することで時間計算量を$O(n^2)$から$O(n)$に削減し、実行効率を大幅に向上させます。
この方法はハッシュ探索によって時間計算量を $O(n^2)$ から $O(n)$ に下げ,実行効率を大幅に向上させます。
追加のハッシュテーブルを維持する必要があるため空間計算量は$O(n)$です。**それにもかかわらず、この方法は全体的により均衡のとれた時空間効率を持ち、この問題の最適解となります**。
追加のハッシュテーブルを維持する必要があるため空間計算量は $O(n)$ です。**それでも,この方法は全体として時間と空間効率のバランスがより良く,本問の最適解です**。