https://en.wikipedia.org/w/index.php?action=history&feed=atom&title=Enumeration_algorithmEnumeration algorithm - Revision history2025-05-24T23:28:28ZRevision history for this page on the wikiMediaWiki 1.45.0-wmf.2https://en.wikipedia.org/w/index.php?title=Enumeration_algorithm&diff=1284374277&oldid=prevOAbot: Open access bot: arxiv updated in citation with #oabot.2025-04-07T05:20:11Z<p><a href="/wiki/Wikipedia:OABOT" class="mw-redirect" title="Wikipedia:OABOT">Open access bot</a>: arxiv updated in citation with #oabot.</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 05:20, 7 April 2025</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 13:</td>
<td colspan="2" class="diff-lineno">Line 13:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Enumeration problems have been studied in the context of [[computational complexity theory]], and several [[complexity class]]es have been introduced for such problems.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Enumeration problems have been studied in the context of [[computational complexity theory]], and several [[complexity class]]es have been introduced for such problems.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP''',<ref name="closure">{{cite journal|last1=Strozecki|first1=Yann|last2=Mary|first2=Arnaud|date=2019|title=Efficient Enumeration of Solutions Produced by Closure Operations|url=https://dmtcs.episciences.org/5549|journal=Discrete Mathematics & Theoretical Computer Science|volume=21|issue=3|doi=10.23638/DMTCS-21-3-22}}</ref> the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP''',<ref name="closure">{{cite journal|last1=Strozecki|first1=Yann|last2=Mary|first2=Arnaud|date=2019|title=Efficient Enumeration of Solutions Produced by Closure Operations|url=https://dmtcs.episciences.org/5549|journal=Discrete Mathematics & Theoretical Computer Science|volume=21|issue=3|doi=10.23638/DMTCS-21-3-22<ins style="font-weight: bold; text-decoration: none;">|arxiv=1712.03714</ins>}}</ref> the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific:</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific:</div></td>
</tr>
</table>OAbothttps://en.wikipedia.org/w/index.php?title=Enumeration_algorithm&diff=1131369815&oldid=prevCitation bot: Alter: pages. Formatted dashes. | Use this bot. Report bugs. | Suggested by SemperIocundus | #UCB_webform 1054/25002023-01-03T21:28:48Z<p>Alter: pages. Formatted <a href="/wiki/Wikipedia:ENDASH" class="mw-redirect" title="Wikipedia:ENDASH">dashes</a>. | <a href="/wiki/Wikipedia:UCB" class="mw-redirect" title="Wikipedia:UCB">Use this bot</a>. <a href="/wiki/Wikipedia:DBUG" class="mw-redirect" title="Wikipedia:DBUG">Report bugs</a>. | Suggested by SemperIocundus | #UCB_webform 1054/2500</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 21:28, 3 January 2023</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 25:</td>
<td colspan="2" class="diff-lineno">Line 25:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Common techniques ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Common techniques ==</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* '''[[Backtracking]]''': The simplest way to enumerate all solutions is by systematically exploring the space of possible results ([[partition (mathematics)|partitioning]] it at each successive step).<ref>{{cite journal|last1=Read|first1=Ronald C.|author-link1=Ronald C. Read|last2=Tarjan|first2=Robert E.|author-link2=Robert Tarjan|date=1975|title=Bounds on Backtrack Algorithms for Listing Cycles, Paths, and Spanning Trees|url=https://onlinelibrary.wiley.com/doi/10.1002/net.1975.5.3.237|journal=Networks|volume=5|issue=3|pages=<del style="font-weight: bold; text-decoration: none;">237-252</del>|doi=10.1002/net.1975.5.3.237}}</ref> However, performing this may not give good guarantees on the delay, i.e., a backtracking algorithm may spend a long time exploring parts of the space of possible results that do not give rise to a full solution. </div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* '''[[Backtracking]]''': The simplest way to enumerate all solutions is by systematically exploring the space of possible results ([[partition (mathematics)|partitioning]] it at each successive step).<ref>{{cite journal|last1=Read|first1=Ronald C.|author-link1=Ronald C. Read|last2=Tarjan|first2=Robert E.|author-link2=Robert Tarjan|date=1975|title=Bounds on Backtrack Algorithms for Listing Cycles, Paths, and Spanning Trees|url=https://onlinelibrary.wiley.com/doi/10.1002/net.1975.5.3.237|journal=Networks|volume=5|issue=3|pages=<ins style="font-weight: bold; text-decoration: none;">237–252</ins>|doi=10.1002/net.1975.5.3.237}}</ref> However, performing this may not give good guarantees on the delay, i.e., a backtracking algorithm may spend a long time exploring parts of the space of possible results that do not give rise to a full solution. </div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* '''{{visible anchor|Flashlight search}}''': This technique improves on backtracking by exploring the space of all possible solutions but solving at each step the problem of whether the current partial solution can be extended to a partial solution.<ref name="closure"/> If the answer is no, then the algorithm can immediately backtrack and avoid wasting time, which makes it easier to show guarantees on the delay between any two complete solutions. In particular, this technique applies well to [[self-reducible]] problems.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* '''{{visible anchor|Flashlight search}}''': This technique improves on backtracking by exploring the space of all possible solutions but solving at each step the problem of whether the current partial solution can be extended to a partial solution.<ref name="closure"/> If the answer is no, then the algorithm can immediately backtrack and avoid wasting time, which makes it easier to show guarantees on the delay between any two complete solutions. In particular, this technique applies well to [[self-reducible]] problems.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* '''Closure under set operations''': If we wish to enumerate the disjoint [[union (set theory)|union]] of two sets, then we can solve the problem by enumerating the first set and then the second set. If the union is non disjoint but the sets can be enumerated in [[sorting|sorted order]], then the enumeration can be performed in parallel on both sets while eliminating duplicates on the fly. If the union is not disjoint and both sets are not sorted then duplicates can be eliminated at the expense of a higher memory usage, e.g., using a [[hash table]]. Likewise, the [[cartesian product]] of two sets can be enumerated efficiently by enumerating one set and joining each result with all results obtained when enumerating the second step.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* '''Closure under set operations''': If we wish to enumerate the disjoint [[union (set theory)|union]] of two sets, then we can solve the problem by enumerating the first set and then the second set. If the union is non disjoint but the sets can be enumerated in [[sorting|sorted order]], then the enumeration can be performed in parallel on both sets while eliminating duplicates on the fly. If the union is not disjoint and both sets are not sorted then duplicates can be eliminated at the expense of a higher memory usage, e.g., using a [[hash table]]. Likewise, the [[cartesian product]] of two sets can be enumerated efficiently by enumerating one set and joining each result with all results obtained when enumerating the second step.</div></td>
</tr>
</table>Citation bothttps://en.wikipedia.org/w/index.php?title=Enumeration_algorithm&diff=1121637743&oldid=prevA3nm: /* Common complexity classes */ typo2022-11-13T09:46:20Z<p><span class="autocomment">Common complexity classes: </span> typo</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 09:46, 13 November 2022</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 15:</td>
<td colspan="2" class="diff-lineno">Line 15:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP''',<ref name="closure">{{cite journal|last1=Strozecki|first1=Yann|last2=Mary|first2=Arnaud|date=2019|title=Efficient Enumeration of Solutions Produced by Closure Operations|url=https://dmtcs.episciences.org/5549|journal=Discrete Mathematics & Theoretical Computer Science|volume=21|issue=3|doi=10.23638/DMTCS-21-3-22}}</ref> the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP''',<ref name="closure">{{cite journal|last1=Strozecki|first1=Yann|last2=Mary|first2=Arnaud|date=2019|title=Efficient Enumeration of Solutions Produced by Closure Operations|url=https://dmtcs.episciences.org/5549|journal=Discrete Mathematics & Theoretical Computer Science|volume=21|issue=3|doi=10.23638/DMTCS-21-3-22}}</ref> the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific<ins style="font-weight: bold; text-decoration: none;">:</ins></div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* '''Output polynomial''', the class of problems whose complete output can be computed in polynomial time.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* '''Output polynomial''', the class of problems whose complete output can be computed in polynomial time.</div></td>
</tr>
</table>A3nmhttps://en.wikipedia.org/w/index.php?title=Enumeration_algorithm&diff=1090420944&oldid=prev2A02:8109:B03F:F738:91C8:3EC6:961C:2290: references2022-05-29T12:13:17Z<p>references</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 12:13, 29 May 2022</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 13:</td>
<td colspan="2" class="diff-lineno">Line 13:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Enumeration problems have been studied in the context of [[computational complexity theory]], and several [[complexity class]]es have been introduced for such problems.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Enumeration problems have been studied in the context of [[computational complexity theory]], and several [[complexity class]]es have been introduced for such problems.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP''',<ref>{{<del style="font-weight: bold; text-decoration: none;">Cite</del> <del style="font-weight: bold; text-decoration: none;">arXiv</del>|last1=Strozecki|first1=Yann|last2=Mary|first2=Arnaud|date=<del style="font-weight: bold; text-decoration: none;">2017-12-11</del>|title=Efficient <del style="font-weight: bold; text-decoration: none;">enumeration</del> of <del style="font-weight: bold; text-decoration: none;">solutions</del> <del style="font-weight: bold; text-decoration: none;">produced</del> by <del style="font-weight: bold; text-decoration: none;">closure</del> <del style="font-weight: bold; text-decoration: none;">operations</del>|<del style="font-weight: bold; text-decoration: none;">language</del>=<del style="font-weight: bold; text-decoration: none;">en</del>|<del style="font-weight: bold; text-decoration: none;">eprint</del>=<del style="font-weight: bold; text-decoration: none;">1509.05623</del>|<del style="font-weight: bold; text-decoration: none;">class</del>=<del style="font-weight: bold; text-decoration: none;">cs</del>.<del style="font-weight: bold; text-decoration: none;">CC</del>}}</ref> the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP''',<ref<ins style="font-weight: bold; text-decoration: none;"> name="closure"</ins>>{{<ins style="font-weight: bold; text-decoration: none;">cite</ins> <ins style="font-weight: bold; text-decoration: none;">journal</ins>|last1=Strozecki|first1=Yann|last2=Mary|first2=Arnaud|date=<ins style="font-weight: bold; text-decoration: none;">2019</ins>|title=Efficient <ins style="font-weight: bold; text-decoration: none;">Enumeration</ins> of <ins style="font-weight: bold; text-decoration: none;">Solutions</ins> <ins style="font-weight: bold; text-decoration: none;">Produced</ins> by <ins style="font-weight: bold; text-decoration: none;">Closure</ins> <ins style="font-weight: bold; text-decoration: none;">Operations</ins>|<ins style="font-weight: bold; text-decoration: none;">url</ins>=<ins style="font-weight: bold; text-decoration: none;">https://dmtcs.episciences.org/5549</ins>|<ins style="font-weight: bold; text-decoration: none;">journal</ins>=<ins style="font-weight: bold; text-decoration: none;">Discrete Mathematics & Theoretical Computer Science</ins>|<ins style="font-weight: bold; text-decoration: none;">volume</ins>=<ins style="font-weight: bold; text-decoration: none;">21|issue=3|doi=10</ins>.<ins style="font-weight: bold; text-decoration: none;">23638/DMTCS-21-3-22</ins>}}</ref> the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific</div></td>
</tr>
<tr>
<td colspan="2" class="diff-lineno">Line 25:</td>
<td colspan="2" class="diff-lineno">Line 25:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Common techniques ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Common techniques ==</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* '''[[Backtracking]]''': The simplest way to enumerate all solutions is by systematically exploring the space of possible results ([[partition (mathematics)|partitioning]] it at each successive step). However, performing this may not give good guarantees on the delay, i.e., a backtracking algorithm may spend a long time exploring parts of the space of possible results that do not give rise to a full solution. </div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* '''[[Backtracking]]''': The simplest way to enumerate all solutions is by systematically exploring the space of possible results ([[partition (mathematics)|partitioning]] it at each successive step).<ins style="font-weight: bold; text-decoration: none;"><ref>{{cite journal|last1=Read|first1=Ronald C.|author-link1=Ronald C. Read|last2=Tarjan|first2=Robert E.|author-link2=Robert Tarjan|date=1975|title=Bounds on Backtrack Algorithms for Listing Cycles, Paths, and Spanning Trees|url=https://onlinelibrary.wiley.com/doi/10.1002/net.1975.5.3.237|journal=Networks|volume=5|issue=3|pages=237-252|doi=10.1002/net.1975.5.3.237}}</ref></ins> However, performing this may not give good guarantees on the delay, i.e., a backtracking algorithm may spend a long time exploring parts of the space of possible results that do not give rise to a full solution. </div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* '''{{visible anchor|Flashlight search}}''': This technique improves on backtracking by exploring the space of all possible solutions but solving at each step the problem of whether the current partial solution can be extended to a partial solution. If the answer is no, then the algorithm can immediately backtrack and avoid wasting time, which makes it easier to show guarantees on the delay between any two complete solutions. In particular, this technique applies well to [[self-reducible]] problems.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* '''{{visible anchor|Flashlight search}}''': This technique improves on backtracking by exploring the space of all possible solutions but solving at each step the problem of whether the current partial solution can be extended to a partial solution.<ins style="font-weight: bold; text-decoration: none;"><ref name="closure"/></ins> If the answer is no, then the algorithm can immediately backtrack and avoid wasting time, which makes it easier to show guarantees on the delay between any two complete solutions. In particular, this technique applies well to [[self-reducible]] problems.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* '''Closure under set operations''': If we wish to enumerate the disjoint [[union (set theory)|union]] of two sets, then we can solve the problem by enumerating the first set and then the second set. If the union is non disjoint but the sets can be enumerated in [[sorting|sorted order]], then the enumeration can be performed in parallel on both sets while eliminating duplicates on the fly. If the union is not disjoint and both sets are not sorted then duplicates can be eliminated at the expense of a higher memory usage, e.g., using a [[hash table]]. Likewise, the [[cartesian product]] of two sets can be enumerated efficiently by enumerating one set and joining each result with all results obtained when enumerating the second step.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* '''Closure under set operations''': If we wish to enumerate the disjoint [[union (set theory)|union]] of two sets, then we can solve the problem by enumerating the first set and then the second set. If the union is non disjoint but the sets can be enumerated in [[sorting|sorted order]], then the enumeration can be performed in parallel on both sets while eliminating duplicates on the fly. If the union is not disjoint and both sets are not sorted then duplicates can be eliminated at the expense of a higher memory usage, e.g., using a [[hash table]]. Likewise, the [[cartesian product]] of two sets can be enumerated efficiently by enumerating one set and joining each result with all results obtained when enumerating the second step.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td colspan="2" class="diff-lineno">Line 32:</td>
<td colspan="2" class="diff-lineno">Line 32:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The [[vertex enumeration problem]], where we are given a [[polytope]] described as a [[system of equations|system]] of [[linear inequality|linear inequalities]] and we must enumerate the [[Vertex (geometry)|vertices]] of the polytope.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The [[vertex enumeration problem]], where we are given a [[polytope]] described as a [[system of equations|system]] of [[linear inequality|linear inequalities]] and we must enumerate the [[Vertex (geometry)|vertices]] of the polytope.</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the [[minimal transversal]]s of a [[hypergraph (mathematics)|hypergraph]]. This problem is related to [[monotone dualization]] and is connected to many applications in [[database theory]] and [[graph theory]].<ref>{{<del style="font-weight: bold; text-decoration: none;">Cite</del> <del style="font-weight: bold; text-decoration: none;">web</del>|<del style="font-weight: bold; text-decoration: none;">url</del>=<del style="font-weight: bold; text-decoration: none;">https://cuvillier.de/de/shop/publications/1237</del>|title=<del style="font-weight: bold; text-decoration: none;">&quot;</del>Algorithmic and Computational Complexity Issues of MONET<del style="font-weight: bold; text-decoration: none;"> – Cuvillier Verlag</del>|<del style="font-weight: bold; text-decoration: none;">website</del>=cuvillier.de|<del style="font-weight: bold; text-decoration: none;">access-date</del>=<del style="font-weight: bold; text-decoration: none;">2019-05-23</del>}}</ref></div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the [[minimal transversal]]s of a [[hypergraph (mathematics)|hypergraph]]. This problem is related to [[monotone dualization]] and is connected to many applications in [[database theory]] and [[graph theory]].<ref>{{<ins style="font-weight: bold; text-decoration: none;">cite</ins> <ins style="font-weight: bold; text-decoration: none;">book</ins>|<ins style="font-weight: bold; text-decoration: none;">last</ins>=<ins style="font-weight: bold; text-decoration: none;">Hagen|first=Matthias|date=2008</ins>|title=Algorithmic and Computational Complexity Issues of MONET|<ins style="font-weight: bold; text-decoration: none;">url</ins>=<ins style="font-weight: bold; text-decoration: none;">https://</ins>cuvillier.de<ins style="font-weight: bold; text-decoration: none;">/de/shop/publications/1237</ins>|<ins style="font-weight: bold; text-decoration: none;">location=Göttingen|publisher=Cuvillier|isbn</ins>=<ins style="font-weight: bold; text-decoration: none;">9783736928268</ins>}}</ref></div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the answers to a [[database query]], for instance a [[conjunctive query]] or a query expressed in [[monadic second-order]]. There have been characterizations in [[database theory]] of which conjunctive queries could be enumerated with [[linear time|linear]] preprocessing and [[constant time|constant]] delay.<ref>{{Cite journal|last1=Bagan|first1=Guillaume|last2=Durand|first2=Arnaud|last3=Grandjean|first3=Etienne|date=2007|editor-last=Duparc|editor-first=Jacques|editor2-last=Henzinger|editor2-first=Thomas A.|title=On Acyclic Conjunctive Queries and Constant Delay Enumeration|journal=Computer Science Logic|volume=4646|series=Lecture Notes in Computer Science|language=en|publisher=Springer Berlin Heidelberg|pages=208–222|doi=10.1007/978-3-540-74915-8_18|isbn=9783540749158}}</ref></div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the answers to a [[database query]], for instance a [[conjunctive query]] or a query expressed in [[monadic second-order]]. There have been characterizations in [[database theory]] of which conjunctive queries could be enumerated with [[linear time|linear]] preprocessing and [[constant time|constant]] delay.<ref>{{Cite journal|last1=Bagan|first1=Guillaume|last2=Durand|first2=Arnaud|last3=Grandjean|first3=Etienne|date=2007|editor-last=Duparc|editor-first=Jacques|editor2-last=Henzinger|editor2-first=Thomas A.|title=On Acyclic Conjunctive Queries and Constant Delay Enumeration|journal=Computer Science Logic|volume=4646|series=Lecture Notes in Computer Science|language=en|publisher=Springer Berlin Heidelberg|pages=208–222|doi=10.1007/978-3-540-74915-8_18|isbn=9783540749158}}</ref></div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The problem of [[Clique problem#Listing all maximal cliques|enumerating maximal cliques]] in an input graph, e.g., with the [[Bron–Kerbosch algorithm]]</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The problem of [[Clique problem#Listing all maximal cliques|enumerating maximal cliques]] in an input graph, e.g., with the [[Bron–Kerbosch algorithm]]</div></td>
</tr>
</table>2A02:8109:B03F:F738:91C8:3EC6:961C:2290https://en.wikipedia.org/w/index.php?title=Enumeration_algorithm&diff=1068692127&oldid=prevCitation bot: Alter: template type. Add: s2cid, authors 1-1. Removed parameters. Some additions/deletions were parameter name changes. | Use this bot. Report bugs. | Suggested by AManWithNoPlan | #UCB_webform 885/17762022-01-29T21:03:44Z<p>Alter: template type. Add: s2cid, authors 1-1. Removed parameters. Some additions/deletions were parameter name changes. | <a href="/wiki/Wikipedia:UCB" class="mw-redirect" title="Wikipedia:UCB">Use this bot</a>. <a href="/wiki/Wikipedia:DBUG" class="mw-redirect" title="Wikipedia:DBUG">Report bugs</a>. | Suggested by AManWithNoPlan | #UCB_webform 885/1776</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 21:03, 29 January 2022</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 13:</td>
<td colspan="2" class="diff-lineno">Line 13:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Enumeration problems have been studied in the context of [[computational complexity theory]], and several [[complexity class]]es have been introduced for such problems.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Enumeration problems have been studied in the context of [[computational complexity theory]], and several [[complexity class]]es have been introduced for such problems.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP''',<ref>{{Cite <del style="font-weight: bold; text-decoration: none;">arxiv</del>|<del style="font-weight: bold; text-decoration: none;">last</del>=Strozecki|<del style="font-weight: bold; text-decoration: none;">first</del>=Yann|last2=Mary|first2=Arnaud|date=2017-12-11|title=Efficient enumeration of solutions produced by closure operations|language=en|eprint=1509.05623|class=cs.CC}}</ref> the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP''',<ref>{{Cite <ins style="font-weight: bold; text-decoration: none;">arXiv</ins>|<ins style="font-weight: bold; text-decoration: none;">last1</ins>=Strozecki|<ins style="font-weight: bold; text-decoration: none;">first1</ins>=Yann|last2=Mary|first2=Arnaud|date=2017-12-11|title=Efficient enumeration of solutions produced by closure operations|language=en|eprint=1509.05623|class=cs.CC}}</ref> the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific</div></td>
</tr>
<tr>
<td colspan="2" class="diff-lineno">Line 33:</td>
<td colspan="2" class="diff-lineno">Line 33:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The [[vertex enumeration problem]], where we are given a [[polytope]] described as a [[system of equations|system]] of [[linear inequality|linear inequalities]] and we must enumerate the [[Vertex (geometry)|vertices]] of the polytope.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The [[vertex enumeration problem]], where we are given a [[polytope]] described as a [[system of equations|system]] of [[linear inequality|linear inequalities]] and we must enumerate the [[Vertex (geometry)|vertices]] of the polytope.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the [[minimal transversal]]s of a [[hypergraph (mathematics)|hypergraph]]. This problem is related to [[monotone dualization]] and is connected to many applications in [[database theory]] and [[graph theory]].<ref>{{Cite web|url=https://cuvillier.de/de/shop/publications/1237|title=&quot;Algorithmic and Computational Complexity Issues of MONET – Cuvillier Verlag|website=cuvillier.de|access-date=2019-05-23}}</ref></div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the [[minimal transversal]]s of a [[hypergraph (mathematics)|hypergraph]]. This problem is related to [[monotone dualization]] and is connected to many applications in [[database theory]] and [[graph theory]].<ref>{{Cite web|url=https://cuvillier.de/de/shop/publications/1237|title=&quot;Algorithmic and Computational Complexity Issues of MONET – Cuvillier Verlag|website=cuvillier.de|access-date=2019-05-23}}</ref></div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the answers to a [[database query]], for instance a [[conjunctive query]] or a query expressed in [[monadic second-order]]. There have been characterizations in [[database theory]] of which conjunctive queries could be enumerated with [[linear time|linear]] preprocessing and [[constant time|constant]] delay.<ref>{{Cite journal|<del style="font-weight: bold; text-decoration: none;">last</del>=Bagan|<del style="font-weight: bold; text-decoration: none;">first</del>=Guillaume|last2=Durand|first2=Arnaud|last3=Grandjean|first3=Etienne|date=2007|editor-last=Duparc|editor-first=Jacques|editor2-last=Henzinger|editor2-first=Thomas A.|title=On Acyclic Conjunctive Queries and Constant Delay Enumeration|journal=Computer Science Logic|volume=4646|series=Lecture Notes in Computer Science|language=en|publisher=Springer Berlin Heidelberg|pages=208–222|doi=10.1007/978-3-540-74915-8_18|isbn=9783540749158}}</ref></div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the answers to a [[database query]], for instance a [[conjunctive query]] or a query expressed in [[monadic second-order]]. There have been characterizations in [[database theory]] of which conjunctive queries could be enumerated with [[linear time|linear]] preprocessing and [[constant time|constant]] delay.<ref>{{Cite journal|<ins style="font-weight: bold; text-decoration: none;">last1</ins>=Bagan|<ins style="font-weight: bold; text-decoration: none;">first1</ins>=Guillaume|last2=Durand|first2=Arnaud|last3=Grandjean|first3=Etienne|date=2007|editor-last=Duparc|editor-first=Jacques|editor2-last=Henzinger|editor2-first=Thomas A.|title=On Acyclic Conjunctive Queries and Constant Delay Enumeration|journal=Computer Science Logic|volume=4646|series=Lecture Notes in Computer Science|language=en|publisher=Springer Berlin Heidelberg|pages=208–222|doi=10.1007/978-3-540-74915-8_18|isbn=9783540749158}}</ref></div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The problem of [[Clique problem#Listing all maximal cliques|enumerating maximal cliques]] in an input graph, e.g., with the [[Bron–Kerbosch algorithm]]</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The problem of [[Clique problem#Listing all maximal cliques|enumerating maximal cliques]] in an input graph, e.g., with the [[Bron–Kerbosch algorithm]]</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Listing all elements of structures such as [[matroid]]s and [[greedoid]]s</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Listing all elements of structures such as [[matroid]]s and [[greedoid]]s</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Several problems on graphs, e.g., enumerating [[independent set (graph theory)|independent set]]s, [[path (graph theory)|paths]], [[cut (graph theory)|cuts]], etc.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Several problems on graphs, e.g., enumerating [[independent set (graph theory)|independent set]]s, [[path (graph theory)|paths]], [[cut (graph theory)|cuts]], etc.</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the [[Boolean satisfiability problem|satisfying assignment]]s of representations of [[Boolean function]]s, e.g., a Boolean formula written in [[conjunctive normal form]] or [[disjunctive normal form]], a [[binary decision diagram]] such as an [[OBDD]], or a [[Boolean circuit]] in restricted classes studied in [[knowledge compilation]], e.g., [[Negation normal form|NNF]].<ref>{{Cite journal|<del style="font-weight: bold; text-decoration: none;">last</del>=Marquis|<del style="font-weight: bold; text-decoration: none;">first</del>=P.|last2=Darwiche|first2=A.|date=2002|title=A Knowledge Compilation Map|journal=Journal of Artificial Intelligence Research|volume=17|pages=229–264|language=en|doi=10.1613/jair.989|arxiv=1106.1819}}</ref></div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the [[Boolean satisfiability problem|satisfying assignment]]s of representations of [[Boolean function]]s, e.g., a Boolean formula written in [[conjunctive normal form]] or [[disjunctive normal form]], a [[binary decision diagram]] such as an [[OBDD]], or a [[Boolean circuit]] in restricted classes studied in [[knowledge compilation]], e.g., [[Negation normal form|NNF]].<ref>{{Cite journal|<ins style="font-weight: bold; text-decoration: none;">last1</ins>=Marquis|<ins style="font-weight: bold; text-decoration: none;">first1</ins>=P.|last2=Darwiche|first2=A.|date=2002|title=A Knowledge Compilation Map|journal=Journal of Artificial Intelligence Research|volume=17|pages=229–264|language=en|doi=10.1613/jair.989|arxiv=1106.1819<ins style="font-weight: bold; text-decoration: none;">|s2cid=9919794</ins>}}</ref></div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Connection to computability theory ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Connection to computability theory ==</div></td>
</tr>
</table>Citation bothttps://en.wikipedia.org/w/index.php?title=Enumeration_algorithm&diff=983864327&oldid=prevHeadbomb: Various citation & identifier cleanup, plus AWB genfixes (arxiv version pointless when published)2020-10-16T18:15:41Z<p>Various citation & identifier cleanup, plus AWB genfixes (arxiv version pointless when published)</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 18:15, 16 October 2020</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 1:</td>
<td colspan="2" class="diff-lineno">Line 1:</td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>In [[computer science]], an '''enumeration algorithm''' is an [[algorithm]] that [[enumeration|enumerates]] the answers to a [[computational problem]]. Formally, such an algorithm applies to problems that take an input and produce a list of solutions, similarly to [[function problems]]. For each input, the enumeration algorithm must produce the list of all solutions, without duplicates, and then halt. The performance of an enumeration algorithm is measured in terms of the time required to produce the solutions, either in terms of the '''total time''' required to produce all solutions, or in terms of the maximal '''delay''' between two consecutive solutions and in terms of a '''preprocessing''' time, counted as the time before outputting the first solution. This complexity can be expressed in terms of the size of the input, the size of each individual output, or the total size of the set of all outputs, similarly to what is done with [[output-sensitive algorithm<del style="font-weight: bold; text-decoration: none;">|output-sensitive algorithms</del>]].</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>In [[computer science]], an '''enumeration algorithm''' is an [[algorithm]] that [[enumeration|enumerates]] the answers to a [[computational problem]]. Formally, such an algorithm applies to problems that take an input and produce a list of solutions, similarly to [[function problems]]. For each input, the enumeration algorithm must produce the list of all solutions, without duplicates, and then halt. The performance of an enumeration algorithm is measured in terms of the time required to produce the solutions, either in terms of the '''total time''' required to produce all solutions, or in terms of the maximal '''delay''' between two consecutive solutions and in terms of a '''preprocessing''' time, counted as the time before outputting the first solution. This complexity can be expressed in terms of the size of the input, the size of each individual output, or the total size of the set of all outputs, similarly to what is done with [[output-sensitive algorithm]]<ins style="font-weight: bold; text-decoration: none;">s</ins>.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Formal definitions ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Formal definitions ==</div></td>
</tr>
<tr>
<td colspan="2" class="diff-lineno">Line 11:</td>
<td colspan="2" class="diff-lineno">Line 11:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Common complexity classes ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Common complexity classes ==</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Enumeration problems have been studied in the context of [[computational complexity theory]], and several [[complexity class<del style="font-weight: bold; text-decoration: none;">|complexity classes</del>]] have been introduced for such problems.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Enumeration problems have been studied in the context of [[computational complexity theory]], and several [[complexity class]]<ins style="font-weight: bold; text-decoration: none;">es</ins> have been introduced for such problems.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP'''<ref>{{Cite arxiv|last=Strozecki|first=Yann|last2=Mary|first2=Arnaud|date=2017-12-11|title=Efficient enumeration of solutions produced by closure operations|language=en|eprint=1509.05623|class=cs.CC}}</ref><del style="font-weight: bold; text-decoration: none;">,</del> the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP'''<ins style="font-weight: bold; text-decoration: none;">,</ins><ref>{{Cite arxiv|last=Strozecki|first=Yann|last2=Mary|first2=Arnaud|date=2017-12-11|title=Efficient enumeration of solutions produced by closure operations|language=en|eprint=1509.05623|class=cs.CC}}</ref> the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific</div></td>
</tr>
<tr>
<td colspan="2" class="diff-lineno">Line 32:</td>
<td colspan="2" class="diff-lineno">Line 32:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The [[vertex enumeration problem]], where we are given a [[polytope]] described as a [[system of equations|system]] of [[linear inequality|linear inequalities]] and we must enumerate the [[Vertex (geometry)|vertices]] of the polytope.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The [[vertex enumeration problem]], where we are given a [[polytope]] described as a [[system of equations|system]] of [[linear inequality|linear inequalities]] and we must enumerate the [[Vertex (geometry)|vertices]] of the polytope.</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the [[minimal transversal<del style="font-weight: bold; text-decoration: none;">|minimal transversals</del>]] of a [[hypergraph (mathematics)|hypergraph]]. This problem is related to [[monotone dualization]] and is connected to many applications in [[database theory]] and [[graph theory]].<ref>{{Cite web|url=https://cuvillier.de/de/shop/publications/1237|title=&quot;Algorithmic and Computational Complexity Issues of MONET – Cuvillier Verlag|website=cuvillier.de|access-date=2019-05-23}}</ref></div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the [[minimal transversal]]<ins style="font-weight: bold; text-decoration: none;">s</ins> of a [[hypergraph (mathematics)|hypergraph]]. This problem is related to [[monotone dualization]] and is connected to many applications in [[database theory]] and [[graph theory]].<ref>{{Cite web|url=https://cuvillier.de/de/shop/publications/1237|title=&quot;Algorithmic and Computational Complexity Issues of MONET – Cuvillier Verlag|website=cuvillier.de|access-date=2019-05-23}}</ref></div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the answers to a [[database query]], for instance a [[conjunctive query]] or a query expressed in [[monadic second-order]]. There have been characterizations in [[database theory]] of which conjunctive queries could be enumerated with [[linear time|linear]] preprocessing and [[constant time|constant]] delay.<ref>{{Cite journal|last=Bagan|first=Guillaume|last2=Durand|first2=Arnaud|last3=Grandjean|first3=Etienne|date=2007|editor-last=Duparc|editor-first=Jacques|editor2-last=Henzinger|editor2-first=Thomas A.|title=On Acyclic Conjunctive Queries and Constant Delay Enumeration|journal=Computer Science Logic|volume=4646|series=Lecture Notes in Computer Science|language=en|publisher=Springer Berlin Heidelberg|pages=208–222|doi=10.1007/978-3-540-74915-8_18|isbn=9783540749158}}</ref></div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the answers to a [[database query]], for instance a [[conjunctive query]] or a query expressed in [[monadic second-order]]. There have been characterizations in [[database theory]] of which conjunctive queries could be enumerated with [[linear time|linear]] preprocessing and [[constant time|constant]] delay.<ref>{{Cite journal|last=Bagan|first=Guillaume|last2=Durand|first2=Arnaud|last3=Grandjean|first3=Etienne|date=2007|editor-last=Duparc|editor-first=Jacques|editor2-last=Henzinger|editor2-first=Thomas A.|title=On Acyclic Conjunctive Queries and Constant Delay Enumeration|journal=Computer Science Logic|volume=4646|series=Lecture Notes in Computer Science|language=en|publisher=Springer Berlin Heidelberg|pages=208–222|doi=10.1007/978-3-540-74915-8_18|isbn=9783540749158}}</ref></div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* The problem of [[<del style="font-weight: bold; text-decoration: none;">Clique_problem</del>#<del style="font-weight: bold; text-decoration: none;">Listing_all_maximal_cliques</del>|enumerating maximal cliques]] in an input graph, e.g., with the [[Bron–Kerbosch algorithm]]</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* The problem of [[<ins style="font-weight: bold; text-decoration: none;">Clique problem</ins>#<ins style="font-weight: bold; text-decoration: none;">Listing all maximal cliques</ins>|enumerating maximal cliques]] in an input graph, e.g., with the [[Bron–Kerbosch algorithm]]</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Listing all elements of structures such as [[matroid]]s and [[greedoid]]s</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Listing all elements of structures such as [[matroid]]s and [[greedoid]]s</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Several problems on graphs, e.g., enumerating [[independent set (graph theory)|independent set]]s, [[path (graph theory)|paths]], [[cut (graph theory)|cuts]], etc.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Several problems on graphs, e.g., enumerating [[independent set (graph theory)|independent set]]s, [[path (graph theory)|paths]], [[cut (graph theory)|cuts]], etc.</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the [[Boolean satisfiability problem|satisfying assignment]]s of representations of [[Boolean function]]s, e.g., a Boolean formula written in [[conjunctive normal form]] or [[disjunctive normal form]], a [[binary decision diagram]] such as an [[OBDD]], or a [[Boolean circuit]] in restricted classes studied in [[knowledge compilation]], e.g., [[Negation normal form|NNF]].<ref>{{Cite journal|last=Marquis|first=P.|last2=Darwiche|first2=A.|date=2002|title=A Knowledge Compilation Map|journal=Journal of Artificial Intelligence Research|volume=17|pages=229–264|language=en|doi=10.1613/jair.989|arxiv=1106.<del style="font-weight: bold; text-decoration: none;">1819v1</del>}}</ref></div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the [[Boolean satisfiability problem|satisfying assignment]]s of representations of [[Boolean function]]s, e.g., a Boolean formula written in [[conjunctive normal form]] or [[disjunctive normal form]], a [[binary decision diagram]] such as an [[OBDD]], or a [[Boolean circuit]] in restricted classes studied in [[knowledge compilation]], e.g., [[Negation normal form|NNF]].<ref>{{Cite journal|last=Marquis|first=P.|last2=Darwiche|first2=A.|date=2002|title=A Knowledge Compilation Map|journal=Journal of Artificial Intelligence Research|volume=17|pages=229–264|language=en|doi=10.1613/jair.989|arxiv=1106.<ins style="font-weight: bold; text-decoration: none;">1819</ins>}}</ref></div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Connection to computability theory ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Connection to computability theory ==</div></td>
</tr>
</table>Headbombhttps://en.wikipedia.org/w/index.php?title=Enumeration_algorithm&diff=938082536&oldid=prevHeadbomb: Add: class, eprint. Removed parameters. Some additions/deletions were actually parameter name changes. | You can use this tool yourself. Report bugs here. | via #UCB_Gadget2020-01-29T00:52:45Z<p>Add: class, eprint. Removed parameters. Some additions/deletions were actually parameter name changes. | You can <a href="/wiki/Wikipedia:UCB" class="mw-redirect" title="Wikipedia:UCB">use this tool</a> yourself. <a href="/wiki/Wikipedia:DBUG" class="mw-redirect" title="Wikipedia:DBUG">Report bugs here</a>. | via #UCB_Gadget</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 00:52, 29 January 2020</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 13:</td>
<td colspan="2" class="diff-lineno">Line 13:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Enumeration problems have been studied in the context of [[computational complexity theory]], and several [[complexity class|complexity classes]] have been introduced for such problems.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Enumeration problems have been studied in the context of [[computational complexity theory]], and several [[complexity class|complexity classes]] have been introduced for such problems.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP'''<ref>{{Cite <del style="font-weight: bold; text-decoration: none;">journal</del>|last=Strozecki|first=Yann|last2=Mary|first2=Arnaud|date=2017-12-11|title=Efficient enumeration of solutions produced by closure operations|language=en|<del style="font-weight: bold; text-decoration: none;">arxiv</del>=1509.05623|<del style="font-weight: bold; text-decoration: none;">bibcode</del>=<del style="font-weight: bold; text-decoration: none;">2015arXiv150905623M</del>}}</ref>, the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP'''<ref>{{Cite <ins style="font-weight: bold; text-decoration: none;">arxiv</ins>|last=Strozecki|first=Yann|last2=Mary|first2=Arnaud|date=2017-12-11|title=Efficient enumeration of solutions produced by closure operations|language=en|<ins style="font-weight: bold; text-decoration: none;">eprint</ins>=1509.05623|<ins style="font-weight: bold; text-decoration: none;">class</ins>=<ins style="font-weight: bold; text-decoration: none;">cs.CC</ins>}}</ref>, the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific</div></td>
</tr>
</table>Headbombhttps://en.wikipedia.org/w/index.php?title=Enumeration_algorithm&diff=938082387&oldid=prevHeadbomb: Alter: journal. Add: arxiv, pages, volume, bibcode. Removed URL that duplicated unique identifier. Formatted dashes. | You can use this tool yourself. Report bugs here. | via #UCB_Gadget2020-01-29T00:51:35Z<p>Alter: journal. Add: arxiv, pages, volume, bibcode. Removed URL that duplicated unique identifier. Formatted <a href="/wiki/Wikipedia:ENDASH" class="mw-redirect" title="Wikipedia:ENDASH">dashes</a>. | You can <a href="/wiki/Wikipedia:UCB" class="mw-redirect" title="Wikipedia:UCB">use this tool</a> yourself. <a href="/wiki/Wikipedia:DBUG" class="mw-redirect" title="Wikipedia:DBUG">Report bugs here</a>. | via #UCB_Gadget</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 00:51, 29 January 2020</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 13:</td>
<td colspan="2" class="diff-lineno">Line 13:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Enumeration problems have been studied in the context of [[computational complexity theory]], and several [[complexity class|complexity classes]] have been introduced for such problems.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Enumeration problems have been studied in the context of [[computational complexity theory]], and several [[complexity class|complexity classes]] have been introduced for such problems.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP'''<ref>{{Cite journal|last=Strozecki|first=Yann|last2=Mary|first2=Arnaud|date=2017-12-11|title=Efficient enumeration of solutions produced by closure operations<del style="font-weight: bold; text-decoration: none;">|url=https://arxiv.org/abs/1712.03714v3</del>|language=en|arxiv=1509.05623}}</ref>, the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP'''<ref>{{Cite journal|last=Strozecki|first=Yann|last2=Mary|first2=Arnaud|date=2017-12-11|title=Efficient enumeration of solutions produced by closure operations|language=en|arxiv=1509.05623<ins style="font-weight: bold; text-decoration: none;">|bibcode=2015arXiv150905623M</ins>}}</ref>, the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific</div></td>
</tr>
<tr>
<td colspan="2" class="diff-lineno">Line 33:</td>
<td colspan="2" class="diff-lineno">Line 33:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The [[vertex enumeration problem]], where we are given a [[polytope]] described as a [[system of equations|system]] of [[linear inequality|linear inequalities]] and we must enumerate the [[Vertex (geometry)|vertices]] of the polytope.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The [[vertex enumeration problem]], where we are given a [[polytope]] described as a [[system of equations|system]] of [[linear inequality|linear inequalities]] and we must enumerate the [[Vertex (geometry)|vertices]] of the polytope.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the [[minimal transversal|minimal transversals]] of a [[hypergraph (mathematics)|hypergraph]]. This problem is related to [[monotone dualization]] and is connected to many applications in [[database theory]] and [[graph theory]].<ref>{{Cite web|url=https://cuvillier.de/de/shop/publications/1237|title=&quot;Algorithmic and Computational Complexity Issues of MONET – Cuvillier Verlag|website=cuvillier.de|access-date=2019-05-23}}</ref></div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the [[minimal transversal|minimal transversals]] of a [[hypergraph (mathematics)|hypergraph]]. This problem is related to [[monotone dualization]] and is connected to many applications in [[database theory]] and [[graph theory]].<ref>{{Cite web|url=https://cuvillier.de/de/shop/publications/1237|title=&quot;Algorithmic and Computational Complexity Issues of MONET – Cuvillier Verlag|website=cuvillier.de|access-date=2019-05-23}}</ref></div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the answers to a [[database query]], for instance a [[conjunctive query]] or a query expressed in [[monadic second-order]]. There have been characterizations in [[database theory]] of which conjunctive queries could be enumerated with [[linear time|linear]] preprocessing and [[constant time|constant]] delay.<ref>{{Cite journal|last=Bagan|first=Guillaume|last2=Durand|first2=Arnaud|last3=Grandjean|first3=Etienne|date=2007|editor-last=Duparc|editor-first=Jacques|editor2-last=Henzinger|editor2-first=Thomas A.|title=On Acyclic Conjunctive Queries and Constant Delay Enumeration<del style="font-weight: bold; text-decoration: none;">|url=https://link.springer.com/chapter/10.1007/978-3-540-74915-8_18</del>|journal=Computer Science Logic|series=Lecture Notes in Computer Science|language=en|publisher=Springer Berlin Heidelberg|pages=208–222|doi=10.1007/978-3-540-74915-8_18|isbn=9783540749158}}</ref></div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the answers to a [[database query]], for instance a [[conjunctive query]] or a query expressed in [[monadic second-order]]. There have been characterizations in [[database theory]] of which conjunctive queries could be enumerated with [[linear time|linear]] preprocessing and [[constant time|constant]] delay.<ref>{{Cite journal|last=Bagan|first=Guillaume|last2=Durand|first2=Arnaud|last3=Grandjean|first3=Etienne|date=2007|editor-last=Duparc|editor-first=Jacques|editor2-last=Henzinger|editor2-first=Thomas A.|title=On Acyclic Conjunctive Queries and Constant Delay Enumeration|journal=Computer Science Logic<ins style="font-weight: bold; text-decoration: none;">|volume=4646</ins>|series=Lecture Notes in Computer Science|language=en|publisher=Springer Berlin Heidelberg|pages=208–222|doi=10.1007/978-3-540-74915-8_18|isbn=9783540749158}}</ref></div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The problem of [[Clique_problem#Listing_all_maximal_cliques|enumerating maximal cliques]] in an input graph, e.g., with the [[Bron–Kerbosch algorithm]]</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The problem of [[Clique_problem#Listing_all_maximal_cliques|enumerating maximal cliques]] in an input graph, e.g., with the [[Bron–Kerbosch algorithm]]</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Listing all elements of structures such as [[matroid]]s and [[greedoid]]s</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Listing all elements of structures such as [[matroid]]s and [[greedoid]]s</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Several problems on graphs, e.g., enumerating [[independent set (graph theory)|independent set]]s, [[path (graph theory)|paths]], [[cut (graph theory)|cuts]], etc.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Several problems on graphs, e.g., enumerating [[independent set (graph theory)|independent set]]s, [[path (graph theory)|paths]], [[cut (graph theory)|cuts]], etc.</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the [[Boolean satisfiability problem|satisfying assignment]]s of representations of [[Boolean function]]s, e.g., a Boolean formula written in [[conjunctive normal form]] or [[disjunctive normal form]], a [[binary decision diagram]] such as an [[OBDD]], or a [[Boolean circuit]] in restricted classes studied in [[knowledge compilation]], e.g., [[Negation normal form|NNF]].<ref>{{Cite journal|last=Marquis|first=P.|last2=Darwiche|first2=A.|date=2002|title=A Knowledge Compilation Map<del style="font-weight: bold; text-decoration: none;">|url=https://arxiv.org/abs/1106.1819v1</del>|journal=Journal <del style="font-weight: bold; text-decoration: none;">Of</del> Artificial Intelligence Research|language=en|doi=10.1613/jair.989}}</ref></div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* Enumerating the [[Boolean satisfiability problem|satisfying assignment]]s of representations of [[Boolean function]]s, e.g., a Boolean formula written in [[conjunctive normal form]] or [[disjunctive normal form]], a [[binary decision diagram]] such as an [[OBDD]], or a [[Boolean circuit]] in restricted classes studied in [[knowledge compilation]], e.g., [[Negation normal form|NNF]].<ref>{{Cite journal|last=Marquis|first=P.|last2=Darwiche|first2=A.|date=2002|title=A Knowledge Compilation Map|journal=Journal <ins style="font-weight: bold; text-decoration: none;">of</ins> Artificial Intelligence Research<ins style="font-weight: bold; text-decoration: none;">|volume=17|pages=229–264</ins>|language=en|doi=10.1613/jair.989<ins style="font-weight: bold; text-decoration: none;">|arxiv=1106.1819v1</ins>}}</ref></div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Connection to computability theory ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Connection to computability theory ==</div></td>
</tr>
</table>Headbombhttps://en.wikipedia.org/w/index.php?title=Enumeration_algorithm&diff=936123345&oldid=prevJarble: adding a section anchor2020-01-16T20:47:41Z<p>adding a section anchor</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 20:47, 16 January 2020</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 26:</td>
<td colspan="2" class="diff-lineno">Line 26:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* '''[[Backtracking]]''': The simplest way to enumerate all solutions is by systematically exploring the space of possible results ([[partition (mathematics)|partitioning]] it at each successive step). However, performing this may not give good guarantees on the delay, i.e., a backtracking algorithm may spend a long time exploring parts of the space of possible results that do not give rise to a full solution. </div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* '''[[Backtracking]]''': The simplest way to enumerate all solutions is by systematically exploring the space of possible results ([[partition (mathematics)|partitioning]] it at each successive step). However, performing this may not give good guarantees on the delay, i.e., a backtracking algorithm may spend a long time exploring parts of the space of possible results that do not give rise to a full solution. </div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* '''Flashlight search''': This technique improves on backtracking by exploring the space of all possible solutions but solving at each step the problem of whether the current partial solution can be extended to a partial solution. If the answer is no, then the algorithm can immediately backtrack and avoid wasting time, which makes it easier to show guarantees on the delay between any two complete solutions. In particular, this technique applies well to [[self-reducible]] problems.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* '''<ins style="font-weight: bold; text-decoration: none;">{{visible anchor|</ins>Flashlight search<ins style="font-weight: bold; text-decoration: none;">}}</ins>''': This technique improves on backtracking by exploring the space of all possible solutions but solving at each step the problem of whether the current partial solution can be extended to a partial solution. If the answer is no, then the algorithm can immediately backtrack and avoid wasting time, which makes it easier to show guarantees on the delay between any two complete solutions. In particular, this technique applies well to [[self-reducible]] problems.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* '''Closure under set operations''': If we wish to enumerate the disjoint [[union (set theory)|union]] of two sets, then we can solve the problem by enumerating the first set and then the second set. If the union is non disjoint but the sets can be enumerated in [[sorting|sorted order]], then the enumeration can be performed in parallel on both sets while eliminating duplicates on the fly. If the union is not disjoint and both sets are not sorted then duplicates can be eliminated at the expense of a higher memory usage, e.g., using a [[hash table]]. Likewise, the [[cartesian product]] of two sets can be enumerated efficiently by enumerating one set and joining each result with all results obtained when enumerating the second step.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* '''Closure under set operations''': If we wish to enumerate the disjoint [[union (set theory)|union]] of two sets, then we can solve the problem by enumerating the first set and then the second set. If the union is non disjoint but the sets can be enumerated in [[sorting|sorted order]], then the enumeration can be performed in parallel on both sets while eliminating duplicates on the fly. If the union is not disjoint and both sets are not sorted then duplicates can be eliminated at the expense of a higher memory usage, e.g., using a [[hash table]]. Likewise, the [[cartesian product]] of two sets can be enumerated efficiently by enumerating one set and joining each result with all results obtained when enumerating the second step.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
</table>Jarblehttps://en.wikipedia.org/w/index.php?title=Enumeration_algorithm&diff=907823931&oldid=prevOAbot: Open access bot: add arxiv identifier to citation with #oabot.2019-07-25T14:25:00Z<p><a href="/wiki/Wikipedia:OABOT" class="mw-redirect" title="Wikipedia:OABOT">Open access bot</a>: add arxiv identifier to citation with #oabot.</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 14:25, 25 July 2019</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 13:</td>
<td colspan="2" class="diff-lineno">Line 13:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Enumeration problems have been studied in the context of [[computational complexity theory]], and several [[complexity class|complexity classes]] have been introduced for such problems.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Enumeration problems have been studied in the context of [[computational complexity theory]], and several [[complexity class|complexity classes]] have been introduced for such problems.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP'''<ref>{{Cite journal|last=Strozecki|first=Yann|last2=Mary|first2=Arnaud|date=2017-12-11|title=Efficient enumeration of solutions produced by closure operations|url=https://arxiv.org/abs/1712.03714v3|language=en}}</ref>, the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>A very general such class is '''EnumP'''<ref>{{Cite journal|last=Strozecki|first=Yann|last2=Mary|first2=Arnaud|date=2017-12-11|title=Efficient enumeration of solutions produced by closure operations|url=https://arxiv.org/abs/1712.03714v3|language=en<ins style="font-weight: bold; text-decoration: none;">|arxiv=1509.05623</ins>}}</ref>, the class of problems for which the correctness of a possible output can be checked in [[polynomial time]] in the input and output. Formally, for such a problem, there must exist an algorithm A which takes as input the problem input ''x'', the candidate output ''y'', and solves the [[decision problem]] of whether ''y'' is a correct output for the input ''x'', in polynomial time in ''x'' and ''y''. For instance, this class contains all problems that amount to enumerating the [[witness (mathematics)|witnesses]] of a problem in the [[class (complexity theory)|class]] [[NP (complexity)|NP]].</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Other classes that have been defined include the following. In the case of problems that are also in '''EnumP''', these problems are ordered from least to most specific</div></td>
</tr>
</table>OAbot