Classes de complexité relatives à la liste de toutes les solutions?

15

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 ) xP(x,y)xyP(x,y)x

templatetypedef
la source
Intéressant. Peut-être qu'en pratique, trop d'exemples de problèmes pertinents ont souvent un nombre exponentiel de solutions, le cas échéant. Les instances pour SAT et CLIQUE, en général, ont un grand espace de solution.
chi
3
Voici un autre ansatz pour formaliser cela. Un problème est dans (pour X-enumerable) s'il y a un X-algorithme avec de telle sorte que renvoie la ème solution (ie le ème avec P (x, y) ) par rapport à certains commande. Notez comment cela est similaire à la façon dont on définit parfois RE. Cela contourne la taille de l'espace de la solution et se concentre sur la difficulté de trouver la solution suivante. Bien entendu, le coût total est disponible par sommation. X E A A ( x , i ) i I y P ( x , y )PXEAA(x,i)iIyP(x,y)
Raphael
3
(Je ne l' ai jamais vu défini comme une classe , mais savez - vous du concept de l' énumération avec un retard polynôme ?)
@Raphael Ce n'est peut-être pas ce que nous recherchons. Par exemple, si le meilleur algorithme pour doit itérer sur toutes les solutions jusqu'à ce qu'il ait trouvé d'entre elles et s'exécute dans le temps , alors la complexité que nous recherchons est , mais la sommation suggère une complexité . i Θ ( f ( | x | ) ) Θ ( f ( | x | ) ) Θ ( f ( | x | ) 2 )A(x,i)iΘ(f(|x|))Θ(f(|x|))Θ(f(|x|)2)
Lieuwe Vinkhuijzen
@RickyDemer C'est ce que je secouais de mes sleaves, n'est-ce pas? Bon à savoir qu'il existe une formalisation établie.
Raphael

Réponses:

10

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+1thithO(1)O(poly(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

mdxn
la source
Aurais-je raison de penser que l'énumération des éléments de jusqu'à la taille avec retard exigerait qu'ils soient sortis dans l'ordre du code Gray? Ou est-il normalement supposé dans le domaine de la complexité de l'énumération que l'écriture d'une solution prend , même si l'espace nécessaire pour stocker la solution est plus grand que cela? n O ( 1 ) O ( 1 )ΣnO(1)O(1)
j_random_hacker
1
@j_random_hacker Je ne pense pas que votre pensée soit fausse, bien que la vraie réponse à votre question soit "ça dépend". Les auteurs de ces articles indiquent généralement quel modèle de calcul (bande régulière TM vs RAM vs Word RAM) ils utilisent. Ce choix changera ce qui peut être considéré comme une opération à temps constant et ce qui ne peut pas (comme incrémenter un nombre ou générer une sortie). Cette différence est supposée disparaître dès que votre retard devient polynomial en raison de la thèse étendue de Church Turing.
mdxn