mirror of
https://github.com/krahets/hello-algo.git
synced 2026-08-21 15:57:14 +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,53 +1,53 @@
|
||||
# アルゴリズムとは何か
|
||||
# アルゴリズムとは
|
||||
|
||||
## アルゴリズムの定義
|
||||
|
||||
<u>アルゴリズム</u>は、有限時間内で特定の問題を解決するための一連の指示またはステップです。以下の特徴があります:
|
||||
<u>アルゴリズム(algorithm)</u>とは、限られた時間内に特定の問題を解決するための一連の命令または操作手順であり、次のような特徴を持ちます。
|
||||
|
||||
- 問題が明確に定義されており、入力と出力の明確な定義が含まれています。
|
||||
- アルゴリズムは実行可能で、有限の回数のステップ、時間、メモリ空間内で完了できることを意味します。
|
||||
- 各ステップには明確な意味があります。同じ入力と条件の下で出力は一貫して同じです。
|
||||
- 問題が明確であり、入力と出力の定義がはっきりしています。
|
||||
- 実行可能であり、有限の手順、時間、メモリ空間で完了できます。
|
||||
- 各手順の意味が確定しており、同じ入力と実行条件では常に同じ出力になります。
|
||||
|
||||
## データ構造の定義
|
||||
|
||||
<u>データ構造</u>は、コンピュータ内でデータを組織し保存する方法で、以下の設計目標があります:
|
||||
<u>データ構造(data structure)</u>とは、データを整理して保存する方式であり、データの内容、データ間の関係、データの操作方法を含み、次のような設計目標があります。
|
||||
|
||||
- コンピュータのメモリを節約するために空間占有を最小化する。
|
||||
- データ操作を可能な限り高速にし、データのアクセス、追加、削除、更新などをカバーする。
|
||||
- 効率的なアルゴリズム実行を可能にするために、簡潔なデータ表現と論理情報を提供する。
|
||||
- 使用する空間をできるだけ少なくし、コンピュータのメモリを節約します。
|
||||
- データの操作をできるだけ高速にし、アクセス、追加、削除、更新などを含みます。
|
||||
- 簡潔なデータ表現と論理情報を提供し、アルゴリズムが効率よく動作できるようにします。
|
||||
|
||||
**データ構造の設計はバランスを取る行為であり、しばしばトレードオフが必要です**。一つの側面を改善したい場合、しばしば別の側面で妥協する必要があります。以下は2つの例です:
|
||||
**データ構造の設計はトレードオフに満ちた過程です**。ある面を改善したい場合、別の面で妥協が必要になることがよくあります。以下に 2 つの例を示します。
|
||||
|
||||
- 配列と比較して、連結リストはデータの追加と削除においてより便利ですが、データアクセス速度を犠牲にします。
|
||||
- 連結リストと比較して、グラフはより豊富な論理情報を提供しますが、より多くのメモリ空間が必要です。
|
||||
- 連結リストは配列に比べてデータの追加や削除がしやすい一方で、データアクセス速度を犠牲にしています。
|
||||
- グラフは連結リストに比べてより豊富な論理情報を提供しますが、より大きなメモリ空間を必要とします。
|
||||
|
||||
## データ構造とアルゴリズムの関係
|
||||
|
||||
以下の図に示すように、データ構造とアルゴリズムは高度に関連し、密接に統合されており、具体的には以下の3つの側面があります:
|
||||
以下の図のように、データ構造とアルゴリズムは高度に関連し、密接に結び付いており、具体的には次の 3 つの点に表れます。
|
||||
|
||||
- データ構造はアルゴリズムの基礎です。構造化されたデータ保存とアルゴリズムのためのデータ操作方法を提供します。
|
||||
- アルゴリズムはデータ構造に活力を注入します。データ構造だけではデータ情報を保存するだけです。アルゴリズムの応用によって、特定の問題を解決できます。
|
||||
- アルゴリズムは異なるデータ構造に基づいて実装できることが多いですが、実行効率は大きく異なることがあります。適切なデータ構造を選択することが鍵です。
|
||||
- データ構造はアルゴリズムの土台です。データ構造はアルゴリズムに対して、構造化して格納されたデータと、そのデータを操作する方法を提供します。
|
||||
- アルゴリズムはデータ構造に命を吹き込みます。データ構造そのものはデータ情報を保存するだけであり、アルゴリズムと組み合わせて初めて特定の問題を解決できます。
|
||||
- アルゴリズムは通常、異なるデータ構造に基づいて実装できますが、実行効率が大きく異なる場合があり、適切なデータ構造を選ぶことが重要です。
|
||||
|
||||

|
||||
|
||||
データ構造とアルゴリズムは、以下の図に示すように、ブロックのセットに例えることができます。ブロックセットには多数のピースが含まれ、詳細な組み立て説明書が付いています。これらの説明書に段階的に従うことで、複雑なブロックモデルを構築できます。
|
||||
データ構造とアルゴリズムは、以下の図に示す組み立てブロックのようなものです。1 セットのブロックには多くの部品が含まれるだけでなく、詳しい組み立て説明書も付いています。説明書に従って一歩ずつ操作すれば、精巧なブロック模型を組み立てられます。
|
||||
|
||||

|
||||

|
||||
|
||||
両者の詳細な対応関係は以下の表に示されています。
|
||||
両者の詳細な対応関係を次の表に示します。
|
||||
|
||||
<p align="center"> 表 <id> データ構造とアルゴリズムをブロックと比較 </p>
|
||||
<p align="center"> 表 <id> データ構造とアルゴリズムを組み立てブロックにたとえる </p>
|
||||
|
||||
| データ構造とアルゴリズム | ブロック |
|
||||
| ------------------------ | ----------------------------------------------------- |
|
||||
| 入力データ | 未組み立てのブロック |
|
||||
| データ構造 | ブロックの組織、形状、サイズ、接続などを含む |
|
||||
| アルゴリズム | ブロックを望ましい形状に組み立てる一連のステップ |
|
||||
| 出力データ | 完成したブロックモデル |
|
||||
| データ構造とアルゴリズム | 組み立てブロック |
|
||||
| -------------- | ---------------------------------------- |
|
||||
| 入力データ | まだ組み立てていないブロック |
|
||||
| データ構造 | ブロックの構成形式。形状、大きさ、接続方法などを含む |
|
||||
| アルゴリズム | ブロックを目標の形に組み上げる一連の操作手順 |
|
||||
| 出力データ | ブロック模型 |
|
||||
|
||||
データ構造とアルゴリズムはプログラミング言語から独立していることは注目に値します。この理由により、この本は複数のプログラミング言語での実装を提供できます。
|
||||
特筆すべき点として、データ構造とアルゴリズムはプログラミング言語から独立しています。だからこそ、本書では複数のプログラミング言語に基づく実装を提供できます。
|
||||
|
||||
!!! tip "慣習的な略語"
|
||||
!!! tip "慣習的な略称"
|
||||
|
||||
実生活の議論では、「データ構造とアルゴリズム」を単純に「アルゴリズム」と呼ぶことがよくあります。例えば、よく知られたLeetCodeアルゴリズム問題は、実際にはデータ構造とアルゴリズムの両方の知識をテストしています。
|
||||
実際の議論では、私たちは通常「データ構造とアルゴリズム」を略して「アルゴリズム」と呼びます。たとえば広く知られている LeetCode のアルゴリズム問題は、実際にはデータ構造とアルゴリズムの両方の知識を同時に問うています。
|
||||
|
||||
Reference in New Issue
Block a user