mirror of
https://github.com/krahets/hello-algo.git
synced 2026-08-15 05:00:59 +00:00
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:
@@ -1,25 +1,25 @@
|
||||
# 読み方
|
||||
# 本書の使い方
|
||||
|
||||
!!! tip
|
||||
|
||||
最良の読書体験のために、このセクションを通読することをお勧めします。
|
||||
最適な読書体験を得るために、本節の内容を一通り読むことをおすすめします。
|
||||
|
||||
## 記述規則
|
||||
## 文章スタイルの約束
|
||||
|
||||
- タイトルの後に「*」が付いた章は任意であり、比較的難易度の高い内容が含まれています。時間に制約がある場合は、これらをスキップすることをお勧めします。
|
||||
- 技術用語は太字(印刷版およびPDF版)または下線(Web版)で表示されます。例えば、<u>配列</u>などです。技術文書をより良く理解するために、これらに慣れることをお勧めします。
|
||||
- **太字のテキスト**は重要な内容や要約文を示し、特別な注意を払う価値があります。
|
||||
- 特定の意味を持つ単語や句は「引用符」で示され、曖昧さを避けます。
|
||||
- プログラミング言語間で一致しない用語については、この本はPythonに従います。例えば、`null`を意味するために`None`を使用します。
|
||||
- この本は、よりコンパクトなコンテンツレイアウトと引き換えに、プログラミング言語のコメント規約を部分的に無視しています。コメントは主に3つのタイプで構成されています:タイトルコメント、内容コメント、複数行コメント。
|
||||
- 見出しの後に `*` が付いているのは選読章で、内容は比較的難しめです。時間が限られている場合は、先に読み飛ばしてもかまいません。
|
||||
- 専門用語は太字(紙書籍版と PDF 版)または下線付き(Web 版)で示します。たとえば<u>配列(array)</u>のようなものです。文献を読む際に役立つため、覚えておくことをおすすめします。
|
||||
- 重要な内容やまとめの文は **太字** で示します。これらの文章には特に注意してください。
|
||||
- 特定の意味を持つ語句には“引用符”を付け、曖昧さを避けます。
|
||||
- プログラミング言語ごとに用語が一致しない場合、本書では Python を基準とします。たとえば、“空”を表すのに `None` を使います。
|
||||
- 本書では、よりコンパクトなレイアウトのために、言語ごとのコメント規約を一部省略しています。コメントは主に3種類あります。タイトルコメント、内容コメント、複数行コメントです。
|
||||
|
||||
=== "Python"
|
||||
|
||||
```python title=""
|
||||
"""関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント"""
|
||||
|
||||
# 詳細を説明するためのコメント
|
||||
|
||||
"""タイトルコメント。関数、クラス、テストケースなどを示すために使います"""
|
||||
|
||||
# 内容コメント。コードを詳しく説明するために使います
|
||||
|
||||
"""
|
||||
複数行
|
||||
コメント
|
||||
@@ -29,10 +29,10 @@
|
||||
=== "C++"
|
||||
|
||||
```cpp title=""
|
||||
/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */
|
||||
|
||||
// 詳細を説明するためのコメント
|
||||
|
||||
/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */
|
||||
|
||||
// 内容コメント。コードを詳しく説明するために使います
|
||||
|
||||
/**
|
||||
* 複数行
|
||||
* コメント
|
||||
@@ -42,10 +42,10 @@
|
||||
=== "Java"
|
||||
|
||||
```java title=""
|
||||
/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */
|
||||
|
||||
// 詳細を説明するためのコメント
|
||||
|
||||
/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */
|
||||
|
||||
// 内容コメント。コードを詳しく説明するために使います
|
||||
|
||||
/**
|
||||
* 複数行
|
||||
* コメント
|
||||
@@ -55,10 +55,10 @@
|
||||
=== "C#"
|
||||
|
||||
```csharp title=""
|
||||
/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */
|
||||
|
||||
// 詳細を説明するためのコメント
|
||||
|
||||
/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */
|
||||
|
||||
// 内容コメント。コードを詳しく説明するために使います
|
||||
|
||||
/**
|
||||
* 複数行
|
||||
* コメント
|
||||
@@ -68,10 +68,10 @@
|
||||
=== "Go"
|
||||
|
||||
```go title=""
|
||||
/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */
|
||||
|
||||
// 詳細を説明するためのコメント
|
||||
|
||||
/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */
|
||||
|
||||
// 内容コメント。コードを詳しく説明するために使います
|
||||
|
||||
/**
|
||||
* 複数行
|
||||
* コメント
|
||||
@@ -81,10 +81,10 @@
|
||||
=== "Swift"
|
||||
|
||||
```swift title=""
|
||||
/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */
|
||||
|
||||
// 詳細を説明するためのコメント
|
||||
|
||||
/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */
|
||||
|
||||
// 内容コメント。コードを詳しく説明するために使います
|
||||
|
||||
/**
|
||||
* 複数行
|
||||
* コメント
|
||||
@@ -94,10 +94,10 @@
|
||||
=== "JS"
|
||||
|
||||
```javascript title=""
|
||||
/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */
|
||||
|
||||
// 詳細を説明するためのコメント
|
||||
|
||||
/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */
|
||||
|
||||
// 内容コメント。コードを詳しく説明するために使います
|
||||
|
||||
/**
|
||||
* 複数行
|
||||
* コメント
|
||||
@@ -107,10 +107,10 @@
|
||||
=== "TS"
|
||||
|
||||
```typescript title=""
|
||||
/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */
|
||||
|
||||
// 詳細を説明するためのコメント
|
||||
|
||||
/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */
|
||||
|
||||
// 内容コメント。コードを詳しく説明するために使います
|
||||
|
||||
/**
|
||||
* 複数行
|
||||
* コメント
|
||||
@@ -120,10 +120,10 @@
|
||||
=== "Dart"
|
||||
|
||||
```dart title=""
|
||||
/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */
|
||||
|
||||
// 詳細を説明するためのコメント
|
||||
|
||||
/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */
|
||||
|
||||
// 内容コメント。コードを詳しく説明するために使います
|
||||
|
||||
/**
|
||||
* 複数行
|
||||
* コメント
|
||||
@@ -133,10 +133,10 @@
|
||||
=== "Rust"
|
||||
|
||||
```rust title=""
|
||||
/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */
|
||||
|
||||
// 詳細を説明するためのコメント
|
||||
/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */
|
||||
|
||||
// 内容コメント。コードを詳しく説明するために使います
|
||||
|
||||
/**
|
||||
* 複数行
|
||||
* コメント
|
||||
@@ -146,10 +146,10 @@
|
||||
=== "C"
|
||||
|
||||
```c title=""
|
||||
/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */
|
||||
|
||||
// 詳細を説明するためのコメント
|
||||
|
||||
/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */
|
||||
|
||||
// 内容コメント。コードを詳しく説明するために使います
|
||||
|
||||
/**
|
||||
* 複数行
|
||||
* コメント
|
||||
@@ -159,70 +159,83 @@
|
||||
=== "Kotlin"
|
||||
|
||||
```kotlin title=""
|
||||
/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */
|
||||
|
||||
// 詳細を説明するためのコメント
|
||||
|
||||
/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */
|
||||
|
||||
// 内容コメント。コードを詳しく説明するために使います
|
||||
|
||||
/**
|
||||
* 複数行
|
||||
* コメント
|
||||
*/
|
||||
```
|
||||
|
||||
## アニメーション図解による効率的学習
|
||||
=== "Ruby"
|
||||
|
||||
テキストと比較して、動画や画像は情報密度が高く、より構造化されており、理解しやすくなっています。この本では、**重要で難しい概念は主にアニメーションと図解を通じて提示され**、テキストは説明と補足として機能します。
|
||||
```ruby title=""
|
||||
### タイトルコメント。関数、クラス、テストケースなどを示すために使います ###
|
||||
|
||||
下図に示すようなアニメーションや図解のある内容に遭遇した場合、**図の理解を優先し、テキストを補足として**、両方を統合して包括的な理解を得てください。
|
||||
# 内容コメント。コードを詳しく説明するために使います
|
||||
|
||||
# 複数行
|
||||
# コメント
|
||||
```
|
||||
|
||||
## アニメーション図解で効率よく学ぶ
|
||||
|
||||
文字と比べて、動画や画像は情報密度と構造化の度合いが高く、理解しやすいものです。本書では、**重要かつ難解な知識は主にアニメーションによる図解で示し**、文章は説明と補足を担います。
|
||||
|
||||
本書を読んでいて、ある内容に以下の図のようなアニメーション図解がある場合は、**図を主、文章を従として**、両方を合わせて理解してください。
|
||||
|
||||

|
||||
|
||||
## コーディング実践による理解の深化
|
||||
## コード実践で理解を深める
|
||||
|
||||
この本のソースコードは[GitHubリポジトリ](https://github.com/krahets/hello-algo)でホストされています。下図に示すように、**ソースコードにはテスト例が付属しており、ワンクリックで実行できます**。
|
||||
本書のサンプルコードは [GitHub リポジトリ](https://github.com/krahets/hello-algo) で管理されています。以下の図のように、**ソースコードにはテストケースが付いており、ワンクリックで実行できます**。
|
||||
|
||||
時間に余裕がある場合は、**自分でコードをタイプすることをお勧めします**。時間がない場合は、少なくともすべてのコードを読んで実行してください。
|
||||
時間に余裕があれば、**コードを見ながら自分で一度書いてみることをおすすめします**。学習時間が限られている場合でも、少なくともすべてのコードに目を通し、実行してください。
|
||||
|
||||
コードを読むだけと比較して、コードを書くことは多くの場合、より多くの学習をもたらします。**実践による学習こそが真の学習方法です。**
|
||||
コードを読むのに比べて、書く過程のほうが得られるものは多いものです。**手を動かしてこそ、本当に学んだことになります**。
|
||||
|
||||

|
||||
|
||||
コードを実行するための設定には、主に3つのステップが含まれます。
|
||||
コードを実行する前準備は主に3ステップです。
|
||||
|
||||
**ステップ1:ローカルプログラミング環境をインストール**。付録の[チュートリアル](https://www.hello-algo.com/chapter_appendix/installation/)に従ってインストールするか、すでにインストールされている場合はこのステップをスキップしてください。
|
||||
**第1ステップ:ローカルのプログラミング環境をインストールする**。付録の[チュートリアル](https://www.hello-algo.com/chapter_appendix/installation/)を参照してインストールしてください。すでにインストール済みであれば、この手順は省略できます。
|
||||
|
||||
**ステップ2:コードリポジトリをクローンまたはダウンロード**。[GitHubリポジトリ](https://github.com/krahets/hello-algo)を訪問してください。
|
||||
|
||||
[Git](https://git-scm.com/downloads)がインストールされている場合は、次のコマンドを使用してリポジトリをクローンします:
|
||||
**第2ステップ:コードリポジトリをクローンまたはダウンロードする**。 [GitHub リポジトリ](https://github.com/krahets/hello-algo) にアクセスしてください。すでに [Git](https://git-scm.com/downloads) をインストールしている場合は、次のコマンドでこのリポジトリをクローンできます:
|
||||
|
||||
```shell
|
||||
git clone https://github.com/krahets/hello-algo.git
|
||||
```
|
||||
|
||||
または、下図に示す場所にある「Download ZIP」ボタンをクリックして、コードを圧縮ZIPファイルとして直接ダウンロードすることもできます。その後、ローカルで展開するだけです。
|
||||
もちろん、以下の図に示す場所で“Download ZIP”ボタンをクリックし、コードの圧縮ファイルを直接ダウンロードしてローカルで展開することもできます。
|
||||
|
||||

|
||||
|
||||
**ステップ3:ソースコードを実行**。下図に示すように、上部にファイル名が記載されたコードブロックについては、リポジトリの`codes`フォルダで対応するソースコードファイルを見つけることができます。これらのファイルはワンクリックで実行でき、不要なデバッグ時間を節約し、学習に集中できます。
|
||||
**第3ステップ:ソースコードを実行する**。以下の図のように、上部にファイル名が表示されているコードブロックについては、リポジトリの `codes` フォルダ内に対応するソースコードファイルがあります。ソースコードファイルはワンクリックで実行できるため、不要なデバッグ時間を減らし、学習内容に集中できます。
|
||||
|
||||

|
||||
|
||||
## 議論による共同学習
|
||||
ローカルでコードを実行するだけでなく、**Web 版では Python コードの可視化実行にも対応しています**([pythontutor](https://pythontutor.com/) を利用)。以下の図のように、コードブロックの下にある“可視化実行”をクリックすると表示を展開し、アルゴリズムコードの実行過程を観察できます。また、“全画面表示”をクリックすると、より見やすい閲覧体験が得られます。
|
||||
|
||||
この本を読んでいる間、学べなかった点を飛ばさないでください。**コメントセクションで気軽に質問してください**。喜んでお答えし、通常2日以内に回答できます。
|
||||

|
||||
|
||||
下図に示すように、各章の下部にコメントセクションがあります。これらのコメントに注意を払うことをお勧めします。他の人が遭遇した問題を知ることで、知識のギャップを特定し、より深い思索を促すだけでなく、仲間の読者の質問に答えたり、洞察を共有したり、相互の向上を促進したりすることで寛大に貢献することも招待します。
|
||||
## 質問と議論を通じてともに成長する
|
||||
|
||||

|
||||
本書を読んでいて、理解できていない知識点を安易に読み飛ばさないでください。**コメント欄で気軽に質問してください**。私と仲間たちが誠意をもって回答し、通常は 2 日以内に返信します。
|
||||
|
||||
## アルゴリズム学習パス
|
||||
以下の図のように、Web 版では各章の下部にコメント欄があります。ぜひコメント欄の内容にも目を通してください。一方では、みんなが直面した問題を知ることで知識の抜けを補い、より深い思考を促せます。もう一方では、ほかの仲間の質問にも積極的に答え、見解を共有し、互いの成長を助けてほしいと思います。
|
||||
|
||||
全体的に、データ構造とアルゴリズムをマスターする旅は3つの段階に分けることができます:
|
||||

|
||||
|
||||
1. **段階1:アルゴリズムの入門**。さまざまなデータ構造の特性と使用法に慣れ、異なるアルゴリズムの原理、プロセス、用途、効率について学ぶ必要があります。
|
||||
2. **段階2:アルゴリズム問題の練習**。[Sword for Offer](https://leetcode.cn/studyplan/coding-interviews/)や[LeetCode Hot 100](https://leetcode.cn/studyplan/top-100-liked/)などの人気のある問題から始めることをお勧めし、少なくとも100問を蓄積して主流のアルゴリズム問題に慣れることです。練習を始めると忘却が課題になる可能性がありますが、これは正常なことですのでご安心ください。「エビングハウスの忘却曲線」に従って問題を復習することができ、通常3〜5回の反復の後、それらを覚えることができるでしょう。
|
||||
3. **段階3:知識体系の構築**。学習の面では、アルゴリズムコラム記事、解法フレームワーク、アルゴリズム教科書を読んで知識体系を継続的に豊かにすることができます。練習の面では、トピック別分類、一つの問題に対する複数の解法、複数の問題に対する一つの解法など、高度な戦略を試すことができます。これらの戦略に関する洞察は、さまざまなコミュニティで見つけることができます。
|
||||
## アルゴリズム学習ロードマップ
|
||||
|
||||
下図に示すように、この本は主に「段階1」をカバーしており、段階2と3により効率的に取り組むのに役立つことを目的としています。
|
||||
全体として見ると、データ構造とアルゴリズムの学習過程は 3 つの段階に分けられます。
|
||||
|
||||

|
||||
1. **第 1 段階:アルゴリズム入門**。さまざまなデータ構造の特徴と使い方に慣れ、異なるアルゴリズムの原理、流れ、用途、効率などを学ぶ必要があります。
|
||||
2. **第 2 段階:アルゴリズム問題を解く**。まずは人気の高い問題から取り組み、少なくとも 100 問は蓄積して、主流のアルゴリズム問題に慣れることをおすすめします。最初のうちは、“知識の忘却”が課題になるかもしれませんが、心配はいりません。これはごく自然なことです。“エビングハウスの忘却曲線”に沿って問題を復習すれば、通常は 3~5 回繰り返すことでしっかり記憶に定着します。おすすめの問題リストと学習計画は、この [GitHub リポジトリ](https://github.com/krahets/LeetCode-Book) を参照してください。
|
||||
3. **第 3 段階:知識体系を構築する**。学習面では、アルゴリズムの連載記事、解法フレームワーク、教材などを読むことで、知識体系を継続的に充実させられます。問題演習の面では、トピック別分類、1 問多解、1 解多題といった発展的な戦略も試せます。関連する学習ノウハウは各コミュニティで見つけられます。
|
||||
|
||||
以下の図のように、本書の内容は主に“第 1 段階”を扱っており、第 2 段階と第 3 段階の学習をより効率的に進める助けとなることを目的としています。
|
||||
|
||||

|
||||
|
||||
Reference in New Issue
Block a user