Les algorithmes d’énumération sont des algorithmes qui ont pour but de calculer ou afficher une liste de toutes les réponses à un problème donné ; alors que les algorithmes « classiques » cherchent plutôt une solution (problèmes d’optimisation) ou à tester la vérité d’une affirmation (problèmes de décision). Par exemple, un algorithme listant toutes les cliques d’un graphe est un algorithme d’énumération.

Cette distinction est faite pour pouvoir construire des classes de complexité propres aux problèmes d’énumération. Par exemple, la classe PolynomialDelay des algorithmes d’énumérations dont le temps entre l’affichage de deux résultats est borné par un polynôme en la taille de l’entrée.

Classes de complexité

modifier

TotalP

modifier

La classe TotalP est la classe des problèmes dont les solutions peuvent être énumérées en temps polynomial en  , où   est la taille de l’entrée, et   celle de la sortie. Elle est un cas particulier de classe de complexité paramétrée, où le paramètre est la taille de la sortie.

IncrementalPolynomial

modifier

IncrementalPolynomial est la classe des problèmes dont on il existe un algorithme qui prennent un temps polynomial en   entre l’affichage de la  -ième et la  -ième solutions, où   est la taille de l’entrée.

Pour montrer qu’un algorithme résout un problème d’énumération en temps IncrementalPolynomial, il est préférable de lui imposer de ne pas répéter plusieurs fois la même solution. Autrement, s'il peut trouver la première solution en temps polynomial, il lui suffit de répéter régulièrement une solution qu’il a déjà trouvée pendant qu’il en cherche une autre, ce qui réduirait l’intérêt de cette classe.

PolynomialDelay

modifier

Cette classe regroupe les problèmes pour lesquels il est possible d’énumérer les solutions de façon que le temps entre l’affichage de deux solutions soit borné par un polynôme en la taille de l’entrée. Elle est donc incluse dans IncrementalPolynomial.

Les problèmes dans P et dont l’ensemble des solutions est un matroïde sont en général dans cette classe. En effet, puisqu’ils sont dans P, on peut trouver une solution en temps polynomial ; et à partir de celle-ci on peut engendrer toutes les solutions par échange et hérédité.

Exemples

modifier

Cliques

modifier

Chemin (s, t)

modifier

Références

modifier

📚 Artikel Terkait di Wikipedia

Algorithme d'optimisation

pratique : Quelles sources sont attendues ? Comment ajouter mes sources ? Les algorithmes d’optimisation cherchent à déterminer le jeu de paramètres d’entrée d’une

Algorithme génétique

Les algorithmes génétiques appartiennent à la famille des algorithmes évolutionnistes. Leur but est d'obtenir une solution approchée à un problème d'optimisation

Algorithme de Bron-Kerbosch

homonymes, voir Kerbosch. En informatique, l'algorithme de Bron–Kerbosch est un algorithme d'énumération pour trouver toutes les cliques maximales d'un

Théorie des graphes

alors dits orientés) et sont alors appelées des flèches ou des arcs. Les algorithmes élaborés pour résoudre des problèmes concernant les objets de cette théorie

Problème du voyageur de commerce

résultat exact, est l'énumération de tous les chemins possibles par recherche exhaustive. La complexité en temps de cet algorithme est en O ( n ! ) {\displaystyle

Algorithme de Ricart et Agrawala

projets correspondants. L’Algorithme Ricart-Agrawala est un algorithme d'exclusion mutuelle sur un système distribué. Cet algorithme est une extension et

Problème algorithmique

) selon les recommandations des projets correspondants. Un problème algorithmique est, en informatique théorique, un objet mathématique qui représente

Pentomino

solutions possibles. C'est habituellement résolu à l'aide d'un algorithme d'énumération. John G. Fletcher a le premier résolu le cas 6×10 en 1965 : il