Les algorithmes d'approximation peuvent donner une sortie jusqu'à un facteur constant. C'est un peu moins satisfaisant que les algorithmes exacts.
Cependant, des facteurs constants sont ignorés dans la complexité temporelle.
Je me demande donc si l'astuce suivante est possible ou a été utilisée pour résoudre un problème :
- Utilisez un algorithme d'approximation pour résoudre le problème pour obtenir la solution dans un facteur constant;S
- Utilisez un algorithme exact, résolvant le problème , dont l'exécution dépend du poids de mais fonctionne tant que est une solution correcte.S S
De cette façon, l'approximation est une "sous-procédure" d'un algorithme exact, et le facteur constant perdu à l'étape 1 est avalé à l'étape 2.
Réponses:
Un exemple de la complexité paramétrée est une kernelization pour le problème de couverture de sommet en utilisant un théorème de Nemhauser et Trotter.
Dans le problème de la couverture minimale des sommets, on nous donne un graphe non orienté G, et nous devons trouver une couverture des sommets de G de taille minimale. Une couverture de sommet d'un graphe non orienté est un sous-ensemble de sommets qui touche toutes les arêtes.
Voici un algorithme exact qui utilise une approximation à la première phase.
Phase 1: Mettre en place la formulation de programmation linéaire entière du problème de couverture minimale des sommets . Il est connu (ou facile à montrer) qu'une solution optimale de base de la relaxation de programmation linéaire est à moitié intégrale (c'est-à-dire que chaque coordonnée est soit 0, 1 ou 1/2). Une telle solution optimale de base peut être trouvée par un algorithme à temps polynomial habituel pour la programmation linéaire (ou dans ce cas spécial, nous pouvons le formuler comme un problème de flux réseau, afin que nous puissions le résoudre de manière combinatoire en temps polynomial). Ayant une telle solution optimale de base, nous l'arrondissons pour obtenir une solution réalisable au problème de programmation linéaire entier d'origine. Soit S le sous-ensemble de sommets correspondant. Il est bon de noter que S est une approximation 2 de l'instance minimale de couverture de sommet donnée.
Phase 2: Trouver une couverture minimale des sommets dans le sous-graphique induit par S (par exemple par une recherche exhaustive). Un théorème de Nemhauser et Trotter indique que ce sous-graphe contient une solution optimale du graphe d'entrée d'origine. Ainsi, l'exactitude de cette approche suit.
Vous pouvez consulter un livre de Niedermeier sur les algorithmes à paramètres fixes pour cet algorithme.
la source
Un exemple est lié aux décompositions d'arbre et aux graphiques de petite largeur d'arbre.
la source
Un exemple d'algorithme d'approximation qui converge vers la solution exacte serait l'algorithme Ellipsoïde pour résoudre les LP - si les coefficients sont des rationnels, alors on peut calculer une distance minimale entre deux sommets du polytope réalisable. Maintenant, l'algorithme ellipsoïde calcule à plusieurs reprises un elliposoïde de plus en plus petit qui doit contenir la solution optimale. Une fois que l'elliposoïde est suffisamment petit pour ne contenir qu'un seul sommet, vous avez essentiellement trouvé le sommet optimal. C'est pourquoi LP est faiblement polynomial.
Enfin, aller plus loin dans un champ - de nombreux algorithmes qui suivent la technique d'altération (prendre un échantillon aléatoire - puis faire quelques corrections pour obtenir ce que vous voulez) tombe dans un tel cadre. Un exemple mignon est l'algorithme pour calculer la médiane en utilisant un échantillonnage aléatoire (voir le livre de Motwani et Raghavan). Il existe de nombreux exemples de ce type - sans doute, bon nombre des algorithmes incrémentaux randomisés de la géométrie informatique tombent dans ce cadre.
la source
De nombreux algorithmes sensibles à la sortie utilisent cette technique. Par exemple, voici un problème simple sur lequel cette technique peut être utilisée:
Problème . On vous donne un tableau A [1 .. n ] dans lequel chaque élément est à au moins k positions de la position où il aurait été si A avait été trié.
Par exemple, A [1..7] illustré ci-dessous pourrait être un tableau d'entrée pour k = 2.
Concevez un algorithme pour trier le tableau en temps O ( n log k ), en supposant que k est inconnu.Source du problème: Algo Muse Archive.
la source