Je lisais une question sur Stack Overflow demandant si c'était NP- difficile de lister tous les cycles simples dans un graphique contenant un nœud particulier et il m'est venu à l'esprit que je ne pouvais penser à aucune classe de complexité existante qui était bien adaptée pour parler de problèmes de la forme "liste de toutes les solutions à ce problème." La classe NP dans un certain sens se compose de problèmes qui demandent s'il existe au moins une solution, la classe FNP demande de produire une seule solution, et la classe #P demande de compter le nombre de solutions, mais aucune de celles-ci ne traite de la complexité d'énumérer de manière exhaustive toutes les solutions possibles.
Existe-t-il une classe de complexité pour décrire les problèmes qui sont de la forme "étant donné un prédicat calculable en temps polynomial et une chaîne , énumérer tous les pour lesquels est vrai sous réserve de [insérer certains restrictions de complexité appropriées]? " Je comprends qu'il pourrait être difficile d'identifier les restrictions étant donné que le nombre de solutions pourrait être exponentiellement plus grand que la taille de l'entrée , bien que cela ne semble pas insurmontable.x y P ( x , y ) x
la source
Réponses:
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 h jet h O ( 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 PP NP
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
la source