Le concept que vous recherchez s'appelle la complexité d'énumération , qui est l'étude de la complexité informatique d'énumérer (énumérer) toutes les solutions à un problème (ou les membres d'un langage / ensemble). Les algorithmes d'énumération peuvent être modélisés comme un processus en deux étapes: une étape de précalcul et une phase d'énumération avec retard . Ces deux étapes ont leurs propres complexités temporelles et spatiales (peut-être aussi l'entropie). Dans un esprit général de complexité, il y a souvent des compromis à considérer.
L' étape de précalcul effectue certains travaux qui sont nécessaires avant que la première solution soit énumérée. Cela peut impliquer de trouver la solution elle-même ou d'initialiser une grande structure de données qui réduira le délai global entre chaque solution.
Le retard est le coût des ressources associé au calcul nécessaire entre les solutions énumérées arbitraires. En d'autres termes, le retard est une mesure de l'espace et du temps nécessaires pour produire la solution après celle . On dit que les problèmes dont les solutions prennent temps pour chaque énumération ont un retard constant. Une exigence de temps aurait un retard polynomial. i t h O ( 1 ) O ( p o l y ( n ) )i + 1t hjet hO ( 1 )O ( p o l y( n ) )
Pour le problème d'énumération que vous avez spécifiquement mentionné dans votre question, vous devriez examiner la classe et ses frères et sœurs apparentés dans la section 2.1 de "Énumération: algorithmes et complexité" de Johannes Schmidt (lié en bas).ENUMNP
Pourquoi nous soucions-nous du temps et du délai de précalcul?
Le délai est très important pour comprendre les véritables subtilités des problèmes de dénombrement. Énumération des éléments de (jusqu'à la taille ) et où est une formule booléenne (c'est-à-dire SAT) prennent tous deux un temps exponentiel. Cependant, l'énumération via ne nécessite qu'un délai constant car vous pouvez simplement parcourir les éléments dans un certain ordre. Pour tout ce que nous savons, le délai d'énumération des solutions d'une instance 3SAT pourrait être exponentiel. Notre travail en tant que théoriciens de la complexité est de saisir pourquoi ce dernier problème est fondamentalement plus difficile (plus complexe) que le premier. Delay fait un très bon travail pour montrer cette différence. n { → x : ϕ ( → x ) } ϕ ( → x ) Σ ∗Σ∗n{ x⃗ : ϕ ( x⃗ ) }ϕ ( x⃗ )Σ ∗
De même, nous devons également savoir combien de précalcul est effectué. Nous pouvons réduire le délai de tout problème d'énumération à un temps et à un espace constants en précalculant toutes les solutions et en les stockant dans une liste à énumérer ultérieurement. Le défi est de trouver le meilleur équilibre entre les deux ressources.
L'ordre dans lequel vous énumérez les éléments peut également influer sur la complexité. Le fait d'exiger le retour des résultats dans un ordre trié spécifié peut nous obliger à effectuer des calculs supplémentaires dans les deux étapes. Bien que les situations où n'importe quel ordre suffit (tant que chaque élément énuméré est unique) sont certainement étudiées aussi.
Pour autant que je sache, ces classes n'ont généralement pas d'étiquettes concises (semblables à et ). Nous ne pouvons pas raisonnablement nous attendre à pouvoir le faire, car les classes de complexité d'énumération jonglent avec environ 3 ressources ou plus (précalcul / temps total, espace, retard et entropie). Il existe tout simplement trop de combinaisons de limites de ressources pour distribuer des noms spéciaux. Cela ne rend pas ces cours moins intéressants et n'empêche pas les chercheurs d'essayer de toute façon.N PPNP
Ressources
Cette enquête (vraiment une tentative de formalisation) devrait vous aider à démarrer. Il prouve également certains théorèmes de hiérarchie de base.
Énumération: algorithmes et complexité
(Johannes Schmidt, 2009)
https://www.thi.uni-hannover.de/fileadmin/forschung/arbeiten/schmidt-da.pdf
Pour une énumération des résultats dans la complexité de l'énumération, consultez cette compilation organisée par Kunihiro Wasa. Puisqu'il est classé par type de problème, vous pouvez facilement trouver un certain nombre d'articles dédiés à l'énumération des cycles graphiques. Il devrait être simple de modifier les algorithmes impliqués pour ne considérer que les cycles avec un nœud donné.
http://www-ikn.ist.hokudai.ac.jp/~wasa/enumeration_complexity.html