mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-14 08:06:06 +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,52 +1,54 @@
|
||||
# この本について
|
||||
# 本書について
|
||||
|
||||
このオープンソースプロジェクトは、データ構造とアルゴリズムに関する無料で初心者にやさしいクラッシュコースの作成を目指しています。
|
||||
本プロジェクトは、オープンソースで無料、かつ初心者にやさしいデータ構造とアルゴリズムの入門書を作ることを目的としています。
|
||||
|
||||
- アニメーション付きの図解、理解しやすい内容、滑らかな学習曲線により、初心者がデータ構造とアルゴリズムの「知識マップ」を探索するのに役立ちます。
|
||||
- ワンクリックでコードを実行できるため、読者のプログラミングスキルの向上と、アルゴリズムの動作原理およびデータ構造の基礎実装の理解に役立ちます。
|
||||
- 教えることによる学習を促進し、質問や洞察の共有を自由に行ってください。議論を通じて一緒に成長しましょう。
|
||||
- 全編でアニメーション付きの図解を採用し、内容は明快で理解しやすく、学習曲線もなだらかで、初心者がデータ構造とアルゴリズムの知識地図を探求できるよう導きます。
|
||||
- ソースコードはワンクリックで実行でき、読者が演習を通じてプログラミング能力を高め、アルゴリズムの動作原理とデータ構造の内部実装を理解する助けとなります。
|
||||
- 読者どうしの助け合いによる学習を推奨しており、コメント欄で質問や見解を共有し、対話と議論を通じてともに成長していくことを歓迎します。
|
||||
|
||||
## 対象読者
|
||||
|
||||
もしあなたがアルゴリズムに触れたばかりで経験が限られている場合、またはアルゴリズムである程度の経験を積んでいても、データ構造とアルゴリズムについて曖昧な理解しかなく、常に「分かった」と「うーん」の間を行き来している場合、この本はあなたのためのものです!
|
||||
もしあなたがアルゴリズム初心者で、これまでアルゴリズムに触れたことがない、あるいはすでに多少の問題演習の経験はあるものの、データ構造とアルゴリズムについてはまだ曖昧な理解にとどまり、できるかできないかの間を行き来しているなら、本書はまさにあなたのために作られています!
|
||||
|
||||
すでにある程度の問題解決経験を積んでおり、ほとんどのタイプの問題に精通している場合、この本はアルゴリズムの知識体系を復習し整理するのに役立ちます。リポジトリのソースコードは「問題解決ツールキット」や「アルゴリズムチートシート」として使用できます。
|
||||
もしすでに一定量の問題演習を積み、ほとんどの問題パターンに慣れているなら、本書はアルゴリズム知識体系の復習と整理に役立ちます。リポジトリのソースコードは「問題演習ツール集」や「アルゴリズム辞典」として活用できます。
|
||||
|
||||
もしあなたがアルゴリズムの専門家であれば、貴重な提案をいただくか、[参加して協力](https://www.hello-algo.com/chapter_appendix/contribution/)していただければと思います。
|
||||
もしあなたがアルゴリズムの「達人」なら、貴重なご提案をいただけることを楽しみにしています。あるいは[一緒に執筆に参加](https://www.hello-algo.com/chapter_appendix/contribution/)してください。
|
||||
|
||||
!!! success "前提条件"
|
||||
|
||||
少なくとも一つのプログラミング言語で簡単なコードを書いて読むことができる必要があります。
|
||||
少なくともいずれか一つの言語でのプログラミング基礎があり、簡単なコードを読んだり書いたりできる必要があります。
|
||||
|
||||
## 内容構成
|
||||
|
||||
本書の主な内容を下図に示します。
|
||||
本書の主な内容は以下の図のとおりです。
|
||||
|
||||
- **計算量解析**: データ構造とアルゴリズムを評価する側面と方法を探求します。時間計算量と空間計算量を導出する方法、および一般的なタイプと例を扱います。
|
||||
- **データ構造**: 基本的なデータ型、分類方法、定義、長所と短所、一般的な操作、タイプ、応用、および配列、連結リスト、スタック、キュー、ハッシュテーブル、木、ヒープ、グラフなどのデータ構造の実装方法に焦点を当てます。
|
||||
- **アルゴリズム**: アルゴリズムを定義し、その長所と短所、効率性、応用シナリオ、問題解決ステップについて議論し、検索、ソート、分割統治、バックトラッキング、動的プログラミング、貪欲アルゴリズムなど、さまざまなアルゴリズムのサンプル問題を含みます。
|
||||
- **計算量解析**:データ構造とアルゴリズムを評価する観点と方法。時間計算量と空間計算量の求め方、代表的な種類、例など。
|
||||
- **データ構造**:基本データ型とデータ構造の分類方法。配列、連結リスト、スタック、キュー、ハッシュテーブル、木、ヒープ、グラフなどのデータ構造の定義、長所と短所、基本操作、代表的な種類、典型的な応用、実装方法など。
|
||||
- **アルゴリズム**:探索、ソート、分割統治、バックトラッキング、動的計画法、貪欲法などのアルゴリズムの定義、長所と短所、効率、適用場面、問題を解く手順、例題など。
|
||||
|
||||

|
||||
|
||||
## 謝辞
|
||||
|
||||
本書は、オープンソースコミュニティの多数の貢献者による共同の努力のもと、継続的に改善されています。時間と労力を注いで執筆に携わってくださったすべての方々に感謝します。貢献者は以下のとおりです(GitHub により自動生成された順序):krahets、coderonion、Gonglja、nuomi1、Reanon、justin-tse、hpstory、danielsss、curtishd、night-cruise、S-N-O-R-L-A-X、rongyi、msk397、gvenusleo、khoaxuantu、rivertwilight、K3v123、gyt95、zhuoqinyue、yuelinxin、Zuoxun、mingXta、Phoenix0415、FangYuan33、GN-Yu、longsizhuo、IsChristina、xBLACKICEx、guowei-gong、Cathay-Chen、pengchzn、QiLOL、magentaqin、hello-ikun、JoseHung、qualifier1024、thomasq0、sunshinesDL、L-Super、Guanngxu、Transmigration-zhou、WSL0809、Slone123c、lhxsm、yuan0221、what-is-me、Shyam-Chen、theNefelibatas、longranger2、codeberg-user、xiongsp、JeffersonHuang、prinpal、seven1240、Wonderdch、malone6、xiaomiusa87、gaofer、bluebean-cloud、a16su、SamJin98、hongyun-robot、nanlei、XiaChuerwu、yd-j、iron-irax、mgisr、steventimes、junminhong、heshuyue、danny900714、MolDuM、Nigh、Dr-XYZ、XC-Zero、reeswell、PXG-XPG、NI-SW、Horbin-Magician、Enlightenus、YangXuanyi、beatrix-chan、DullSword、xjr7670、jiaxianhua、qq909244296、iStig、boloboloda、hts0000、gledfish、wenjianmin、keshida、kilikilikid、lclc6、lwbaptx、linyejoe2、liuxjerry、llql1211、fbigm、echo1937、szu17dmy、dshlstarr、Yucao-cy、coderlef、czruby、bongbongbakudan、beintentional、ZongYangL、ZhongYuuu、ZhongGuanbin、hezhizhen、linzeyan、ZJKung、luluxia、xb534、ztkuaikuai、yw-1021、ElaBosak233、baagod、zhouLion、yishangzhang、yi427、yanedie、yabo083、weibk、wangwang105、th1nk3r-ing、tao363、4yDX3906、syd168、sslmj2020、smilelsb、siqyka、selear、sdshaoda、Xi-Row、popozhu、nuquist19、noobcodemaker、XiaoK29、chadyi、lyl625760、lucaswangdev、0130w、shanghai-Jerry、EJackYang、Javesun99、eltociear、lipusheng、KNChiu、BlindTerran、ShiMaRing、lovelock、FreddieLi、FloranceYeh、fanchenggang、gltianwen、goerll、nedchu、curly210102、CuB3y0nd、KraHsu、CarrotDLaw、youshaoXG、bubble9um、Asashishi、Asa0oo0o0o、fanenr、eagleanurag、akshiterate、52coder、foursevenlove、KorsChen、GaochaoZhu、hopkings2008、yang-le、realwujing、Evilrabbit520、Umer-Jahangir、Turing-1024-Lee、Suremotoo、paoxiaomooo、Chieko-Seren、Allen-Scai、ymmmas、Risuntsy、Richard-Zhang1019、RafaelCaso、qingpeng9802、primexiao、Urbaner3、zhongfq、nidhoggfgg、MwumLi、CreatorMetaSky、martinx、ZnYang2018、hugtyftg、logan-qiu、psychelzh、Keynman、KeiichiKasai、KawaiiAsh。
|
||||
本書は、オープンソースコミュニティの多くの貢献者による共同の努力のもとで、継続的に改善されています。時間と労力を注いでくださったすべての執筆者の皆さんに感謝します。お名前は次のとおりです(GitHub により自動生成された順序):krahets、coderonion、Gonglja、nuomi1、Reanon、justin-tse、hpstory、danielsss、curtishd、night-cruise、S-N-O-R-L-A-X、rongyi、msk397、gvenusleo、khoaxuantu、rivertwilight、K3v123、gyt95、zhuoqinyue、yuelinxin、Zuoxun、mingXta、Phoenix0415、FangYuan33、GN-Yu、longsizhuo、IsChristina、xBLACKICEx、guowei-gong、Cathay-Chen、pengchzn、QiLOL、magentaqin、hello-ikun、JoseHung、qualifier1024、thomasq0、sunshinesDL、L-Super、Guanngxu、Transmigration-zhou、WSL0809、Slone123c、lhxsm、yuan0221、what-is-me、Shyam-Chen、theNefelibatas、longranger2、codeberg-user、xiongsp、JeffersonHuang、prinpal、seven1240、Wonderdch、malone6、xiaomiusa87、gaofer、bluebean-cloud、a16su、SamJin98、hongyun-robot、nanlei、XiaChuerwu、yd-j、iron-irax、mgisr、steventimes、junminhong、heshuyue、danny900714、MolDuM、Nigh、Dr-XYZ、XC-Zero、reeswell、PXG-XPG、NI-SW、Horbin-Magician、Enlightenus、YangXuanyi、beatrix-chan、DullSword、xjr7670、jiaxianhua、qq909244296、iStig、boloboloda、hts0000、gledfish、wenjianmin、keshida、kilikilikid、lclc6、lwbaptx、linyejoe2、liuxjerry、llql1211、fbigm、echo1937、szu17dmy、dshlstarr、Yucao-cy、coderlef、czruby、bongbongbakudan、beintentional、ZongYangL、ZhongYuuu、ZhongGuanbin、hezhizhen、linzeyan、ZJKung、luluxia、xb534、ztkuaikuai、yw-1021、ElaBosak233、baagod、zhouLion、yishangzhang、yi427、yanedie、yabo083、weibk、wangwang105、th1nk3r-ing、tao363、4yDX3906、syd168、sslmj2020、smilelsb、siqyka、selear、sdshaoda、Xi-Row、popozhu、nuquist19、noobcodemaker、XiaoK29、chadyi、lyl625760、lucaswangdev、0130w、shanghai-Jerry、EJackYang、Javesun99、eltociear、lipusheng、KNChiu、BlindTerran、ShiMaRing、lovelock、FreddieLi、FloranceYeh、fanchenggang、gltianwen、goerll、nedchu、curly210102、CuB3y0nd、KraHsu、CarrotDLaw、youshaoXG、bubble9um、Asashishi、Asa0oo0o0o、fanenr、eagleanurag、akshiterate、52coder、foursevenlove、KorsChen、GaochaoZhu、hopkings2008、yang-le、realwujing、Evilrabbit520、Umer-Jahangir、Turing-1024-Lee、Suremotoo、paoxiaomooo、Chieko-Seren、Allen-Scai、ymmmas、Risuntsy、Richard-Zhang1019、RafaelCaso、qingpeng9802、primexiao、Urbaner3、zhongfq、nidhoggfgg、MwumLi、CreatorMetaSky、martinx、ZnYang2018、hugtyftg、logan-qiu、psychelzh、Keynman、KeiichiKasai と KawaiiAsh。
|
||||
|
||||
この本のコードレビュー作業は、coderonion, Gonglja, gvenusleo, hpstory, justin‐tse, khoaxuantu, krahets, night-cruise, nuomi1, Reanon and rongyi(アルファベット順)によって完了されました。彼らの時間と努力に感謝し、様々な言語でのコードの標準化と統一性を確保してくださいました。
|
||||
本書のコードレビューは coderonion、curtishd、Gonglja、gvenusleo、hpstory、justin-tse、khoaxuantu、krahets、night-cruise、nuomi1、Reanon と rongyi によって行われました(アルファベット順)。彼らが費やしてくれた時間と労力に感謝します。各言語のコードの規範性と統一性が保たれているのは、まさに彼らのおかげです。
|
||||
|
||||
本書の繁体字中国語版は Shyam-Chen および Dr-XYZ によってレビューされ、英語版は yuelinxin、K3v123、QiLOL、Phoenix0415、SamJin98、yanedie、RafaelCaso、pengchzn、thomasq0、magentaqin によってレビューされ、日本語版は eltociear によってレビューされました。彼らの継続的な貢献のおかげで、本書はより幅広い読者層に提供することができています。ここに深く感謝いたします。
|
||||
本書の繁体字中国語版は Shyam-Chen と Dr-XYZ がレビューし、英語版は yuelinxin、K3v123、QiLOL、Phoenix0415、SamJin98、yanedie、RafaelCaso、pengchzn、thomasq0 と magentaqin がレビューし、日本語版は eltociear がレビューしました。彼らの継続的な貢献があってこそ、本書はより幅広い読者に届けられています。感謝いたします。
|
||||
|
||||
この本の制作過程において、多くの方々から貴重な支援をいただきました。これらに限定されませんが:
|
||||
本書の ePub 電子書籍生成ツールは zhongfq によって開発されました。彼の貢献に感謝します。読者により自由な読書方法を提供してくれました。
|
||||
|
||||
- 会社でのメンター、李熙博士に感謝します。ある会話で「早く行動しろ」と励ましていただき、この本を書く決意を固めることができました。
|
||||
- ガールフレンドのBubbleに感謝します。この本の最初の読者として、アルゴリズム初心者の視点から多くの貴重な提案をいただき、この本を初心者により適したものにしてくださいました。
|
||||
- Tengbao、Qibao、Feibaoに感謝します。この本のクリエイティブな名前を考えてくださり、みんなが初めて「Hello World!」を書いた時の素晴らしい思い出を呼び起こしてくれました。
|
||||
- Xiaoquanに感謝します。知的財産に関する専門的な支援を提供してくださり、このオープンソース本の開発において重要な役割を果たしてくださいました。
|
||||
- Sutongに感謝します。この本の美しいカバーとロゴをデザインしてくださり、私の要求で何度も修正を辛抱強く行ってくださいました。
|
||||
- @squidfunk に感謝します。執筆と組版の提案、および彼が開発したオープンソースドキュメントテーマ [Material-for-MkDocs](https://github.com/squidfunk/mkdocs-material/tree/master) を提供してくださいました。
|
||||
本書の執筆過程で、私は多くの方々の助けを得ました。
|
||||
|
||||
執筆の過程で、データ構造とアルゴリズムに関する多数の教科書や記事を深く研究しました。これらの作品は模範的なモデルとして機能し、この本の内容の正確性と品質を確保してくださいました。先人の方々の貴重な貢献に感謝いたします!
|
||||
- 会社での私の指導教員である李汐博士に感謝します。ある対話の中で「すぐに行動しよう」と励ましてくださり、この本を書く決意を固めることができました;
|
||||
- 私の恋人であり、本書の最初の読者でもある泡泡に感謝します。アルゴリズム初心者の視点から多くの貴重な提案をしてくれたおかげで、本書はより初心者に適したものになりました;
|
||||
- 腾宝、琦宝、飞宝が本書に創造性あふれる名前を付けてくれたことに感謝します。みんなが最初のコード行「Hello World!」を書いた美しい記憶を呼び起こしてくれました;
|
||||
- 校铨が知的財産の面で専門的な支援をしてくれたことに感謝します。これは本オープンソース書籍の改善に重要な役割を果たしました;
|
||||
- 苏潼が本書の美しい表紙と logo をデザインし、私の完璧主義につき合って何度も辛抱強く修正してくれたことに感謝します;
|
||||
- @squidfunk が組版に関する助言を提供してくれたこと、そして彼が開発したオープンソースのドキュメントテーマ [Material-for-MkDocs](https://github.com/squidfunk/mkdocs-material/tree/master) に感謝します。
|
||||
|
||||
この本は、理論と実践を組み合わせた学習を提唱しており、この点で ["Dive into Deep Learning"](https://github.com/d2l-ai/d2l-en) からインスピレーションを受けています。この優れた本をすべての読者に強くお勧めします。
|
||||
執筆の過程で、私はデータ構造とアルゴリズムに関する多くの教材や記事を読みました。これらの作品は本書に優れた手本を与え、本書の内容の正確性と品質を支えてくれました。ここに、すべての先生方と先人たちの卓越した貢献に感謝します!
|
||||
|
||||
**継続的な支援と励ましにより、この興味深い仕事をすることを可能にしてくださった両親に心から感謝いたします**。
|
||||
本書は手と頭を同時に使う学習方法を提唱しています。この点で私は[『手を動かして学ぶ深層学習』](https://github.com/d2l-ai/d2l-zh)から大きな啓発を受けました。ここで読者の皆さんにこの優れた著作を強くお勧めします。
|
||||
|
||||
**心から両親に感謝します。いつも支え励ましてくれたからこそ、私はこの興味深いことに取り組む機会を得ることができました**。
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# 序文
|
||||
# はじめに
|
||||
|
||||

|
||||

|
||||
|
||||
!!! abstract
|
||||
|
||||
アルゴリズムは美しい交響曲のようで、コードの一行一行がリズムのように流れています。
|
||||
|
||||
この本があなたの心の中で静かに響き、独特で深い旋律を残すことを願っています。
|
||||
アルゴリズムは美しい交響曲のようであり、コードの一行一行が旋律のように流れていきます。
|
||||
|
||||
この本があなたの心の中でそっと響き、独自で深い旋律を残してくれることを願っています。
|
||||
|
||||
@@ -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 段階の学習をより効率的に進める助けとなることを目的としています。
|
||||
|
||||

|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
# まとめ
|
||||
|
||||
- この本の主な読者はアルゴリズムの初心者です。すでに基本的な知識をお持ちの場合、この本はアルゴリズムの知識を体系的に復習するのに役立ち、この本のソースコードは「コーディングツールキット」としても使用できます。
|
||||
- この本は3つの主要なセクション、計算量解析、データ構造、アルゴリズムで構成されており、この分野のほとんどのトピックをカバーしています。
|
||||
- アルゴリズムの初心者にとって、多くの回り道や一般的な落とし穴を避けるために、初期段階で入門書を読むことが重要です。
|
||||
- 本書内のアニメーションと図は通常、重要なポイントと難しい知識を紹介するために使用されます。本を読む際にはこれらにより多くの注意を払う必要があります。
|
||||
- 実践はプログラミングを学ぶ最良の方法です。ソースコードを実行し、自分でコードをタイプすることを強くお勧めします。
|
||||
- この本のWeb版の各章には議論セクションがあり、いつでも質問や洞察を共有することを歓迎します。
|
||||
### 重要ポイントの振り返り
|
||||
|
||||
- 本書の主な対象読者はアルゴリズム初学者です。すでにある程度の基礎がある場合でも、本書はアルゴリズム知識を体系的に振り返る助けとなり、書中のソースコードは「問題演習用ツール集」としても利用できます。
|
||||
- 本書の内容は主に計算量解析、データ構造、アルゴリズムの三部からなり、この分野の大部分のテーマを網羅しています。
|
||||
- アルゴリズム初心者にとって、学習初期の段階で入門書を読むことは非常に重要であり、多くの遠回りを避けられます。
|
||||
- 本書のアニメーション図解は通常、重要な知識や難しい知識を紹介するために用いられます。本書を読む際は、これらの内容により多く注意を払うべきです。
|
||||
- 実践はプログラミングを学ぶ最良の方法です。ソースコードを実行し、実際に自分でコードを書くことを強く勧めます。
|
||||
- 本書のWeb版の各章にはコメント欄が設けられており、疑問や見解をいつでも共有することを歓迎します。
|
||||
|
||||
Reference in New Issue
Block a user