コンピュータサイエンス において、列挙アルゴリズムとは、 計算問題 の解を列挙する アルゴリズムの ことです。形式的には、このようなアルゴリズムは、関数問題 と同様に、入力を受け取り、解のリストを生成する問題に適用されます。列挙アルゴリズムは、各入力に対して、重複のないすべての解のリストを生成し、その後停止する必要があります。列挙アルゴリズムのパフォーマンスは、解を生成するのに必要な時間、つまりすべての解を生成するのに必要な合計時間 、または連続する2つの解間の最大遅延と、最初の解を出力するまでの時間としてカウントされる前 処理時間のいずれかで測定されます。この複雑さは、 出力依存型アルゴリズム の場合と同様に、入力のサイズ、個々の出力のサイズ、またはすべての出力セットの合計サイズで表現できます。
一般的な複雑性クラス 列挙問題は計算複雑性理論 の文脈で研究されており、そのような問題に対していくつかの複雑性クラスが 導入されている。
このようなクラスの非常に一般的な例として、EnumP [ 1 ] があります。これは、可能な出力の正しさを入力と出力の多項式時間 でチェックできる問題のクラスです。形式的には、このような問題には、問題の入力x と候補出力y を入力として受け取り、入力xに対する y が正しい出力であるかどうかをx とy の多項式時間で判定するアルゴリズム A が存在しなければなりません。たとえば、このクラスには、NP クラス の問題の証拠 を列挙することに相当するすべての問題が含まれます。
定義されているその他のクラスは 以下のとおりです。EnumPにも含まれる問題の場合、これらの問題は具体的度の低いものから高いものへと順に並べられています。
出力多項式とは 、その完全な出力を多項式時間で計算できる問題のクラスのことである。増分多項式時間とは、すべての i に対して、i番目の出力が入力サイズと i の数に関して多項式時間で生成できる問題のクラスです。多項式遅延とは 、連続する2つの出力間の遅延が入力の多項式であり(かつ出力とは無関係である)問題のクラスを指します。強多項式遅延とは 、各出力前の遅延がその特定の出力のサイズに関して多項式となる(入力や他の出力とは無関係な)問題のクラスを指します。前処理は一般的に多項式であると仮定されます。定遅延とは 、各出力までの遅延が一定、つまり入力と出力に依存しない問題のクラスを指します。前処理フェーズは一般的に入力の多項式であると仮定されます。
一般的なテクニック バックトラッキング :すべての解を列挙する最も簡単な方法は、可能な結果の空間を体系的に探索することです(各ステップで分割します)。 [ 2 ] ただし、これを実行すると遅延に関する十分な保証が得られない場合があります。つまり、バックトラッキング アルゴリズムは、完全な解を生み出さない可能な結果の空間の部分を探索するのに長い時間を費やす可能性があります。フラッシュライトサーチ :この手法は、すべての可能な解の空間を探索しながら、各ステップで現在の部分解を部分解に拡張できるかどうかを解くことで、バックトラッキングを改善します。 [ 1 ] 答えが「いいえ」の場合、アルゴリズムはすぐにバックトラックして時間の無駄を回避できるため、任意の2つの完全な解間の遅延に関する保証を示すことが容易になります。特に、この手法は自己還元可能な 問題によく適用されます。集合演算における閉包性:2つの 集合 の非交和を列挙したい場合、まず最初の集合を列挙し、次に2番目の集合を列挙することで問題を解決できます。和集合が非交和ではないが、集合をソート順 に列挙できる場合は、重複をその場で削除しながら、両方の集合に対して並列に列挙を実行できます。和集合が非交和ではなく、両方の集合がソートされていない場合は、ハッシュテーブル を使用するなどして、メモリ使用量が増える代償で重複を削除できます。同様に、 2つの集合の直積は 、一方の集合を列挙し、各結果を2番目のステップで得られたすべての結果と結合することで効率的に列挙できます。
計算可能性理論との関連性 列挙アルゴリズムの概念は、計算可能性理論 の分野でも、 RE( 再帰的に列挙可能な 問題の総称)のような高複雑度クラスを定義するために用いられます。REは、集合のすべての要素を生成する列挙アルゴリズムが存在する集合のクラスです。集合が無限集合の場合、アルゴリズムは永久に実行される可能性がありますが、各解は有限時間後に生成されなければなりません。
参考文献 1 2 Strozecki, Yann; Mary, Arnaud (2019). "Efficient Enumeration of Solutions Produced by Closure Operations" . Discrete Mathematics & Theoretical Computer Science . 21 (3). arXiv : 1712.03714 . doi : 10.23638/DMTCS-21-3-22 . ↑ Read, Ronald C. ; Tarjan, Robert E. (1975). "サイクル、パス、スパニングツリーのリスト化のためのバックトラックアルゴリズムの限界" . Networks . 5 (3): 237– 252. doi : 10.1002/net.1975.5.3.237 . ↑ ハーゲン、マティアス (2008)。 MONET のアルゴリズムと計算の複雑さの問題 。ゲッティンゲン: キュヴィリエ。 ISBN 9783736928268 。↑ Bagan, Guillaume; Durand, Arnaud; Grandjean, Etienne (2007). Duparc, Jacques; Henzinger, Thomas A. (編). "On Acyclic Conjunctive Queries and Constant Delay Enumeration". Computer Science Logic . Lecture Notes in Computer Science. 4646. Springer Berlin Heidelberg: 208–222 . doi : 10.1007/978-3-540-74915-8_18 . ISBN 9783540749158 。↑ Marquis, P.; Darwiche, A. (2002). "知識コンパイルマップ" . Journal of Artificial Intelligence Research . 17 : 229– 264. arXiv : 1106.1819 . doi : 10.1613/jair.989 . S2CID 9919794 .