Re-translate the Japanese version (#1871)

* Retranslate Japanese docs with GPT-5.4

* Retranslate Japanese code with GPT-5.4
This commit is contained in:
Yudong Jin
2026-03-30 07:30:15 +08:00
committed by GitHub
parent fe6443235b
commit d7b2277d2b
1444 changed files with 83312 additions and 8363 deletions
@@ -1,48 +1,48 @@
# データ構造の分類
一般的なデータ構造には、配列、連結リスト、スタック、キュー、ハッシュ、木、ヒープ、グラフがあります。これらは「論理構造」と「物理構造」分類できます。
代表的なデータ構造には、配列、連結リスト、スタック、キュー、ハッシュテーブル、木、ヒープ、グラフがありこれらは「論理構造」と「物理構造」の 2 つの観点から分類できます。
## 論理構造:線形と非線形
**論理構造はデータ要素間の論理的関係を明らかにします**。配列と連結リストでは、データは定の順序で配置され、データ間の線形関係を示しています。一方、木ではデータは上から下へ階層的に配置され、「祖先」と「子孫」の派生関係を示しています。そして、グラフはノードとエッジから構成され、複雑なネットワーク関係を反映しています。
**論理構造はデータ要素間の論理的関係をします**。配列と連結リストでは、データは定の順序で並び、データ間の線形関係を表します。一方、木ではデータは上から下へ階層的に並び、「祖先」と「子孫」の派生関係を示します。グラフはノードと辺で構成され、複雑なネットワーク関係を反映します。
下図に示されているように、論理構造は「線形」と「非線形」の2つの主要カテゴリに分けることができます。線形構造はより直感的で、データが論理関係において線形に配置されていることを示しています。非線形構造は、逆に非線形に配置されています。
以下の図に示すように、論理構造は「線形」と「非線形」の 2 つに大別できます。線形構造は比較的直感的で、データが論理関係において線形に並ぶことを指します。非線形構造はその逆で、非線形に配置されます。
- **線形データ構造**:配列、連結リスト、スタック、キュー、ハッシュ表。要素が一対一の順関係を持ちます。
- **非線形データ構造**:木、ヒープ、グラフ、ハッシュ
- **線形データ構造**:配列、連結リスト、スタック、キュー、ハッシュテーブルであり、要素間は 1 対 1 の順関係す。
- **非線形データ構造**:木、ヒープ、グラフ、ハッシュテーブル
非線形データ構造は、さらに木構造とネットワーク構造に分けることができます。
非線形データ構造は、さらに木構造と網状構造に分けられます。
- **木構造**:木、ヒープ、ハッシュ表。要素が一対多の関係を持ちます。
- **ネットワーク構造**:グラフ。要素が多対多の関係を持ちます。
- **木構造**:木、ヒープ、ハッシュテーブルであり、要素間は 1 対多の関係す。
- **網状構造**:グラフであり、要素間は多対多の関係す。
![Linear and non-linear data structures](classification_of_data_structure.assets/classification_logic_structure.png)
![線形データ構造と非線形データ構造](classification_of_data_structure.assets/classification_logic_structure.png)
## 物理構造:連続と分散
**アルゴリズムの実行中、処理されるデータはメモリに格納されます**。下図はコンピュータのメモリスティックを示しており、各黒い正方形は物理メモリ空間です。メモリ巨大なExcelスプレッドシートと考えることができ、各セルは一定量のデータを格納できます。
**アルゴリズムのプログラムが実行されるとき、処理中のデータは主にメモリに格納されます**。下図はコンピュータのメモリモジュールを示しており、各黒い四角はそれぞれ 1 つのメモリ空間を表しています。メモリ巨大な Excel の表のようなものだと考えることができ、各セルは一定量のデータを格納できます。
**システムはメモリアドレスによって目標位置のデータアクセスします**。下図に示されているように、コンピュータは特定のルールに従って表の各セルに一意の識別子を割り当て、各メモリ空間が一意のメモリアドレスを持つことを保証します。これらのアドレスにより、プログラムはメモリに格納されたデータにアクセスできます。
**システムはメモリアドレスを通じて目的の位置にあるデータアクセスします**。下図に示ように、コンピュータは特定の規則に従って表の各セルに番号を割り当て、各メモリ空間が一意のメモリアドレスを持つようにします。これらのアドレスがあれば、プログラムはメモリ内のデータにアクセスできます。
![Memory stick, memory spaces, memory addresses](classification_of_data_structure.assets/computer_memory_location.png)
![メモリモジュール、メモリ空間、メモリアドレス](classification_of_data_structure.assets/computer_memory_location.png)
!!! tip
メモリをExcelスプレッドシートに比較することは簡略化された類推であることに注意してください。メモリの実際の動作メカニズムはより複雑で、アドレス空間、メモリ管理、キャッシュメカニズム、仮想メモリ、物理メモリなどの概念が関係しています。
補足すると、メモリを Excel の表にたとえるのは単純化した比喩であり、実際のメモリの動作機構はより複雑で、アドレス空間、メモリ管理、キャッシュ機構、仮想メモリ、物理メモリなどの概念が関わります。
メモリはすべてのプログラム共有リソースです。あるメモリブロックが1つのプログラムによって占有されると、他のプログラムが同時に使用することはできません。**したがって、メモリリソースはデータ構造とアルゴリズムの設計における重要な考慮事項です**。えば、アルゴリズムのピークメモリ使用量は、システムの残り空きメモリを超えてはいけません。連続したメモリブロックが不足している場合は、非連続メモリブロックに格納できるデータ構造を選択する必要があります。
メモリはすべてのプログラム共有される資源であり、あるメモリ領域が 1 つのプログラムに占有されると、通常は他のプログラムが同時に利用できません。**したがって、データ構造とアルゴリズムの設計では、メモリ資源は重要な考慮要素です**。たとえば、アルゴリズムが使用するメモリ使用量のピークは、システムに残っている空きメモリを超えてはなりません。大きな連続メモリ領域が不足している場合、選択するデータ構造は分散したメモリ空間に格納できる必要があります。
下図に示されているように、**物理構造はコンピュータメモリにおけるデータの格納方法を反映し**、連続空間格納(配列)と非連続空間格納(連結リスト)に分けることができます。2つのタイプの物理構造は時間効率と空間効率の観点で補完的な特性を示します。
下図に示ように、**物理構造はデータがコンピュータメモリ内にどのように格納されるかを表します**。これは連続空間への格納(配列)と分散空間への格納(連結リスト)に分けられます。物理構造は低レベルでデータのアクセス、更新、追加、削除などの操作方法を決定し、2 種類の物理構造は時間効率と空間効率の面で相補的な特徴を持ちます。
![Contiguous space storage and dispersed space storage](classification_of_data_structure.assets/classification_phisical_structure.png)
![連続空間格納と分散空間格納](classification_of_data_structure.assets/classification_phisical_structure.png)
**すべてのデータ構造は配列、連結リスト、またはその組み合わせに基づいて実装されていることに注意してください**。例えば、スタックとキューは配列または連結リストのどちらでも実装できます。ハッシュの実装には配列と連結リストの両方が関係する場合があります。
補足すると、**すべてのデータ構造は配列、連結リスト、またはその両者の組み合わせに基づいて実装されます**。たとえば、スタックとキューは配列でも連結リストでも実装できます。一方、ハッシュテーブルの実装には配列と連結リストの両方が含まれる場合があります。
- **配列ベースの実装**:スタック、キュー、ハッシュ、木、ヒープ、グラフ、行列、テンソル(次元$\geq 3$の配列)。
- **連結リストベースの実装**:スタック、キュー、ハッシュ、木、ヒープ、グラフなど。
- **配列に基づいて実装可能**:スタック、キュー、ハッシュテーブル、木、ヒープ、グラフ、行列、テンソル(次元 $\geq 3$ の配列)など
- **連結リストに基づいて実装可能**:スタック、キュー、ハッシュテーブル、木、ヒープ、グラフなど。
配列に基づいて実装されたデータ構造は「静的データ構造」とも呼ばれ初期化後に長さを変更できないことを意味します。逆に、連結リストに基づいたものは「動的データ構造」と呼ばれ、プログラム実行中にサイズを調整できます。
連結リストは初期化後も、プログラムの実行中に長さを調整できるため、「動的データ構造」とも呼ばれます。配列は初期化後に長さを変更できないため、「静的データ構造」と呼ばれます。なお、配列もメモリを再割り当てすることで長さを変更でき、ある程度の「動的性」を持たせることができます。
!!! tip
物理構造理解するのが困難な場合は、次の章「配列と連結リスト」を読んでから、この節に戻ることを勧めます。
物理構造理解が難しいと感じる場合は、先に次の章を読んでから本節を振り返ることを勧めます。