This commit is contained in:
krahets
2026-03-30 08:17:41 +08:00
parent 68cafe99dd
commit 46bccf0065
484 changed files with 60193 additions and 20315 deletions
+59 -58
View File
@@ -6,7 +6,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="アニメーション図解ワンクリック実行データ構造とアルゴリズムチュートリアル">
<meta name="description" content="アニメーション図解ワンクリック実行コードで学べるデータ構造とアルゴリズムの入門書">
<meta name="author" content="krahets">
@@ -39,7 +39,7 @@
<title>0.1 この本について - Hello アルゴリズム</title>
<title>0.1 本について - Hello アルゴリズム</title>
@@ -117,7 +117,7 @@
<path
d="M480 32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9L381.7 53c-48 48-113.1 75-181 75H192 160 64c-35.3 0-64 28.7-64 64v96c0 35.3 28.7 64 64 64l0 128c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V352l8.7 0c67.9 0 133 27 181 75l43.6 43.6c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V300.4c18.6-8.8 32-32.5 32-60.4s-13.4-51.6-32-60.4V32zm-64 76.7V240 371.3C357.2 317.8 280.5 288 200.7 288H192V192h8.7c79.8 0 156.5-29.8 215.3-83.3z" />
</svg>
<span>日本語版審閱者を募集しています!詳細<a href="https://github.com/krahets/hello-algo/blob/main/ja/CONTRIBUTING.md">CONTRIBUTING.md</a>参照してください。</span>
<span>日本語版のレビュアーを募集しています。詳しく<a href="/ja/chapter_appendix/contribution/">こちら</a>ご覧ください。</span>
</div>
</div>
@@ -152,7 +152,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
0.1 &nbsp; この本について
0.1 &nbsp;について
</span>
</div>
@@ -341,7 +341,7 @@
<span class="md-ellipsis">
はじめに
@@ -358,7 +358,7 @@
<span class="md-nav__icon md-icon"></span>
はじめに
</label>
@@ -701,7 +701,7 @@
<span class="md-ellipsis">
1.1 &nbsp; アルゴリズムはどこにでもある
1.1 &nbsp; アルゴリズムは至るところにある
@@ -729,7 +729,7 @@
<span class="md-ellipsis">
1.2 &nbsp; アルゴリズムとは何か
1.2 &nbsp; アルゴリズムとは
@@ -866,7 +866,7 @@
<span class="md-ellipsis">
2.1 &nbsp; アルゴリズム効率評価
2.1 &nbsp; アルゴリズム効率評価
@@ -1143,7 +1143,7 @@
<span class="md-ellipsis">
3.3 &nbsp; 数値の符号化 *
3.3 &nbsp; 数値エンコーディング *
@@ -1171,7 +1171,7 @@
<span class="md-ellipsis">
3.4 &nbsp; 文字の符号化 *
3.4 &nbsp; 文字エンコーディング *
@@ -1674,7 +1674,7 @@
<span class="md-ellipsis">
第 6 章 &nbsp; ハッシュ
第 6 章 &nbsp; ハッシュテーブル
@@ -1696,7 +1696,7 @@
<span class="md-nav__icon md-icon"></span>
第 6 章 &nbsp; ハッシュ
第 6 章 &nbsp; ハッシュテーブル
</label>
@@ -1718,7 +1718,7 @@
<span class="md-ellipsis">
6.1 &nbsp; ハッシュ
6.1 &nbsp; ハッシュテーブル
@@ -2025,7 +2025,7 @@
<span class="md-ellipsis">
7.5 &nbsp; AVL木 *
7.5 &nbsp; AVL 木 *
@@ -2188,7 +2188,7 @@
<span class="md-ellipsis">
8.2 &nbsp; ヒープ構築操作
8.2 &nbsp; ヒープ構築
@@ -2574,7 +2574,7 @@
<span class="md-ellipsis">
10.2 &nbsp; 二分探索の挿入
10.2 &nbsp; 二分探索の挿入位置
@@ -2630,7 +2630,7 @@
<span class="md-ellipsis">
10.4 &nbsp; ハッシュ最適化戦略
10.4 &nbsp; ハッシュによる最適化戦略
@@ -2658,7 +2658,7 @@
<span class="md-ellipsis">
10.5 &nbsp; 探索アルゴリズムの再認識
10.5 &nbsp; 探索アルゴリズム再考
@@ -3196,7 +3196,7 @@
<span class="md-ellipsis">
12.1 &nbsp; 分割統治アルゴリズム
12.1 &nbsp; 分割統治
@@ -3252,7 +3252,7 @@
<span class="md-ellipsis">
12.3 &nbsp; 木の構築問題
12.3 &nbsp; 二分木の構築問題
@@ -3280,7 +3280,7 @@
<span class="md-ellipsis">
12.4 &nbsp; ハノイの塔問題
12.4 &nbsp; ハノイの塔問題
@@ -3473,7 +3473,7 @@
<span class="md-ellipsis">
13.3 &nbsp; 部分集合和問題
13.3 &nbsp; 部分和問題
@@ -3501,7 +3501,7 @@
<span class="md-ellipsis">
13.4 &nbsp; Nクイーン問題
13.4 &nbsp; n クイーン問題
@@ -3642,7 +3642,7 @@
<span class="md-ellipsis">
14.1 &nbsp; 動的計画法の初歩
14.1 &nbsp; 動的計画法入門
@@ -3670,7 +3670,7 @@
<span class="md-ellipsis">
14.2 &nbsp; DP 問題特性
14.2 &nbsp; 動的計画法の問題特性
@@ -3698,7 +3698,7 @@
<span class="md-ellipsis">
14.3 &nbsp; DP の解法の考え方
14.3 &nbsp; 動的計画法の問題解決の考え方
@@ -3726,7 +3726,7 @@
<span class="md-ellipsis">
14.4 &nbsp; 0-1ナップサック問題
14.4 &nbsp; 0-1 ナップサック問題
@@ -3919,7 +3919,7 @@
<span class="md-ellipsis">
15.1 &nbsp; 貪欲アルゴリズム
15.1 &nbsp; 貪欲
@@ -4164,7 +4164,7 @@
<span class="md-ellipsis">
16.2 &nbsp; 一緒に作に参加する
16.2 &nbsp; 一緒に作に参加しましょう
@@ -4376,47 +4376,48 @@
<!-- Page content -->
<h1 id="01">0.1 &nbsp; この本について<a class="headerlink" href="#01" title="Permanent link">&para;</a></h1>
<p>このオープンソースプロジェクトは、データ構造とアルゴリズムに関する無料で初心者にやさしいクラッシュコースの作成を目指しています。</p>
<h1 id="01">0.1 &nbsp;について<a class="headerlink" href="#01" title="Permanent link">&para;</a></h1>
<p>本プロジェクトは、オープンソースで無料、かつ初心者にやさしいデータ構造とアルゴリズムの入門書を作ることを目的としています。</p>
<ul>
<li>アニメーション付きの図解、理解しやすい内容、滑らかな学習曲線により、初心者がデータ構造とアルゴリズムの知識マップ」を探索するのに役立ちます。</li>
<li>ワンクリックでコードを実行できるため、読者のプログラミングスキルの向上と、アルゴリズムの動作原理およびデータ構造の基礎実装理解に役立ちます。</li>
<li>教えることによる学習を促進し、質問や洞察の共有を自由に行ってください。議論を通じて一緒に成長しましょう</li>
<li>全編でアニメーション付きの図解を採用し、内容は明快で理解しやすく、学習曲線もなだらかで、初心者がデータ構造とアルゴリズムの知識地図を探求できるよう導きます。</li>
<li>ソースコードはワンクリックで実行でき、読者が演習を通じてプログラミング能力を高め、アルゴリズムの動作原理データ構造の内部実装理解する助けとなります。</li>
<li>読者どうしの助け合いによる学習を推奨しており、コメント欄で質問や見解を共有し、対話と議論を通じてともに成長していくことを歓迎します</li>
</ul>
<h2 id="011">0.1.1 &nbsp; 対象読者<a class="headerlink" href="#011" title="Permanent link">&para;</a></h2>
<p>もしあなたがアルゴリズムに触れたばかりで経験が限られている場合、またはアルゴリズムである程度の経験を積んでいても、データ構造とアルゴリズムについて曖昧な理解しかなく、常に「分かった」と「うーん」の間を行き来している場合、この本はあなたのためのものです!</p>
<p>すでにある程度の問題解決経験を積んでおり、ほとんどのタイプの問題に精通している場合、この本はアルゴリズム知識体系復習整理するのに役立ちます。リポジトリのソースコードは「問題解決ツールキット」や「アルゴリズムチートシート」として使用できます。</p>
<p>もしあなたがアルゴリズムの専門家であれば、貴重な提案をいただくか、<a href="https://www.hello-algo.com/chapter_appendix/contribution/">参加して協力</a>していただければと思います</p>
<p>もしあなたがアルゴリズム初心者で、これまでアルゴリズムに触れたことがない、あるいはすでに多少の問題演習の経験はあるものの、データ構造とアルゴリズムについてはまだ曖昧な理解にとどまり、できるかできないかの間を行き来しているなら、本書はまさにあなたのために作られています!</p>
<p>もしすでに一定量の問題演習を積み、ほとんどの問題パターンに慣れているなら、本書はアルゴリズム知識体系復習整理に役立ちます。リポジトリのソースコードは「問題演習ツール」や「アルゴリズム辞典」として用できます。</p>
<p>もしあなたがアルゴリズムの「達人」なら、貴重な提案をいただけることを楽しみにしています。あるいは<a href="https://www.hello-algo.com/chapter_appendix/contribution/">一緒に執筆に参加</a>してください。</p>
<div class="admonition success">
<p class="admonition-title">前提条件</p>
<p>少なくとも一つのプログラミング言語で簡単なコードを書いて読むことができる必要があります。</p>
<p>少なくともいずれか一つの言語でのプログラミング基礎があり、簡単なコードを読んだり書いたりできる必要があります。</p>
</div>
<h2 id="012">0.1.2 &nbsp; 内容構成<a class="headerlink" href="#012" title="Permanent link">&para;</a></h2>
<p>本書の主な内容を下図に示します。</p>
<p>本書の主な内容は以下の図のとおりです。</p>
<ul>
<li><strong>計算量解析</strong>: データ構造とアルゴリズムを評価する側面と方法を探求します。時間計算量と空間計算量を導出する方法、および一般的なタイプと例を扱います</li>
<li><strong>データ構造</strong>: 基本的なデータ型、分類方法、定義、長所と短所、一般的な操作、タイプ、応用、および配列、連結リスト、スタック、キュー、ハッシュテーブル、木、ヒープ、グラフなどのデータ構造の実装方法に焦点を当てます</li>
<li><strong>アルゴリズム</strong>: アルゴリズムを定義し、その長所と短所、効率性、応用シナリオ、問題解決ステップについて議論し、検索、ソート、分割統治、バックトラッキング、動的プログラミング、貪欲アルゴリズムなど、さまざまなアルゴリズムのサンプル問題を含みます</li>
<li><strong>計算量解析</strong>データ構造とアルゴリズムを評価する観点と方法。時間計算量と空間計算量の求め方、代表的な種類、例など</li>
<li><strong>データ構造</strong>:基本データ型とデータ構造の分類方法。配列、連結リスト、スタック、キュー、ハッシュテーブル、木、ヒープ、グラフなどのデータ構造の定義、長所と短所、基本操作、代表的な種類、典型的な応用、実装方法など</li>
<li><strong>アルゴリズム</strong>:探索、ソート、分割統治、バックトラッキング、動的計画法、貪欲法などのアルゴリズムの定義、長所と短所、効率、適用場面、問題を解く手順、例題など</li>
</ul>
<p><img alt="本書の主な内容" class="animation-figure" src="../about_the_book.assets/hello_algo_mindmap.png" /></p>
<p align="center"> 図 0-1 &nbsp; 本書の主な内容 </p>
<h2 id="013">0.1.3 &nbsp; 謝辞<a class="headerlink" href="#013" title="Permanent link">&para;</a></h2>
<p>本書は、オープンソースコミュニティの多の貢献者による共同の努力のもと、継続的に改善されています。時間と労力を注いで執筆に携わってくださったすべての方々に感謝します。貢献者は以下のとおりです(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、KeiichiKasaiKawaiiAsh。</p>
<p>この本のコードレビュー作業は、coderonion, Gonglja, gvenusleo, hpstory, justintse, khoaxuantu, krahets, night-cruise, nuomi1, Reanon and rongyi(アルファベット順)によって完了されました。彼らの時間と力に感謝し、様々な言語のコードの標準化と統一性を確保してくださいました</p>
<p>本書の繁体字中国語版は Shyam-Chen および Dr-XYZ によってレビューされ、英語版は yuelinxin、K3v123、QiLOL、Phoenix0415、SamJin98、yanedie、RafaelCaso、pengchzn、thomasq0magentaqin によってレビューされ、日本語版は eltociear によってレビューされました。彼らの継続的な貢献のおかげで、本書はより幅広い読者層に提供することができています。ここに深く感謝いたします。</p>
<p>この本の制作過程において、多くの方々から貴重な支援をいただきました。これらに限定されませんが:</p>
<p>本書は、オープンソースコミュニティの多の貢献者による共同の努力のもと、継続的に改善されています。時間と労力を注いでくださったすべての執筆者の皆さんに感謝します。お名前は次のとおりです(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、KeiichiKasaiKawaiiAsh。</p>
<p>のコードレビューcoderonion、curtishd、Gongljagvenusleohpstoryjustin-tsekhoaxuantukrahetsnight-cruisenuomi1Reanon rongyi によって行われました(アルファベット順)。彼らが費やしてくれた時間と力に感謝します。各言語のコードの規範性と統一性が保たれているのは、まさに彼らのおかげです</p>
<p>本書の繁体字中国語版は Shyam-Chen Dr-XYZ レビュー、英語版は yuelinxin、K3v123、QiLOL、Phoenix0415、SamJin98、yanedie、RafaelCaso、pengchzn、thomasq0magentaqin レビュー、日本語版は eltociear レビューました。彼らの継続的な貢献があってこそ、本書はより幅広い読者に届けられています。感謝いたします。</p>
<p>本書の ePub 電子書籍生成ツールは zhongfq によって開発されました。彼の貢献に感謝します。読者により自由な読書方法を提供してくれました。</p>
<p>本書の執筆過程で、私は多くの方々の助けを得ました。</p>
<ul>
<li>会社でのメンター、李熙博士に感謝します。ある会話で「早く行動し」と励ましていただき、この本を書く決意を固めることができました</li>
<li>ガールフレンドのBubbleに感謝します。この本の最初の読者として、アルゴリズム初心者の視点から多くの貴重な提案をいただき、この本を初心者により適したものにしてくださいました</li>
<li>Tengbao、Qibao、Feibaoに感謝します。この本のクリエイティブな名前を考えてくださり、みんなが初めて「Hello World!」を書いた時の素晴らしい思い出を呼び起こしてくれました</li>
<li>Xiaoquanに感謝します。知的財産に関する専門的な支援を提供してくださり、このオープンソース本の開発において重要な役割を果たしてくださいました</li>
<li>Sutongに感謝します。この本の美しいカバーとロゴをデザインしてくださり、私の要求で何度も修正を辛抱強く行ってくださいました。</li>
<li>@squidfunk に感謝します。執筆と組版の提案、および彼が開発したオープンソースドキュメントテーマ <a href="https://github.com/squidfunk/mkdocs-material/tree/master">Material-for-MkDocs</a> を提供してくださいました</li>
<li>会社での私の指導教員である李汐博士に感謝します。ある対話の中で「すぐに行動しよう」と励ましてくださり、この本を書く決意を固めることができました</li>
<li>私の恋人であり、本書の最初の読者でもある泡泡に感謝します。アルゴリズム初心者の視点から多くの貴重な提案をしてくれたおかげで、本書はより初心者に適したものになりました</li>
<li>腾宝、琦宝、飞宝が本書に創造性あふれる名前を付けてくれたことに感謝します。みんなが最初のコード行「Hello World!」を書いた美しい記憶を呼び起こしてくれました</li>
<li>校铨が知的財産の面で専門的な支援をしてくれたことに感謝します。これは本オープンソース書籍の改善に重要な役割を果たしました</li>
<li>苏潼が本書の美しい表紙と logo をデザインし、私の完璧主義につき合って何度も辛抱強く修正してくれたことに感謝します;</li>
<li>@squidfunk が組版に関する助言を提供してくれたこと、そして彼が開発したオープンソースドキュメントテーマ <a href="https://github.com/squidfunk/mkdocs-material/tree/master">Material-for-MkDocs</a> に感謝します</li>
</ul>
<p>執筆の過程で、データ構造とアルゴリズムに関する多の教科書や記事を深く研究しました。これらの作品は模範的なモデルとして機能し、この本の内容の正確性と品質を確保してくださいました。先人の方々の貴重な貢献に感謝いたします!</p>
<p>この本は、理論と実践を組み合わせた学習を提唱しており、この点で <a href="https://github.com/d2l-ai/d2l-en">"Dive into Deep Learning"</a> からインスピレーションを受けています。この優れた本をすべての読者に強くお勧めします。</p>
<p><strong>継続的な支援と励ましにより、この興味深い仕事をすることを可能にしてくださった両親に心から感謝いたします</strong></p>
<p>執筆の過程で、私はデータ構造とアルゴリズムに関する多の教や記事を読みました。これらの作品は本書に優れた手本を与え、本書の内容の正確性と品質を支えてくれました。ここに、すべての先生方と先人たちの卓越した貢献に感謝します!</p>
<p>本書は手と頭を同時に使う学習方法を提唱しています。この点で私は<a href="https://github.com/d2l-ai/d2l-zh">『手を動かして学ぶ深層学習』</a>から大きな啓発を受けました。ここで読者の皆さんにこの優れた著作を強くお勧めします。</p>
<p><strong>心から両親に感謝します。いつも支え励ましてくれたからこそ、私はこの興味深いことに取り組む機会を得ることができました</strong></p>
<!-- Source file information -->
@@ -4439,7 +4440,7 @@ aria-label="フッター"
<a
href="../"
class="md-footer__link md-footer__link--prev"
aria-label="前: 第 0 章 &amp;nbsp; 序文"
aria-label="前: 第 0 章 &amp;nbsp; はじめに"
rel="prev"
>
<div class="md-footer__button md-icon">
@@ -4451,7 +4452,7 @@ aria-label="フッター"
</span>
<div class="md-ellipsis">
第 0 章 &nbsp; 序文
第 0 章 &nbsp; はじめに
</div>
</div>
</a>
+34 -34
View File
@@ -6,7 +6,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="アニメーション図解ワンクリック実行データ構造とアルゴリズムチュートリアル">
<meta name="description" content="アニメーション図解ワンクリック実行コードで学べるデータ構造とアルゴリズムの入門書">
<meta name="author" content="krahets">
@@ -39,7 +39,7 @@
<title>第 0 章 序文 - Hello アルゴリズム</title>
<title>第 0 章 はじめに - Hello アルゴリズム</title>
@@ -117,7 +117,7 @@
<path
d="M480 32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9L381.7 53c-48 48-113.1 75-181 75H192 160 64c-35.3 0-64 28.7-64 64v96c0 35.3 28.7 64 64 64l0 128c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V352l8.7 0c67.9 0 133 27 181 75l43.6 43.6c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V300.4c18.6-8.8 32-32.5 32-60.4s-13.4-51.6-32-60.4V32zm-64 76.7V240 371.3C357.2 317.8 280.5 288 200.7 288H192V192h8.7c79.8 0 156.5-29.8 215.3-83.3z" />
</svg>
<span>日本語版審閱者を募集しています!詳細<a href="https://github.com/krahets/hello-algo/blob/main/ja/CONTRIBUTING.md">CONTRIBUTING.md</a>参照してください。</span>
<span>日本語版のレビュアーを募集しています。詳しく<a href="/ja/chapter_appendix/contribution/">こちら</a>ご覧ください。</span>
</div>
</div>
@@ -152,7 +152,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
第 0 章 &nbsp; 序文
第 0 章 &nbsp; はじめに
</span>
</div>
@@ -341,7 +341,7 @@
<span class="md-ellipsis">
はじめに
@@ -358,7 +358,7 @@
<span class="md-nav__icon md-icon"></span>
はじめに
</label>
@@ -620,7 +620,7 @@
<span class="md-ellipsis">
1.1 &nbsp; アルゴリズムはどこにでもある
1.1 &nbsp; アルゴリズムは至るところにある
@@ -648,7 +648,7 @@
<span class="md-ellipsis">
1.2 &nbsp; アルゴリズムとは何か
1.2 &nbsp; アルゴリズムとは
@@ -785,7 +785,7 @@
<span class="md-ellipsis">
2.1 &nbsp; アルゴリズム効率評価
2.1 &nbsp; アルゴリズム効率評価
@@ -1062,7 +1062,7 @@
<span class="md-ellipsis">
3.3 &nbsp; 数値の符号化 *
3.3 &nbsp; 数値エンコーディング *
@@ -1090,7 +1090,7 @@
<span class="md-ellipsis">
3.4 &nbsp; 文字の符号化 *
3.4 &nbsp; 文字エンコーディング *
@@ -1593,7 +1593,7 @@
<span class="md-ellipsis">
第 6 章 &nbsp; ハッシュ
第 6 章 &nbsp; ハッシュテーブル
@@ -1615,7 +1615,7 @@
<span class="md-nav__icon md-icon"></span>
第 6 章 &nbsp; ハッシュ
第 6 章 &nbsp; ハッシュテーブル
</label>
@@ -1637,7 +1637,7 @@
<span class="md-ellipsis">
6.1 &nbsp; ハッシュ
6.1 &nbsp; ハッシュテーブル
@@ -1944,7 +1944,7 @@
<span class="md-ellipsis">
7.5 &nbsp; AVL木 *
7.5 &nbsp; AVL 木 *
@@ -2107,7 +2107,7 @@
<span class="md-ellipsis">
8.2 &nbsp; ヒープ構築操作
8.2 &nbsp; ヒープ構築
@@ -2493,7 +2493,7 @@
<span class="md-ellipsis">
10.2 &nbsp; 二分探索の挿入
10.2 &nbsp; 二分探索の挿入位置
@@ -2549,7 +2549,7 @@
<span class="md-ellipsis">
10.4 &nbsp; ハッシュ最適化戦略
10.4 &nbsp; ハッシュによる最適化戦略
@@ -2577,7 +2577,7 @@
<span class="md-ellipsis">
10.5 &nbsp; 探索アルゴリズムの再認識
10.5 &nbsp; 探索アルゴリズム再考
@@ -3115,7 +3115,7 @@
<span class="md-ellipsis">
12.1 &nbsp; 分割統治アルゴリズム
12.1 &nbsp; 分割統治
@@ -3171,7 +3171,7 @@
<span class="md-ellipsis">
12.3 &nbsp; 木の構築問題
12.3 &nbsp; 二分木の構築問題
@@ -3199,7 +3199,7 @@
<span class="md-ellipsis">
12.4 &nbsp; ハノイの塔問題
12.4 &nbsp; ハノイの塔問題
@@ -3392,7 +3392,7 @@
<span class="md-ellipsis">
13.3 &nbsp; 部分集合和問題
13.3 &nbsp; 部分和問題
@@ -3420,7 +3420,7 @@
<span class="md-ellipsis">
13.4 &nbsp; Nクイーン問題
13.4 &nbsp; n クイーン問題
@@ -3561,7 +3561,7 @@
<span class="md-ellipsis">
14.1 &nbsp; 動的計画法の初歩
14.1 &nbsp; 動的計画法入門
@@ -3589,7 +3589,7 @@
<span class="md-ellipsis">
14.2 &nbsp; DP 問題特性
14.2 &nbsp; 動的計画法の問題特性
@@ -3617,7 +3617,7 @@
<span class="md-ellipsis">
14.3 &nbsp; DP の解法の考え方
14.3 &nbsp; 動的計画法の問題解決の考え方
@@ -3645,7 +3645,7 @@
<span class="md-ellipsis">
14.4 &nbsp; 0-1ナップサック問題
14.4 &nbsp; 0-1 ナップサック問題
@@ -3838,7 +3838,7 @@
<span class="md-ellipsis">
15.1 &nbsp; 貪欲アルゴリズム
15.1 &nbsp; 貪欲
@@ -4083,7 +4083,7 @@
<span class="md-ellipsis">
16.2 &nbsp; 一緒に作に参加する
16.2 &nbsp; 一緒に作に参加しましょう
@@ -4273,12 +4273,12 @@
<!-- Page content -->
<h1 id="0">第 0 章 &nbsp; 序文<a class="headerlink" href="#0" title="Permanent link">&para;</a></h1>
<p><img alt="序文" class="cover-image" src="../assets/covers/chapter_preface.jpg" /></p>
<h1 id="0">第 0 章 &nbsp; はじめに<a class="headerlink" href="#0" title="Permanent link">&para;</a></h1>
<p><img alt="はじめに" class="cover-image" src="../assets/covers/chapter_preface.jpg" /></p>
<div class="admonition abstract">
<p class="admonition-title">Abstract</p>
<p>アルゴリズムは美しい交響曲のようで、コードの一行一行がリズムのように流れています。</p>
<p>この本があなたの心の中で静かに響き、独で深い旋律を残ことを願っています。</p>
<p>アルゴリズムは美しい交響曲のようであり、コードの一行一行が旋律のように流れています。</p>
<p>この本があなたの心の中でそっと響き、独で深い旋律を残してくれることを願っています。</p>
</div>
<h2 id="_1">章の内容<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<ul>
+113 -101
View File
@@ -6,7 +6,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="アニメーション図解ワンクリック実行データ構造とアルゴリズムチュートリアル">
<meta name="description" content="アニメーション図解ワンクリック実行コードで学べるデータ構造とアルゴリズムの入門書">
<meta name="author" content="krahets">
@@ -39,7 +39,7 @@
<title>0.2 読み方 - Hello アルゴリズム</title>
<title>0.2 本書の使い方 - Hello アルゴリズム</title>
@@ -117,7 +117,7 @@
<path
d="M480 32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9L381.7 53c-48 48-113.1 75-181 75H192 160 64c-35.3 0-64 28.7-64 64v96c0 35.3 28.7 64 64 64l0 128c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V352l8.7 0c67.9 0 133 27 181 75l43.6 43.6c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V300.4c18.6-8.8 32-32.5 32-60.4s-13.4-51.6-32-60.4V32zm-64 76.7V240 371.3C357.2 317.8 280.5 288 200.7 288H192V192h8.7c79.8 0 156.5-29.8 215.3-83.3z" />
</svg>
<span>日本語版審閱者を募集しています!詳細<a href="https://github.com/krahets/hello-algo/blob/main/ja/CONTRIBUTING.md">CONTRIBUTING.md</a>参照してください。</span>
<span>日本語版のレビュアーを募集しています。詳しく<a href="/ja/chapter_appendix/contribution/">こちら</a>ご覧ください。</span>
</div>
</div>
@@ -152,7 +152,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
0.2 &nbsp; 読み
0.2 &nbsp; 本書の使い
</span>
</div>
@@ -341,7 +341,7 @@
<span class="md-ellipsis">
はじめに
@@ -358,7 +358,7 @@
<span class="md-nav__icon md-icon"></span>
はじめに
</label>
@@ -544,7 +544,7 @@
<a href="#021" class="md-nav__link">
<span class="md-ellipsis">
0.2.1 &nbsp; 記述規則
0.2.1 &nbsp; 文章スタイルの約束
</span>
</a>
@@ -555,7 +555,7 @@
<a href="#022" class="md-nav__link">
<span class="md-ellipsis">
0.2.2 &nbsp; アニメーション図解による効率的学習
0.2.2 &nbsp; アニメーション図解で効率よく学ぶ
</span>
</a>
@@ -566,7 +566,7 @@
<a href="#023" class="md-nav__link">
<span class="md-ellipsis">
0.2.3 &nbsp; コーディング実践による理解の深化
0.2.3 &nbsp; コード実践で理解を深める
</span>
</a>
@@ -577,7 +577,7 @@
<a href="#024" class="md-nav__link">
<span class="md-ellipsis">
0.2.4 &nbsp; 議論による共同学習
0.2.4 &nbsp; 質問と議論を通じてともに成長する
</span>
</a>
@@ -588,7 +588,7 @@
<a href="#025" class="md-nav__link">
<span class="md-ellipsis">
0.2.5 &nbsp; アルゴリズム学習パス
0.2.5 &nbsp; アルゴリズム学習ロードマップ
</span>
</a>
@@ -723,7 +723,7 @@
<span class="md-ellipsis">
1.1 &nbsp; アルゴリズムはどこにでもある
1.1 &nbsp; アルゴリズムは至るところにある
@@ -751,7 +751,7 @@
<span class="md-ellipsis">
1.2 &nbsp; アルゴリズムとは何か
1.2 &nbsp; アルゴリズムとは
@@ -888,7 +888,7 @@
<span class="md-ellipsis">
2.1 &nbsp; アルゴリズム効率評価
2.1 &nbsp; アルゴリズム効率評価
@@ -1165,7 +1165,7 @@
<span class="md-ellipsis">
3.3 &nbsp; 数値の符号化 *
3.3 &nbsp; 数値エンコーディング *
@@ -1193,7 +1193,7 @@
<span class="md-ellipsis">
3.4 &nbsp; 文字の符号化 *
3.4 &nbsp; 文字エンコーディング *
@@ -1696,7 +1696,7 @@
<span class="md-ellipsis">
第 6 章 &nbsp; ハッシュ
第 6 章 &nbsp; ハッシュテーブル
@@ -1718,7 +1718,7 @@
<span class="md-nav__icon md-icon"></span>
第 6 章 &nbsp; ハッシュ
第 6 章 &nbsp; ハッシュテーブル
</label>
@@ -1740,7 +1740,7 @@
<span class="md-ellipsis">
6.1 &nbsp; ハッシュ
6.1 &nbsp; ハッシュテーブル
@@ -2047,7 +2047,7 @@
<span class="md-ellipsis">
7.5 &nbsp; AVL木 *
7.5 &nbsp; AVL 木 *
@@ -2210,7 +2210,7 @@
<span class="md-ellipsis">
8.2 &nbsp; ヒープ構築操作
8.2 &nbsp; ヒープ構築
@@ -2596,7 +2596,7 @@
<span class="md-ellipsis">
10.2 &nbsp; 二分探索の挿入
10.2 &nbsp; 二分探索の挿入位置
@@ -2652,7 +2652,7 @@
<span class="md-ellipsis">
10.4 &nbsp; ハッシュ最適化戦略
10.4 &nbsp; ハッシュによる最適化戦略
@@ -2680,7 +2680,7 @@
<span class="md-ellipsis">
10.5 &nbsp; 探索アルゴリズムの再認識
10.5 &nbsp; 探索アルゴリズム再考
@@ -3218,7 +3218,7 @@
<span class="md-ellipsis">
12.1 &nbsp; 分割統治アルゴリズム
12.1 &nbsp; 分割統治
@@ -3274,7 +3274,7 @@
<span class="md-ellipsis">
12.3 &nbsp; 木の構築問題
12.3 &nbsp; 二分木の構築問題
@@ -3302,7 +3302,7 @@
<span class="md-ellipsis">
12.4 &nbsp; ハノイの塔問題
12.4 &nbsp; ハノイの塔問題
@@ -3495,7 +3495,7 @@
<span class="md-ellipsis">
13.3 &nbsp; 部分集合和問題
13.3 &nbsp; 部分和問題
@@ -3523,7 +3523,7 @@
<span class="md-ellipsis">
13.4 &nbsp; Nクイーン問題
13.4 &nbsp; n クイーン問題
@@ -3664,7 +3664,7 @@
<span class="md-ellipsis">
14.1 &nbsp; 動的計画法の初歩
14.1 &nbsp; 動的計画法入門
@@ -3692,7 +3692,7 @@
<span class="md-ellipsis">
14.2 &nbsp; DP 問題特性
14.2 &nbsp; 動的計画法の問題特性
@@ -3720,7 +3720,7 @@
<span class="md-ellipsis">
14.3 &nbsp; DP の解法の考え方
14.3 &nbsp; 動的計画法の問題解決の考え方
@@ -3748,7 +3748,7 @@
<span class="md-ellipsis">
14.4 &nbsp; 0-1ナップサック問題
14.4 &nbsp; 0-1 ナップサック問題
@@ -3941,7 +3941,7 @@
<span class="md-ellipsis">
15.1 &nbsp; 貪欲アルゴリズム
15.1 &nbsp; 貪欲
@@ -4186,7 +4186,7 @@
<span class="md-ellipsis">
16.2 &nbsp; 一緒に作に参加する
16.2 &nbsp; 一緒に作に参加しましょう
@@ -4332,7 +4332,7 @@
<a href="#021" class="md-nav__link">
<span class="md-ellipsis">
0.2.1 &nbsp; 記述規則
0.2.1 &nbsp; 文章スタイルの約束
</span>
</a>
@@ -4343,7 +4343,7 @@
<a href="#022" class="md-nav__link">
<span class="md-ellipsis">
0.2.2 &nbsp; アニメーション図解による効率的学習
0.2.2 &nbsp; アニメーション図解で効率よく学ぶ
</span>
</a>
@@ -4354,7 +4354,7 @@
<a href="#023" class="md-nav__link">
<span class="md-ellipsis">
0.2.3 &nbsp; コーディング実践による理解の深化
0.2.3 &nbsp; コード実践で理解を深める
</span>
</a>
@@ -4365,7 +4365,7 @@
<a href="#024" class="md-nav__link">
<span class="md-ellipsis">
0.2.4 &nbsp; 議論による共同学習
0.2.4 &nbsp; 質問と議論を通じてともに成長する
</span>
</a>
@@ -4376,7 +4376,7 @@
<a href="#025" class="md-nav__link">
<span class="md-ellipsis">
0.2.5 &nbsp; アルゴリズム学習パス
0.2.5 &nbsp; アルゴリズム学習ロードマップ
</span>
</a>
@@ -4420,26 +4420,26 @@
<!-- Page content -->
<h1 id="02">0.2 &nbsp; 読み<a class="headerlink" href="#02" title="Permanent link">&para;</a></h1>
<h1 id="02">0.2 &nbsp; 本書の使い<a class="headerlink" href="#02" title="Permanent link">&para;</a></h1>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>良の読書体験ために、このセクションを通読することをおめします。</p>
<p>適な読書体験を得るために、本節の内容を一通り読むことをおすすめします。</p>
</div>
<h2 id="021">0.2.1 &nbsp; 記述規則<a class="headerlink" href="#021" title="Permanent link">&para;</a></h2>
<h2 id="021">0.2.1 &nbsp; 文章スタイルの約束<a class="headerlink" href="#021" title="Permanent link">&para;</a></h2>
<ul>
<li>タイトルの後に「*」が付いた章は任意であり、比較的難易度の高い内容が含まれています。時間に制約がある場合は、これらをスキップすることをお勧めします</li>
<li>技術用語は太字(印刷版およびPDF版)または下線(Web版)で表示されます。えば<u>配列</u>などです。技術文書をより良く理解するために、これらに慣れることをおめします。</li>
<li>**太字のテキスト**は重要な内容や要約文を示し、特別な注意を払う価値があります</li>
<li>特定の意味を持つ単語や句は「引用符」で示され、曖昧さを避けます。</li>
<li>プログラミング言語間で一致しない用語については、この本はPythonに従います。えば、<code>null</code>を意味するために<code>None</code>を使用します。</li>
<li>この本は、よりコンパクトなコンテンツレイアウトと引き換えに、プログラミング言語のコメント規約を部分的に無視しています。コメントは主に3つのタイプで構成されていますタイトルコメント、内容コメント、複数行コメント。</li>
<li>見出しの後に <code>*</code> が付いているのは選読章で、内容は比較的難しめです。時間が限られている場合は、先に読み飛ばしてもかまいません</li>
<li>専門用語は太字(紙書籍版と PDF 版)または下線付きWeb 版)で示します。たとえば<u>配列array</u>のようなものです。文献を読む際に役立つため、覚えておくことをおすすめします。</li>
<li>重要な内容やまとめの文は <strong>太字</strong> で示します。これらの文章には特に注意してください</li>
<li>特定の意味を持つ語句には“引用符”を付け、曖昧さを避けます。</li>
<li>プログラミング言語ごとに用語が一致しない場合、本書では Python を基準とします。たとえば、“空”を表すのに <code>None</code> を使ます。</li>
<li>書では、よりコンパクトなレイアウトのために、言語ごとのコメント規約を一部省略しています。コメントは主に3種類ありますタイトルコメント、内容コメント、複数行コメントです</li>
</ul>
<div class="tabbed-set tabbed-alternate" data-tabs="1:12"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><input id="__tabbed_1_7" name="__tabbed_1" type="radio" /><input id="__tabbed_1_8" name="__tabbed_1" type="radio" /><input id="__tabbed_1_9" name="__tabbed_1" type="radio" /><input id="__tabbed_1_10" name="__tabbed_1" type="radio" /><input id="__tabbed_1_11" name="__tabbed_1" type="radio" /><input id="__tabbed_1_12" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Python</label><label for="__tabbed_1_2">C++</label><label for="__tabbed_1_3">Java</label><label for="__tabbed_1_4">C#</label><label for="__tabbed_1_5">Go</label><label for="__tabbed_1_6">Swift</label><label for="__tabbed_1_7">JS</label><label for="__tabbed_1_8">TS</label><label for="__tabbed_1_9">Dart</label><label for="__tabbed_1_10">Rust</label><label for="__tabbed_1_11">C</label><label for="__tabbed_1_12">Kotlin</label></div>
<div class="tabbed-set tabbed-alternate" data-tabs="1:13"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><input id="__tabbed_1_7" name="__tabbed_1" type="radio" /><input id="__tabbed_1_8" name="__tabbed_1" type="radio" /><input id="__tabbed_1_9" name="__tabbed_1" type="radio" /><input id="__tabbed_1_10" name="__tabbed_1" type="radio" /><input id="__tabbed_1_11" name="__tabbed_1" type="radio" /><input id="__tabbed_1_12" name="__tabbed_1" type="radio" /><input id="__tabbed_1_13" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Python</label><label for="__tabbed_1_2">C++</label><label for="__tabbed_1_3">Java</label><label for="__tabbed_1_4">C#</label><label for="__tabbed_1_5">Go</label><label for="__tabbed_1_6">Swift</label><label for="__tabbed_1_7">JS</label><label for="__tabbed_1_8">TS</label><label for="__tabbed_1_9">Dart</label><label for="__tabbed_1_10">Rust</label><label for="__tabbed_1_11">C</label><label for="__tabbed_1_12">Kotlin</label><label for="__tabbed_1_13">Ruby</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="sd">&quot;&quot;&quot;関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント&quot;&quot;&quot;</span>
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="sd">&quot;&quot;&quot;タイトルコメント。関数、クラス、テストケースなどを示すために使います&quot;&quot;&quot;</span>
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="c1"># 詳細を説明するためのコメント</span>
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="c1"># 内容コメント。コードを詳しく説明するために使います</span>
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a>
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="sd">&quot;&quot;&quot;</span>
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="sd">複数行</span>
@@ -4448,9 +4448,9 @@
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="cm">/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */</span>
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="cm">/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */</span>
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="c1">// 詳細を説明するためのコメント</span>
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="c1">// 内容コメント。コードを詳しく説明するために使います</span>
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a>
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="cm">/**</span>
<a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a><span class="cm"> * 複数行</span>
@@ -4459,9 +4459,9 @@
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="cm">/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */</span>
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="cm">/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */</span>
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="c1">// 詳細を説明するためのコメント</span>
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="c1">// 内容コメント。コードを詳しく説明するために使います</span>
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a>
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="cm">/**</span>
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="cm"> * 複数行</span>
@@ -4470,9 +4470,9 @@
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="cm">/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */</span>
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="cm">/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */</span>
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="c1">// 詳細を説明するためのコメント</span>
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="c1">// 内容コメント。コードを詳しく説明するために使います</span>
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a>
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a><span class="cm">/**</span>
<a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a><span class="cm"> * 複数行</span>
@@ -4481,9 +4481,9 @@
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="cm">/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */</span>
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="cm">/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */</span>
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="c1">// 詳細を説明するためのコメント</span>
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="c1">// 内容コメント。コードを詳しく説明するために使います</span>
<a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a>
<a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a><span class="cm">/**</span>
<a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a><span class="cm"> * 複数行</span>
@@ -4492,9 +4492,9 @@
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="cm">/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */</span>
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="cm">/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */</span>
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a>
<a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="c1">// 詳細を説明するためのコメント</span>
<a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="c1">// 内容コメント。コードを詳しく説明するために使います</span>
<a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a>
<a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a><span class="cm">/**</span>
<a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a><span class="cm"> * 複数行</span>
@@ -4503,9 +4503,9 @@
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="cm">/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */</span>
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="cm">/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */</span>
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a>
<a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="c1">// 詳細を説明するためのコメント</span>
<a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="c1">// 内容コメント。コードを詳しく説明するために使います</span>
<a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a>
<a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a><span class="cm">/**</span>
<a id="__codelineno-6-6" name="__codelineno-6-6" href="#__codelineno-6-6"></a><span class="cm"> * 複数行</span>
@@ -4514,9 +4514,9 @@
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="cm">/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */</span>
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="cm">/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */</span>
<a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a>
<a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="c1">// 詳細を説明するためのコメント</span>
<a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="c1">// 内容コメント。コードを詳しく説明するために使います</span>
<a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a>
<a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a><span class="cm">/**</span>
<a id="__codelineno-7-6" name="__codelineno-7-6" href="#__codelineno-7-6"></a><span class="cm"> * 複数行</span>
@@ -4525,9 +4525,9 @@
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="cm">/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */</span>
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="cm">/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */</span>
<a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>
<a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="c1">// 詳細を説明するためのコメント</span>
<a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="c1">// 内容コメント。コードを詳しく説明するために使います</span>
<a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a>
<a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a><span class="cm">/**</span>
<a id="__codelineno-8-6" name="__codelineno-8-6" href="#__codelineno-8-6"></a><span class="cm"> * 複数行</span>
@@ -4536,9 +4536,9 @@
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="cm">/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */</span>
<div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="cm">/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */</span>
<a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>
<a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="c1">// 詳細を説明するためのコメント</span>
<a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="c1">// 内容コメント。コードを詳しく説明するために使います</span>
<a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a>
<a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a><span class="sd">/**</span>
<a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a><span class="sd"> * 複数行</span>
@@ -4547,9 +4547,9 @@
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="cm">/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */</span>
<div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="cm">/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */</span>
<a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a>
<a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a><span class="c1">// 詳細を説明するためのコメント</span>
<a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a><span class="c1">// 内容コメント。コードを詳しく説明するために使います</span>
<a id="__codelineno-10-4" name="__codelineno-10-4" href="#__codelineno-10-4"></a>
<a id="__codelineno-10-5" name="__codelineno-10-5" href="#__codelineno-10-5"></a><span class="cm">/**</span>
<a id="__codelineno-10-6" name="__codelineno-10-6" href="#__codelineno-10-6"></a><span class="cm"> * 複数行</span>
@@ -4558,9 +4558,9 @@
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="cm">/* 関数、クラス、テストサンプルなどをラベル付けするためのヘッダーコメント */</span>
<div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="cm">/* タイトルコメント。関数、クラス、テストケースなどを示すために使います */</span>
<a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a>
<a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="c1">// 詳細を説明するためのコメント</span>
<a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="c1">// 内容コメント。コードを詳しく説明するために使います</span>
<a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a>
<a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a><span class="cm">/**</span>
<a id="__codelineno-11-6" name="__codelineno-11-6" href="#__codelineno-11-6"></a><span class="cm"> * 複数行</span>
@@ -4568,51 +4568,63 @@
<a id="__codelineno-11-8" name="__codelineno-11-8" href="#__codelineno-11-8"></a><span class="cm"> */</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a><span class="c1">### タイトルコメント。関数、クラス、テストケースなどを示すために使います ###</span>
<a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a>
<a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a><span class="c1"># 内容コメント。コードを詳しく説明するために使います</span>
<a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a>
<a id="__codelineno-12-5" name="__codelineno-12-5" href="#__codelineno-12-5"></a><span class="c1"># 複数行</span>
<a id="__codelineno-12-6" name="__codelineno-12-6" href="#__codelineno-12-6"></a><span class="c1"># コメント</span>
</code></pre></div>
</div>
</div>
<h2 id="022">0.2.2 &nbsp; アニメーション図解による効率的学習<a class="headerlink" href="#022" title="Permanent link">&para;</a></h2>
<p>テキストと比較して、動画や画像は情報密度が高く、より構造化されており、理解しやすくなっています。この本では、<strong>重要で難しい概念は主にアニメーションと図解を通じて提示され</strong>、テキストは説明と補足として機能します。</p>
<p>下図に示すようなアニメーションや図解のある内容に遭遇した場合、<strong>図の理解を優先し、テキストを補足として</strong>、両方を統合して包括的な理解を得てください</p>
</div>
<h2 id="022">0.2.2 &nbsp; アニメーション図解で効率よく学ぶ<a class="headerlink" href="#022" title="Permanent link">&para;</a></h2>
<p>文字と比べて、動画や画像は情報密度と構造化の度合いが高く、理解しやすいものです。本書では、<strong>重要かつ難解な知識は主にアニメーションによる図解で示し</strong>、文章は説明と補足を担います</p>
<p>本書を読んでいて、ある内容に以下の図のようなアニメーション図解がある場合は、<strong>図を主、文章を従として</strong>、両方を合わせて理解してください。</p>
<p><img alt="アニメーション図解の例" class="animation-figure" src="../../index.assets/animation.gif" /></p>
<p align="center"> 図 0-2 &nbsp; アニメーション図解の例 </p>
<h2 id="023">0.2.3 &nbsp; コーディング実践による理解の深化<a class="headerlink" href="#023" title="Permanent link">&para;</a></h2>
<p>この本のソースコードは<a href="https://github.com/krahets/hello-algo">GitHubリポジトリ</a>でホストされています。下図に示すように、<strong>ソースコードにはテスト例が付属しており、ワンクリックで実行できます</strong></p>
<p>時間に余裕がある場合は<strong>自分でコードをタイプすることをおめします</strong>。時間がない場合は、少なくともすべてのコードを読んで実行してください。</p>
<p>コードを読むだけと比較して、コードを書くことは多くの場合、より多くの学習をもたらします。<strong>実践による学習こそが真の学習方法です。</strong></p>
<h2 id="023">0.2.3 &nbsp; コード実践で理解を深める<a class="headerlink" href="#023" title="Permanent link">&para;</a></h2>
<p>本書のサンプルコードは <a href="https://github.com/krahets/hello-algo">GitHub リポジトリ</a> で管理されています。以下の図のように、<strong>ソースコードにはテストケースが付いており、ワンクリックで実行できます</strong></p>
<p>時間に余裕があれば<strong>コードを見ながら自分で一度書いてみることをおすすめします</strong>学習時間が限られている場合でも、少なくともすべてのコードに目を通し、実行してください。</p>
<p>コードを読むのに比べて、書く過程のほうが得られるものは多いものです。<strong>手を動かしてこそ、本当に学んだことになります</strong></p>
<p><img alt="コード実行例" class="animation-figure" src="../../index.assets/running_code.gif" /></p>
<p align="center"> 図 0-3 &nbsp; コード実行例 </p>
<p>コードを実行するための設定には、主に3つのステップが含まれます。</p>
<p><strong>ステップ1:ローカルプログラミング環境をインストール</strong>。付録の<a href="https://www.hello-algo.com/chapter_appendix/installation/">チュートリアル</a>に従ってインストールするか、すでにインストールされている場合はこのステップをスキップしてください</p>
<p><strong>ステップ2:コードリポジトリをクローンまたはダウンロード</strong><a href="https://github.com/krahets/hello-algo">GitHubリポジトリ</a>を訪問してください。</p>
<p><a href="https://git-scm.com/downloads">Git</a>がインストールされている場合は、次のコマンドを使用してリポジトリをクローンします:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/krahets/hello-algo.git
<p>コードを実行する前準備は主に3ステップす。</p>
<p><strong>第1ステップ:ローカルプログラミング環境をインストールする</strong>。付録の<a href="https://www.hello-algo.com/chapter_appendix/installation/">チュートリアル</a>を参照してインストールしてください。すでにインストール済みであれば、この手順は省略できます</p>
<p><strong>第2ステップ:コードリポジトリをクローンまたはダウンロードする</strong> <a href="https://github.com/krahets/hello-algo">GitHub リポジトリ</a> にアクセスしてください。すでに <a href="https://git-scm.com/downloads">Git</a> をインストールしている場合は、次のコマンドでこのリポジトリをクローンできます:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/krahets/hello-algo.git
</code></pre></div>
<p>または、下図に示す場所にある「Download ZIPボタンをクリックし、コード圧縮ZIPファイルとして直接ダウンロードすることもできます。その後、ローカルで展開するだけです。</p>
<p>もちろん、以下の図に示す場所で“Download ZIPボタンをクリックし、コード圧縮ファイル直接ダウンロードしてローカルで展開することもできます。</p>
<p><img alt="リポジトリのクローンとコードのダウンロード" class="animation-figure" src="../suggestions.assets/download_code.png" /></p>
<p align="center"> 図 0-4 &nbsp; リポジトリのクローンとコードのダウンロード </p>
<p><strong>ステップ3:ソースコードを実行</strong>下図に示すように、上部にファイル名が記載されたコードブロックについては、リポジトリの<code>codes</code>フォルダ対応するソースコードファイルを見つけることができます。これらのファイルはワンクリックで実行でき、不要なデバッグ時間を節約し、学習に集中できます。</p>
<p><strong>第3ステップ:ソースコードを実行する</strong>以下の図のように、上部にファイル名が表示されているコードブロックについては、リポジトリの <code>codes</code> フォルダ内に対応するソースコードファイルがあります。ソースコードファイルはワンクリックで実行できるため、不要なデバッグ時間を減らし、学習内容に集中できます。</p>
<p><img alt="コードブロックと対応するソースコードファイル" class="animation-figure" src="../suggestions.assets/code_md_to_repo.png" /></p>
<p align="center"> 図 0-5 &nbsp; コードブロックと対応するソースコードファイル </p>
<h2 id="024">0.2.4 &nbsp; 議論による共同学習<a class="headerlink" href="#024" title="Permanent link">&para;</a></h2>
<p>この本を読んでいる間、学べなかった点を飛ばさないでください。<strong>コメントセクションで気軽に質問してください</strong>。喜んでお答えし、通常2日以内に回答できます。</p>
<p>下図に示すように、各章の下部にコメントセクションがあります。これらのコメントに注意を払うことをお勧めします。他の人が遭遇した問題を知ることで、知識のギャップを特定し、より深い思索を促すだけでなく、仲間の読者の質問に答えたり、洞察を共有したり、相互の向上を促進したりすることで寛大に貢献することも招待します。</p>
<p><img alt="コメントセクションの例" class="animation-figure" src="../../index.assets/comment.gif" /></p>
<p align="center"> 図 0-6 &nbsp; コメントセクションの例 </p>
<p>ローカルでコードを実行するだけでなく、<strong>Web 版では Python コードの可視化実行にも対応しています</strong><a href="https://pythontutor.com/">pythontutor</a> を利用)。以下の図のように、コードブロックの下にある“可視化実行”をクリックすると表示を展開し、アルゴリズムコードの実行過程を観察できます。また、“全画面表示”をクリックすると、より見やすい閲覧体験が得られます。</p>
<p><img alt="Python コードの可視化実行" class="animation-figure" src="../suggestions.assets/pythontutor_example.png" /></p>
<p align="center"> 図 0-6 &nbsp; Python コードの可視化実行 </p>
<h2 id="025">0.2.5 &nbsp; アルゴリズム学習パス<a class="headerlink" href="#025" title="Permanent link">&para;</a></h2>
<p>全体的に、データ構造とアルゴリズムをマスターする旅は3つの段階に分けることができます</p>
<h2 id="024">0.2.4 &nbsp; 質問と議論を通じてともに成長する<a class="headerlink" href="#024" title="Permanent link">&para;</a></h2>
<p>本書を読んでいて、理解できていない知識点を安易に読み飛ばさないでください。<strong>コメント欄で気軽に質問してください</strong>。私と仲間たちが誠意をもって回答し、通常は 2 日以内に返信します</p>
<p>以下の図のように、Web 版では各章の下部にコメント欄があります。ぜひコメント欄の内容にも目を通してください。一方では、みんなが直面した問題を知ることで知識の抜けを補い、より深い思考を促せます。もう一方では、ほかの仲間の質問にも積極的に答え、見解を共有し、互いの成長を助けてほしいと思います。</p>
<p><img alt="コメント欄の例" class="animation-figure" src="../../index.assets/comment.gif" /></p>
<p align="center"> 図 0-7 &nbsp; コメント欄の例 </p>
<h2 id="025">0.2.5 &nbsp; アルゴリズム学習ロードマップ<a class="headerlink" href="#025" title="Permanent link">&para;</a></h2>
<p>全体として見ると、データ構造とアルゴリズムの学習過程は 3 つの段階に分けられます。</p>
<ol>
<li><strong>段階1:アルゴリズム入門</strong>。さまざまなデータ構造の特と使用法に慣れ、異なるアルゴリズムの原理、プロセス、用途、効率について学ぶ必要があります。</li>
<li><strong>段階2:アルゴリズム問題の練習</strong><a href="https://leetcode.cn/studyplan/coding-interviews/">Sword for Offer</a><a href="https://leetcode.cn/studyplan/top-100-liked/">LeetCode Hot 100</a>などの人気のある問題から始めることをお勧めし、少なくとも100問を蓄積して主流のアルゴリズム問題に慣れることです。練習を始めると忘却が課題になる可能性がありますが、これは正常なことですのでご安心ください。「エビングハウスの忘却曲線」に従って問題を復習することができ、通常3〜5回の反復の後、それらを覚えることができるでしょう</li>
<li><strong>段階3:知識体系構築</strong>。学習面では、アルゴリズムコラム記事、解法フレームワーク、アルゴリズム教科書を読んで知識体系を継続的に豊かにすることができます。練習の面では、トピック別分類、一つの問題に対する複数の解法、複数の問題に対する一つの解法など、高度な戦略を試すことができます。これらの戦略に関する洞察は、さまざまなコミュニティで見つけることができます。</li>
<li><strong>第 1 段階:アルゴリズム入門</strong>。さまざまなデータ構造の特と使い方に慣れ、異なるアルゴリズムの原理、流れ、用途、効率などを学ぶ必要があります。</li>
<li><strong>第 2 段階:アルゴリズム問題を解く</strong>まずは人気の高い問題から取り組み、少なくとも 100 問は蓄積して主流のアルゴリズム問題に慣れることをおすすめします。最初のうちは、“知識の忘却が課題になるかもしれませんが、心配はいりません。これはごく自然なことです。“エビングハウスの忘却曲線”に沿って問題を復習すれば、通常は 3~5 回繰り返すことでしっかり記憶に定着します。おすすめの問題リストと学習計画は、この <a href="https://github.com/krahets/LeetCode-Book">GitHub リポジトリ</a> を参照してください</li>
<li><strong>第 3 段階:知識体系構築する</strong>。学習面では、アルゴリズムの連載記事、解法フレームワーク、教材などを読むことで、知識体系を継続的に充実させられます。問題演習の面では、トピック別分類、1 問多解、1 解多題といった発展的な戦略も試せます。関連する学習ノウハウは各コミュニティで見つけられます。</li>
</ol>
<p>下図に示すように、この本は主に「段階1」をカバーしており、段階2と3により効率的に取り組むのに役立つことを目的としています。</p>
<p><img alt="アルゴリズム学習パス" class="animation-figure" src="../suggestions.assets/learning_route.png" /></p>
<p align="center"> 図 0-7 &nbsp; アルゴリズム学習パス </p>
<p>以下の図のように、本書の内容は主に“第 1 段階”を扱っており、第 2 段階と第 3 段階の学習をより効率的に進める助けとなることを目的としています。</p>
<p><img alt="アルゴリズム学習ロードマップ" class="animation-figure" src="../suggestions.assets/learning_route.png" /></p>
<p align="center"> 図 0-8 &nbsp; アルゴリズム学習ロードマップ </p>
<!-- Source file information -->
+105 -36
View File
@@ -6,7 +6,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="アニメーション図解ワンクリック実行データ構造とアルゴリズムチュートリアル">
<meta name="description" content="アニメーション図解ワンクリック実行コードで学べるデータ構造とアルゴリズムの入門書">
<meta name="author" content="krahets">
@@ -117,7 +117,7 @@
<path
d="M480 32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9L381.7 53c-48 48-113.1 75-181 75H192 160 64c-35.3 0-64 28.7-64 64v96c0 35.3 28.7 64 64 64l0 128c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V352l8.7 0c67.9 0 133 27 181 75l43.6 43.6c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V300.4c18.6-8.8 32-32.5 32-60.4s-13.4-51.6-32-60.4V32zm-64 76.7V240 371.3C357.2 317.8 280.5 288 200.7 288H192V192h8.7c79.8 0 156.5-29.8 215.3-83.3z" />
</svg>
<span>日本語版審閱者を募集しています!詳細<a href="https://github.com/krahets/hello-algo/blob/main/ja/CONTRIBUTING.md">CONTRIBUTING.md</a>参照してください。</span>
<span>日本語版のレビュアーを募集しています。詳しく<a href="/ja/chapter_appendix/contribution/">こちら</a>ご覧ください。</span>
</div>
</div>
@@ -341,7 +341,7 @@
<span class="md-ellipsis">
はじめに
@@ -358,7 +358,7 @@
<span class="md-nav__icon md-icon"></span>
はじめに
</label>
@@ -517,6 +517,24 @@
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
0.3 &nbsp; まとめ
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="././" class="md-nav__link md-nav__link--active">
@@ -534,6 +552,37 @@
</a>
<nav class="md-nav md-nav--secondary" aria-label="目次">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
目次
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#1" class="md-nav__link">
<span class="md-ellipsis">
1. &nbsp; 重要ポイントの振り返り
</span>
</a>
</li>
</ul>
</nav>
</li>
@@ -630,7 +679,7 @@
<span class="md-ellipsis">
1.1 &nbsp; アルゴリズムはどこにでもある
1.1 &nbsp; アルゴリズムは至るところにある
@@ -658,7 +707,7 @@
<span class="md-ellipsis">
1.2 &nbsp; アルゴリズムとは何か
1.2 &nbsp; アルゴリズムとは
@@ -795,7 +844,7 @@
<span class="md-ellipsis">
2.1 &nbsp; アルゴリズム効率評価
2.1 &nbsp; アルゴリズム効率評価
@@ -1072,7 +1121,7 @@
<span class="md-ellipsis">
3.3 &nbsp; 数値の符号化 *
3.3 &nbsp; 数値エンコーディング *
@@ -1100,7 +1149,7 @@
<span class="md-ellipsis">
3.4 &nbsp; 文字の符号化 *
3.4 &nbsp; 文字エンコーディング *
@@ -1603,7 +1652,7 @@
<span class="md-ellipsis">
第 6 章 &nbsp; ハッシュ
第 6 章 &nbsp; ハッシュテーブル
@@ -1625,7 +1674,7 @@
<span class="md-nav__icon md-icon"></span>
第 6 章 &nbsp; ハッシュ
第 6 章 &nbsp; ハッシュテーブル
</label>
@@ -1647,7 +1696,7 @@
<span class="md-ellipsis">
6.1 &nbsp; ハッシュ
6.1 &nbsp; ハッシュテーブル
@@ -1954,7 +2003,7 @@
<span class="md-ellipsis">
7.5 &nbsp; AVL木 *
7.5 &nbsp; AVL 木 *
@@ -2117,7 +2166,7 @@
<span class="md-ellipsis">
8.2 &nbsp; ヒープ構築操作
8.2 &nbsp; ヒープ構築
@@ -2503,7 +2552,7 @@
<span class="md-ellipsis">
10.2 &nbsp; 二分探索の挿入
10.2 &nbsp; 二分探索の挿入位置
@@ -2559,7 +2608,7 @@
<span class="md-ellipsis">
10.4 &nbsp; ハッシュ最適化戦略
10.4 &nbsp; ハッシュによる最適化戦略
@@ -2587,7 +2636,7 @@
<span class="md-ellipsis">
10.5 &nbsp; 探索アルゴリズムの再認識
10.5 &nbsp; 探索アルゴリズム再考
@@ -3125,7 +3174,7 @@
<span class="md-ellipsis">
12.1 &nbsp; 分割統治アルゴリズム
12.1 &nbsp; 分割統治
@@ -3181,7 +3230,7 @@
<span class="md-ellipsis">
12.3 &nbsp; 木の構築問題
12.3 &nbsp; 二分木の構築問題
@@ -3209,7 +3258,7 @@
<span class="md-ellipsis">
12.4 &nbsp; ハノイの塔問題
12.4 &nbsp; ハノイの塔問題
@@ -3402,7 +3451,7 @@
<span class="md-ellipsis">
13.3 &nbsp; 部分集合和問題
13.3 &nbsp; 部分和問題
@@ -3430,7 +3479,7 @@
<span class="md-ellipsis">
13.4 &nbsp; Nクイーン問題
13.4 &nbsp; n クイーン問題
@@ -3571,7 +3620,7 @@
<span class="md-ellipsis">
14.1 &nbsp; 動的計画法の初歩
14.1 &nbsp; 動的計画法入門
@@ -3599,7 +3648,7 @@
<span class="md-ellipsis">
14.2 &nbsp; DP 問題特性
14.2 &nbsp; 動的計画法の問題特性
@@ -3627,7 +3676,7 @@
<span class="md-ellipsis">
14.3 &nbsp; DP の解法の考え方
14.3 &nbsp; 動的計画法の問題解決の考え方
@@ -3655,7 +3704,7 @@
<span class="md-ellipsis">
14.4 &nbsp; 0-1ナップサック問題
14.4 &nbsp; 0-1 ナップサック問題
@@ -3848,7 +3897,7 @@
<span class="md-ellipsis">
15.1 &nbsp; 貪欲アルゴリズム
15.1 &nbsp; 貪欲
@@ -4093,7 +4142,7 @@
<span class="md-ellipsis">
16.2 &nbsp; 一緒に作に参加する
16.2 &nbsp; 一緒に作に参加しましょう
@@ -4229,6 +4278,25 @@
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
目次
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#1" class="md-nav__link">
<span class="md-ellipsis">
1. &nbsp; 重要ポイントの振り返り
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
@@ -4265,13 +4333,14 @@
<!-- Page content -->
<h1 id="03">0.3 &nbsp; まとめ<a class="headerlink" href="#03" title="Permanent link">&para;</a></h1>
<h3 id="1">1. &nbsp; 重要ポイントの振り返り<a class="headerlink" href="#1" title="Permanent link">&para;</a></h3>
<ul>
<li>この本の主な読者はアルゴリズムの初心者です。すでに基本的な知識をお持ちの場合、この本はアルゴリズム知識を体系的に復習するのに役立ち、この本のソースコードは「コーディングツールキット」としても使用できます。</li>
<li>この本は3つの主要なセクション、計算量解析、データ構造、アルゴリズムで構成されており、この分野のほとんどのトピックをカバーしています。</li>
<li>アルゴリズム初心者にとって、多くの回り道や一般的な落とし穴を避けるために、初期段階で入門書を読むことが重要です。</li>
<li>本書のアニメーション図は通常、重要なポイントと難しい知識を紹介するために使用されます。本を読む際はこれらにより多く注意を払う必要があります。</li>
<li>実践はプログラミングを学ぶ最良の方法です。ソースコードを実行し、自分でコードをタイプすることを強く勧めます。</li>
<li>この本のWeb版の各章には議論セクションがあり、いつでも質問や洞察を共有することを歓迎します。</li>
<li>の主な対象読者はアルゴリズム初学者です。すでにある程度の基礎がある場合でも、本書はアルゴリズム知識を体系的に振り返る助けとなり、書中のソースコードは「問題演習用ツール集」としても用できます。</li>
<li>本書の内容は主に計算量解析、データ構造、アルゴリズムの三部からなり、この分野の大部分のテーマを網羅しています。</li>
<li>アルゴリズム初心者にとって、学習初期段階で入門書を読むことは非常に重要であり、多くの遠回りを避けられます。</li>
<li>本書のアニメーション図は通常、重要な知識や難しい知識を紹介するために用いられます。本を読む際はこれらの内容により多く注意を払うべきです。</li>
<li>実践はプログラミングを学ぶ最良の方法です。ソースコードを実行し、実際に自分でコードを書くことを強く勧めます。</li>
<li>のWeb版の各章にはコメント欄が設けられており、疑問や見解をいつでも共有することを歓迎します。</li>
</ul>
<!-- Source file information -->
@@ -4319,7 +4388,7 @@ aria-label="フッター"
<a
href="../../chapter_introduction/"
class="md-footer__link md-footer__link--next"
aria-label="次: 第 1 章 &amp;nbsp; アルゴリズムとの出会い"
aria-label="次: 第 1 章 &amp;nbsp; アルゴリズム入門"
rel="next"
>
<div class="md-footer__title">
@@ -4327,7 +4396,7 @@ aria-label="フッター"
</span>
<div class="md-ellipsis">
第 1 章 &nbsp; アルゴリズムとの出会い
第 1 章 &nbsp; アルゴリズム入門
</div>
</div>
<div class="md-footer__button md-icon">