コンピュータサイエンスにおける空間と時間のトレードオフ(時間とメモリのトレードオフ、またはアルゴリズムの空間と時間の連続体とも呼ばれる)とは、アルゴリズムやプログラムが時間短縮のために空間使用量を増やすトレードオフのことです。ここで、空間とは特定のタスクを実行する際に消費されるデータストレージ( RAM、HDDなど)を指し、時間とは特定のタスクを実行する際に消費される時間(計算時間または応答時間)を指します。
特定の空間・時間トレードオフの有用性は、関連する固定費および変動費(例えば、CPU速度、ストレージ容量など)によって影響を受け、収穫逓減の法則が働く。
時間と記憶のトレードオフという生物学的な概念は、動物の行動の初期段階に見られる。蓄積された知識を利用したり、刺激に対する反応を「本能」としてDNAに符号化したりすることで、時間的に切迫した状況での「計算」を回避できる。コンピュータにおいては、ルックアップテーブルは初期のオペレーティングシステムから実装されてきた。
1980年、マーティン・ヘルマンは暗号解読に時間とメモリのトレードオフを用いることを初めて提案した。[ 1 ]
よくある例として、ルックアップテーブルを含むアルゴリズムが挙げられます。実装方法としては、テーブル全体を含めることで計算時間を短縮できますが、必要なメモリ量が増加します。あるいは、必要に応じてテーブルのエントリを計算することで、計算時間は増加しますが、メモリ要件を削減できます。
データベース管理システムは、データベースのインデックスデータ構造を作成する機能を提供します。インデックスは、追加のストレージ容量を必要とする代わりに、検索操作の速度を向上させます。インデックスがない場合、目的のデータを見つけるために、時間のかかるテーブル全体のスキャン操作が必要になることがあります。
データストレージの問題には、空間と時間のトレードオフが当てはまります。データを非圧縮で保存すると、圧縮して保存する場合よりも多くのスペースが必要になりますが、アクセス時間は短くなります(データを圧縮すると必要なスペースは減りますが、解凍アルゴリズムの実行に時間がかかるため)。問題の具体的な状況によっては、どちらの方法も実用的です。また、圧縮されたデータを直接扱うことができる稀なケースもあります。例えば、圧縮されたビットマップインデックスの場合、圧縮なしよりも圧縮ありの方が高速です。
ベクター画像のSVGソースのみを保存し、ページがリクエストされるたびにビットマップ画像としてレンダリングする方法は、時間とスペースのトレードオフになります。つまり、時間はかかりますが、スペースは少なくなります。ページが変更されたときに画像をレンダリングし、レンダリングされた画像を保存する方法は、スペースと時間のトレードオフになります。つまり、スペースは多くなりますが、時間は少なくなります。この手法は一般的にキャッシュと呼ばれています。
ループアンローリングを適用すると、コードサイズは大きくなりますが、プログラムの速度は向上します。この手法では、ループの各イテレーションごとにコードが長くなりますが、各イテレーションの最後にループの先頭に戻るために必要な計算時間を節約できます。
空間と時間のトレードオフを利用するアルゴリズムには、以下のようなものがある。