mirror of
https://github.com/krahets/hello-algo.git
synced 2026-11-03 06:04:19 +08:00
deploy
This commit is contained in:
@@ -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">
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
|
||||
|
||||
<title>3.1 データ構造の分類 - Hello アルゴリズム</title>
|
||||
<title>3.1 データ構造の分類 - Hello Algo</title>
|
||||
|
||||
|
||||
|
||||
@@ -113,17 +113,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="banner-svg">
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.-->
|
||||
<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="/ja/chapter_appendix/contribution/">こちら</a> をご覧ください。</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</aside>
|
||||
@@ -137,9 +126,9 @@
|
||||
|
||||
<header class="md-header md-header--shadow" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="ヘッダー">
|
||||
<a href="../.." title="Hello アルゴリズム" class="md-header__button md-logo" aria-label="Hello アルゴリズム" data-md-component="logo">
|
||||
<a href="../.." title="Hello Algo" class="md-header__button md-logo" aria-label="Hello Algo" data-md-component="logo">
|
||||
|
||||
<img src="../../assets/images/logo.svg" alt="Hello アルゴリズム">
|
||||
<img src="../../assets/images/logo.svg" alt="Hello Algo">
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer" aria-label="ナビゲーション">
|
||||
@@ -150,7 +139,7 @@
|
||||
<div class="md-header__ellipsis">
|
||||
<div class="md-header__topic">
|
||||
<span class="md-ellipsis">
|
||||
Hello アルゴリズム
|
||||
Hello Algo
|
||||
</span>
|
||||
</div>
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
@@ -169,9 +158,9 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="none" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="teal" aria-label="ダークモード" type="radio" name="__palette" id="__palette_0">
|
||||
<input class="md-option" data-md-color-media="none" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="teal" aria-label="ダークモードに切り替える" type="radio" name="__palette" id="__palette_0">
|
||||
|
||||
<label class="md-header__button md-icon" title="ダークモード" for="__palette_1" hidden>
|
||||
<label class="md-header__button md-icon" title="ダークモードに切り替える" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.5 2c-1.79 1.15-3 3.18-3 5.5s1.21 4.35 3.03 5.5C4.46 13 2 10.54 2 7.5A5.5 5.5 0 0 1 7.5 2m11.57 1.5 1.43 1.43L4.93 20.5 3.5 19.07zm-6.18 2.43L11.41 5 9.97 6l.42-1.7L9 3.24l1.75-.12.58-1.65L12 3.1l1.73.03-1.35 1.13zm-3.3 3.61-1.16-.73-1.12.78.34-1.32-1.09-.83 1.36-.09.45-1.29.51 1.27 1.36.03-1.05.87zM19 13.5a5.5 5.5 0 0 1-5.5 5.5c-1.22 0-2.35-.4-3.26-1.07l7.69-7.69c.67.91 1.07 2.04 1.07 3.26m-4.4 6.58 2.77-1.15-.24 3.35zm4.33-2.7 1.15-2.77 2.2 2.54zm1.15-4.96-1.14-2.78 3.34.24zM9.63 18.93l2.77 1.15-2.53 2.19z"/></svg>
|
||||
</label>
|
||||
|
||||
@@ -179,9 +168,9 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="none" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="teal" aria-label="ライトモード" type="radio" name="__palette" id="__palette_1">
|
||||
<input class="md-option" data-md-color-media="none" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="teal" aria-label="ライトモードに切り替える" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
<label class="md-header__button md-icon" title="ライトモード" for="__palette_0" hidden>
|
||||
<label class="md-header__button md-icon" title="ライトモードに切り替える" for="__palette_0" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.5 2c-1.79 1.15-3 3.18-3 5.5s1.21 4.35 3.03 5.5C4.46 13 2 10.54 2 7.5A5.5 5.5 0 0 1 7.5 2m11.57 1.5 1.43 1.43L4.93 20.5 3.5 19.07zm-6.18 2.43L11.41 5 9.97 6l.42-1.7L9 3.24l1.75-.12.58-1.65L12 3.1l1.73.03-1.35 1.13zm-3.3 3.61-1.16-.73-1.12.78.34-1.32-1.09-.83 1.36-.09.45-1.29.51 1.27 1.36.03-1.05.87zM19 13.5a5.5 5.5 0 0 1-5.5 5.5c-1.22 0-2.35-.4-3.26-1.07l7.69-7.69c.67.91 1.07 2.04 1.07 3.26m-4.4 6.58 2.77-1.15-.24 3.35zm4.33-2.7 1.15-2.77 2.2 2.54zm1.15-4.96-1.14-2.78 3.34.24zM9.63 18.93l2.77 1.15-2.53 2.19z"/></svg>
|
||||
</label>
|
||||
|
||||
@@ -295,12 +284,12 @@
|
||||
|
||||
<nav class="md-nav md-nav--primary" aria-label="ナビゲーション" data-md-level="0">
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href="../.." title="Hello アルゴリズム" class="md-nav__button md-logo" aria-label="Hello アルゴリズム" data-md-component="logo">
|
||||
<a href="../.." title="Hello Algo" class="md-nav__button md-logo" aria-label="Hello Algo" data-md-component="logo">
|
||||
|
||||
<img src="../../assets/images/logo.svg" alt="Hello アルゴリズム">
|
||||
<img src="../../assets/images/logo.svg" alt="Hello Algo">
|
||||
|
||||
</a>
|
||||
Hello アルゴリズム
|
||||
Hello Algo
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
@@ -351,7 +340,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
はじめに
|
||||
序文
|
||||
|
||||
|
||||
</span>
|
||||
@@ -367,7 +356,7 @@
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
はじめに
|
||||
序文
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
@@ -421,7 +410,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
第 0 章 前書き
|
||||
第 0 章 はじめに
|
||||
|
||||
|
||||
</span>
|
||||
@@ -442,7 +431,7 @@
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
第 0 章 前書き
|
||||
第 0 章 はじめに
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
@@ -577,7 +566,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
第 1 章 アルゴリズムを知る
|
||||
第 1 章 アルゴリズムとの出会い
|
||||
|
||||
|
||||
</span>
|
||||
@@ -598,7 +587,7 @@
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
第 1 章 アルゴリズムを知る
|
||||
第 1 章 アルゴリズムとの出会い
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
@@ -619,7 +608,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
1.1 アルゴリズムは至るところにある
|
||||
1.1 アルゴリズムはどこにでもある
|
||||
|
||||
|
||||
</span>
|
||||
@@ -739,7 +728,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
第 2 章 計算量解析
|
||||
第 2 章 計算量の解析
|
||||
|
||||
|
||||
</span>
|
||||
@@ -760,7 +749,7 @@
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
第 2 章 計算量解析
|
||||
第 2 章 計算量の解析
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
@@ -781,7 +770,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
2.1 アルゴリズム効率の評価
|
||||
2.1 アルゴリズムの効率の評価
|
||||
|
||||
|
||||
</span>
|
||||
@@ -916,7 +905,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
2.6 演習
|
||||
2.6 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -1149,7 +1138,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
3.3 数値エンコーディング *
|
||||
3.3 数値の符号化 *
|
||||
|
||||
|
||||
</span>
|
||||
@@ -1230,7 +1219,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
3.6 演習
|
||||
3.6 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -1473,7 +1462,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
4.6 演習
|
||||
4.6 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -1687,7 +1676,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
5.5 演習
|
||||
5.5 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -1901,7 +1890,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
6.5 演習
|
||||
6.5 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2173,7 +2162,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
7.7 演習
|
||||
7.7 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2306,7 +2295,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
8.2 ヒープ構築
|
||||
8.2 ヒープの構築
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2387,7 +2376,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
8.5 演習
|
||||
8.5 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2601,7 +2590,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
9.5 演習
|
||||
9.5 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2738,7 +2727,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
10.2 二分探索の挿入位置
|
||||
10.2 二分探索で挿入位置を探す
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2765,7 +2754,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
10.3 二分探索の境界
|
||||
10.3 二分探索で境界を探す
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2792,7 +2781,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
10.4 ハッシュによる最適化戦略
|
||||
10.4 ハッシュを使った最適化
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2819,7 +2808,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
10.5 探索アルゴリズム再考
|
||||
10.5 探索アルゴリズムを改めて考える
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2873,7 +2862,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
10.7 演習
|
||||
10.7 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3209,7 +3198,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
11.9 計数ソート
|
||||
11.9 カウントソート
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3290,7 +3279,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
11.12 演習
|
||||
11.12 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3398,7 +3387,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
12.1 分割統治法
|
||||
12.1 分割統治アルゴリズム
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3425,7 +3414,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
12.2 分割統治探索戦略
|
||||
12.2 分割統治による探索戦略
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3533,7 +3522,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
12.6 演習
|
||||
12.6 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3668,7 +3657,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
13.2 全順列問題
|
||||
13.2 順列列挙問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3695,7 +3684,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
13.3 部分和問題
|
||||
13.3 部分集合和問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3776,7 +3765,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
13.6 演習
|
||||
13.6 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3888,7 +3877,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
14.1 動的計画法入門
|
||||
14.1 動的計画法への第一歩
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3915,7 +3904,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
14.2 動的計画法の問題特性
|
||||
14.2 動的計画法の問題の特徴
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3942,7 +3931,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
14.3 動的計画法の問題解決の考え方
|
||||
14.3 動的計画法の解き方
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3996,7 +3985,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
14.5 完全ナップサック問題
|
||||
14.5 個数制限なしナップサック問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -4077,7 +4066,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
14.8 演習
|
||||
14.8 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -4185,7 +4174,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
15.1 貪欲法
|
||||
15.1 貪欲アルゴリズム
|
||||
|
||||
|
||||
</span>
|
||||
@@ -4212,7 +4201,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
15.2 分数ナップサック問題
|
||||
15.2 分割可能ナップサック問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -4266,7 +4255,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
15.4 最大積分割問題
|
||||
15.4 整数を分割して積を最大にする問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -4320,7 +4309,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
15.6 演習
|
||||
15.6 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -4449,7 +4438,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
16.2 一緒に制作に参加しましょう
|
||||
16.2 一緒に本書を作りましょう
|
||||
|
||||
|
||||
</span>
|
||||
@@ -4659,47 +4648,47 @@
|
||||
|
||||
|
||||
<!-- Page content -->
|
||||
<h1 id="31">3.1 データ構造の分類<a class="headerlink" href="#31" title="Permanent link">¶</a></h1>
|
||||
<p>代表的なデータ構造には、配列、連結リスト、スタック、キュー、ハッシュテーブル、木、ヒープ、グラフがあり、これらは「論理構造」と「物理構造」の 2 つの観点から分類できます。</p>
|
||||
<h2 id="311">3.1.1 論理構造:線形と非線形<a class="headerlink" href="#311" title="Permanent link">¶</a></h2>
|
||||
<p><strong>論理構造はデータ要素間の論理的な関係を示します</strong>。配列と連結リストでは、データは一定の順序で並び、データ間の線形関係を表します。一方、木ではデータは上から下へ階層的に並び、「祖先」と「子孫」の派生関係を示します。グラフはノードと辺で構成され、複雑なネットワーク関係を反映します。</p>
|
||||
<p>以下の図に示すように、論理構造は「線形」と「非線形」の 2 つに大別できます。線形構造は比較的直感的で、データが論理関係において線形に並ぶことを指します。非線形構造はその逆で、非線形に配置されます。</p>
|
||||
<h1 id="31">3.1 データ構造の分類<a class="headerlink" href="#31" title="この見出しへのリンク">¶</a></h1>
|
||||
<p>代表的なデータ構造には、配列、連結リスト、スタック、キュー、ハッシュテーブル、木、ヒープ、グラフがあります。これらは「論理構造」と「物理構造」の二つの観点で分類できます。</p>
|
||||
<h2 id="311">3.1.1 論理構造:線形と非線形<a class="headerlink" href="#311" title="この見出しへのリンク">¶</a></h2>
|
||||
<p><strong>論理構造は、データ要素同士の論理的な関係を表します</strong>。配列や連結リストでは一定の順に並び、線形の関係を表します。木では上から下へ階層的に並び、「祖先」から「子孫」へ派生する関係を表します。グラフはノードと辺からなり、複雑なネットワーク関係を表します。</p>
|
||||
<p>図 3-1 のように、論理構造は「線形」と「非線形」に大別できます。線形構造は直感的に理解しやすく、要素が論理的に一列に並びます。非線形構造では、そのような一列の並びにはなりません。</p>
|
||||
<ul>
|
||||
<li><strong>線形データ構造</strong>:配列、連結リスト、スタック、キュー、ハッシュテーブルであり、要素間は 1 対 1 の順序関係です。</li>
|
||||
<li><strong>線形データ構造</strong>:配列、連結リスト、スタック、キュー、ハッシュテーブル。要素間には一対一の順序関係があります。</li>
|
||||
<li><strong>非線形データ構造</strong>:木、ヒープ、グラフ、ハッシュテーブル。</li>
|
||||
</ul>
|
||||
<p>非線形データ構造は、さらに木構造と網状構造に分けられます。</p>
|
||||
<p>非線形データ構造は、さらに木構造とネットワーク構造に分けられます。</p>
|
||||
<ul>
|
||||
<li><strong>木構造</strong>:木、ヒープ、ハッシュテーブルであり、要素間は 1 対多の関係です。</li>
|
||||
<li><strong>網状構造</strong>:グラフであり、要素間は多対多の関係です。</li>
|
||||
<li><strong>木構造</strong>:木、ヒープ、ハッシュテーブル。要素間は一対多の関係です。</li>
|
||||
<li><strong>ネットワーク構造</strong>:グラフ。要素間は多対多の関係です。</li>
|
||||
</ul>
|
||||
<p><img alt="線形データ構造と非線形データ構造" class="animation-figure" src="../classification_of_data_structure.assets/classification_logic_structure.png" /></p>
|
||||
<p align="center"> 図 3-1 線形データ構造と非線形データ構造 </p>
|
||||
|
||||
<h2 id="312">3.1.2 物理構造:連続と分散<a class="headerlink" href="#312" title="Permanent link">¶</a></h2>
|
||||
<p><strong>アルゴリズムのプログラムが実行されるとき、処理中のデータは主にメモリに格納されます</strong>。下図はコンピュータのメモリモジュールを示しており、各黒い四角はそれぞれ 1 つのメモリ空間を表しています。メモリは巨大な Excel の表のようなものだと考えることができ、各セルには一定量のデータを格納できます。</p>
|
||||
<p><strong>システムはメモリアドレスを通じて目的の位置にあるデータへアクセスします</strong>。下図に示すように、コンピュータは特定の規則に従って表内の各セルに番号を割り当て、各メモリ空間が一意のメモリアドレスを持つようにします。これらのアドレスがあれば、プログラムはメモリ内のデータにアクセスできます。</p>
|
||||
<h2 id="312">3.1.2 物理構造:連続と分散<a class="headerlink" href="#312" title="この見出しへのリンク">¶</a></h2>
|
||||
<p><strong>アルゴリズムの実行中、処理対象のデータは主にメモリに保存されます</strong>。図 3-2 はメモリモジュールで、黒いチップのそれぞれにメモリ空間があります。メモリは巨大な Excel の表のように考えられ、各セルに一定量のデータを格納できます。</p>
|
||||
<p><strong>システムはメモリアドレスを使って、目的の位置のデータにアクセスします</strong>。図 3-2 のように、各セルには規則に従った番号が割り当てられ、各メモリ領域が一意のアドレスを持ちます。このアドレスにより、プログラムはデータにアクセスできます。</p>
|
||||
<p><img alt="メモリモジュール、メモリ空間、メモリアドレス" class="animation-figure" src="../classification_of_data_structure.assets/computer_memory_location.png" /></p>
|
||||
<p align="center"> 図 3-2 メモリモジュール、メモリ空間、メモリアドレス </p>
|
||||
|
||||
<div class="admonition tip">
|
||||
<p class="admonition-title">Tip</p>
|
||||
<p>補足すると、メモリを Excel の表にたとえるのは単純化した比喩であり、実際のメモリの動作機構はより複雑で、アドレス空間、メモリ管理、キャッシュ機構、仮想メモリ、物理メモリなどの概念が関わります。</p>
|
||||
<p class="admonition-title">ヒント</p>
|
||||
<p>Excel の表は単純化したたとえです。実際のメモリの仕組みはもっと複雑で、アドレス空間、メモリ管理、キャッシュ、仮想メモリ、物理メモリなどが関わります。</p>
|
||||
</div>
|
||||
<p>メモリはすべてのプログラムで共有される資源であり、あるメモリ領域が 1 つのプログラムに占有されると、通常は他のプログラムが同時に利用できません。<strong>したがって、データ構造とアルゴリズムの設計では、メモリ資源は重要な考慮要素です</strong>。たとえば、アルゴリズムが使用するメモリ使用量のピークは、システムに残っている空きメモリを超えてはなりません。大きな連続メモリ領域が不足している場合、選択するデータ構造は分散したメモリ空間に格納できる必要があります。</p>
|
||||
<p>下図に示すように、<strong>物理構造はデータがコンピュータメモリ内にどのように格納されるかを表します</strong>。これは連続空間への格納(配列)と分散空間への格納(連結リスト)に分けられます。物理構造は低レベルでデータのアクセス、更新、追加、削除などの操作方法を決定し、2 種類の物理構造は時間効率と空間効率の面で相補的な特徴を持ちます。</p>
|
||||
<p><img alt="連続空間格納と分散空間格納" class="animation-figure" src="../classification_of_data_structure.assets/classification_phisical_structure.png" /></p>
|
||||
<p align="center"> 図 3-3 連続空間格納と分散空間格納 </p>
|
||||
<p>メモリはすべてのプログラムが利用する資源ですが、ある領域を一つのプログラムが使っていると、通常はほかのプログラムが同時に使うことはできません。<strong>そのため、データ構造とアルゴリズムの設計では、メモリ資源が重要な検討事項です</strong>。たとえば最大使用量がシステムの空きメモリを超えないようにし、大きな連続領域がなければ、分散した領域に格納できるデータ構造を選ぶ必要があります。</p>
|
||||
<p>図 3-3 のように、<strong>物理構造は、コンピュータのメモリ内での格納方法を表し</strong>、連続した領域への格納(配列)と、分散した領域への格納(連結リスト)に分けられます。アクセス、更新、追加、削除などの方法を根本から決めるもので、二つの構造は時間効率と空間効率の面で互いを補い合います。</p>
|
||||
<p><img alt="連続した領域への格納と分散した領域への格納" class="animation-figure" src="../classification_of_data_structure.assets/classification_phisical_structure.png" /></p>
|
||||
<p align="center"> 図 3-3 連続した領域への格納と分散した領域への格納 </p>
|
||||
|
||||
<p>補足すると、<strong>すべてのデータ構造は配列、連結リスト、またはその両者の組み合わせに基づいて実装されます</strong>。たとえば、スタックとキューは配列でも連結リストでも実装できます。一方、ハッシュテーブルの実装には配列と連結リストの両方が含まれる場合があります。</p>
|
||||
<p><strong>すべてのデータ構造は、配列、連結リスト、またはその組み合わせで実装されます</strong>。たとえばスタックとキューはどちらでも実装でき、ハッシュテーブルでは両方を使うことがあります。</p>
|
||||
<ul>
|
||||
<li><strong>配列に基づいて実装可能</strong>:スタック、キュー、ハッシュテーブル、木、ヒープ、グラフ、行列、テンソル(次元 <span class="arithmatex">\(\geq 3\)</span> の配列)など。</li>
|
||||
<li><strong>連結リストに基づいて実装可能</strong>:スタック、キュー、ハッシュテーブル、木、ヒープ、グラフなど。</li>
|
||||
<li><strong>配列で実装できるもの</strong>:スタック、キュー、ハッシュテーブル、木、ヒープ、グラフ、行列、テンソル(次元が <span class="arithmatex">\(\geq 3\)</span> の配列)など。</li>
|
||||
<li><strong>連結リストで実装できるもの</strong>:スタック、キュー、ハッシュテーブル、木、ヒープ、グラフなど。</li>
|
||||
</ul>
|
||||
<p>連結リストは初期化後も、プログラムの実行中に長さを調整できるため、「動的データ構造」とも呼ばれます。配列は初期化後に長さを変更できないため、「静的データ構造」とも呼ばれます。なお、配列もメモリを再割り当てすることで長さを変更でき、ある程度の「動的性」を持たせることができます。</p>
|
||||
<p>連結リストは初期化後も実行中に長さを変えられるため、「動的データ構造」とも呼ばれます。配列は初期化後に長さを変えられないため、「静的データ構造」とも呼ばれます。ただし、配列もメモリを再確保すれば長さを変えられ、一定の「動的な性質」を持たせられます。</p>
|
||||
<div class="admonition tip">
|
||||
<p class="admonition-title">Tip</p>
|
||||
<p>物理構造の理解が難しいと感じる場合は、先に次の章を読んでから本節を振り返ることを勧めます。</p>
|
||||
<p class="admonition-title">ヒント</p>
|
||||
<p>物理構造がわかりにくければ、次の章を読んでから、この節を振り返ってみてください。</p>
|
||||
</div>
|
||||
|
||||
<!-- Source file information -->
|
||||
@@ -4723,7 +4712,7 @@ aria-label="フッター"
|
||||
<a
|
||||
href="../"
|
||||
class="md-footer__link md-footer__link--prev"
|
||||
aria-label="前: 第 3 章 &nbsp; データ構造"
|
||||
aria-label="前: 第 3 章 データ構造"
|
||||
rel="prev"
|
||||
>
|
||||
<div class="md-footer__button md-icon">
|
||||
@@ -4747,7 +4736,7 @@ aria-label="フッター"
|
||||
<a
|
||||
href="../basic_data_types/"
|
||||
class="md-footer__link md-footer__link--next"
|
||||
aria-label="次: 3.2 &nbsp; 基本データ型"
|
||||
aria-label="次: 3.2 基本データ型"
|
||||
rel="next"
|
||||
>
|
||||
<div class="md-footer__title">
|
||||
@@ -4769,14 +4758,10 @@ aria-label="フッター"
|
||||
<!-- Comment system -->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- Check-in button above comments -->
|
||||
|
||||
|
||||
<h5 align="center" id="__comments">ご意見、ご質問、ご提案があればぜひコメントしてください</h5>
|
||||
<h5 align="center" id="__comments">コメント欄で、考えや質問、ご提案をお寄せください。</h5>
|
||||
|
||||
<!-- Insert generated snippet here -->
|
||||
<script
|
||||
@@ -4809,7 +4794,20 @@ aria-label="フッター"
|
||||
/* Set palette on initial load */
|
||||
giscus.setAttribute("data-theme", getGiscusTheme())
|
||||
|
||||
|
||||
/* The Giscus client creates the iframe asynchronously with an English title. */
|
||||
;(function() {
|
||||
function labelCommentsFrame() {
|
||||
var frame = document.querySelector("iframe.giscus-frame")
|
||||
if (!frame) return false
|
||||
frame.setAttribute("title", "コメント")
|
||||
return true
|
||||
}
|
||||
if (labelCommentsFrame()) return
|
||||
var observer = new MutationObserver(function() {
|
||||
if (labelCommentsFrame()) observer.disconnect()
|
||||
})
|
||||
observer.observe(giscus.parentElement, { childList: true, subtree: true })
|
||||
})()
|
||||
|
||||
/* Register event handlers after documented loaded */
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
@@ -4848,7 +4846,7 @@ aria-label="フッター"
|
||||
<div class="md-copyright">
|
||||
|
||||
<div class="md-copyright__highlight">
|
||||
Copyright © 2026 krahets<br>The website content is licensed under <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a>
|
||||
Copyright © 2026 krahets<br>このサイトのコンテンツのライセンス: <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -4908,7 +4906,7 @@ aria-label="フッター"
|
||||
<script id="__config" type="application/json">{"annotate":null,"base":"../../","features":["content.action.edit","content.code.annotate","content.code.copy","content.tabs.link","content.tooltips","navigation.indexes","navigation.tracking","search.highlight","search.share","search.suggest","toc.follow"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"コピーしました","clipboard.copy":"クリップボードへコピー","search.result.more.one":"このページ内にもう1件見つかりました","search.result.more.other":"このページ内にあと#件見つかりました","search.result.none":"何も見つかりませんでした","search.result.one":"1件見つかりました","search.result.other":"#件見つかりました","search.result.placeholder":"検索キーワードを入力してください","search.result.term.missing":"検索に含まれない","select.version":"バージョン切り替え"},"version":null}</script>
|
||||
|
||||
|
||||
<script src="../../assets/javascripts/bundle.e559d5b757c25f1f23bd887b700c56e3018b129d471c011292faeb47b8b74ce4.min.js"></script>
|
||||
<script src="../../assets/javascripts/bundle.bbe737eb31084dfc2f0d91a916c44a189920caa85eb843c038b80c96c32c779e.min.js"></script>
|
||||
|
||||
<script src="../../javascripts/mathjax.js"></script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user