web-dev-qa-db-fra.com

Qu'est-ce qu'un NP-complet en informatique?

Qu'est-ce qu'un problème NP-complet? Pourquoi est-ce un sujet aussi important en informatique?

395
Claudiu

NP signifie non déterministe polynôme temps.

Cela signifie que le problème peut être résolu en temps polynomial en utilisant une machine de Turing non déterministe (semblable à une machine de Turing classique, mais incluant également une fonction de "choix" non déterministe). Fondamentalement, une solution doit être testable en temps poly. Si c'est le cas, et qu'un problème connu de NP peut être résolu à l'aide du problème donné avec une entrée modifiée (un problème de NP peut être résolu). réduit au problème donné) alors le problème est NP complet.

Ce qu'il faut retenir d'un problème NP-complet, c'est qu'il ne peut pas être résolu de manière connue en temps polynomial. NP-Hard/NP-Complete est un moyen de montrer que certaines catégories de problèmes ne peuvent pas être résolues en temps réel.

Edit: Comme d’autres l’ont noté, il existe souvent des solutions d’approximation pour les problèmes NP-Complete. Dans ce cas, la solution d'approximation donne généralement une approximation liée en utilisant une notation spéciale qui indique à quel point l'approximation est proche.

198
Sam Hoice

Qu'est-ce que NP ?

NP est l'ensemble de tous problèmes de décision (questions avec une réponse oui ou non) pour lesquels les réponses "oui" peuvent être vérifié en temps polynomial (O (nk) où n est la taille du problème, et k est une constante) par un machine de Turing déterministe . Le temps polynomial est parfois utilisé comme définition de rapide ou rapidement .

Qu'est-ce que P ?

P est l’ensemble des problèmes de décision pouvant être résolus en temps polynomial par un machine de Turing déterministe . Comme ils peuvent être résolus en temps polynomial, ils peuvent également être vérifiés en temps polynomial. Donc, P est un sous-ensemble de NP.

Qu'est-ce que NP-Complete ?

Un problème x qui se trouve dans NP est également dans NP-Complete si et seulement si tout autre problème dans NP peut être rapidement ( c'est-à-dire en temps polynomial) transformé en x.

En d'autres termes:

  1. x est en NP, et
  2. Chaque problème dans NP est réductible à x

Donc, ce qui rend NP-Complete si intéressant, c’est que si l’un des problèmes de NP-Complete devait être résolu rapidement, alors tous NP les problèmes peuvent être résolus rapidement.

Voir aussi l'article Qu'est-ce que "P = NP?", Et pourquoi est-ce une question si célèbre?

Qu'est-ce que NP-Hard ?

NP-Hard sont des problèmes qui sont au moins aussi difficiles que les problèmes les plus difficiles de NP. Notez que les problèmes NP-Complete sont aussi NP-difficiles. Cependant, tous les problèmes NP-difficiles ne sont pas NP (ni même un problème de décision), malgré le préfixe NP. C'est-à-dire que NP dans NP-hard ne signifie pas le temps polynomial non déterministe . Oui, c'est déroutant, mais son utilisation est enracinée et peu susceptible de changer.

398
grom

NP-Complete signifie quelque chose de très spécifique et vous devez faire attention ou vous obtiendrez une mauvaise définition. Premièrement, un problème NP est un problème oui/non tel que

  1. Il existe une preuve polynomiale pour chaque instance du problème avec une réponse "oui" indiquant que la réponse est "oui" ou (de manière équivalente)
  2. Il existe un algorithme polynomial de temps (utilisant éventuellement des variables aléatoires) qui a une probabilité non nulle de répondre "oui" si la réponse à une instance du problème est "oui" et dira "non" 100% du temps si La réponse est non." En d'autres termes, l'algorithme doit avoir un taux de faux négatifs inférieur à 100% et aucun faux positif.

Un problème X est NP-Complete si

  1. X est en NP, et
  2. Pour tout problème Y dans NP, il existe une "réduction" de Y à X: un algorithme polynomial qui transforme toute instance de Y en une instance de X telle que la réponse à l'instance Y soit "oui" si et seulement si la réponse X-instance est "oui".

Si X est NP-complet et qu’il existe un algorithme déterministe à temps polynomial capable de résoudre correctement toutes les instances de X (0% de faux positifs, 0% de faux négatifs), alors tout problème dans NP peut être résolu. résolus en temps polynomial déterministe (par réduction à X).

Jusqu’à présent, personne n’avait imaginé un tel algorithme de type polynôme déterministe, mais personne n’avait prouvé qu’il n’existait pas (il existe un million de dollars pour quiconque peut le faire non plus: le est le P = NP problème ). Cela ne signifie pas que vous ne pouvez pas résoudre un cas particulier de problème NP-Complete (ou NP-Hard). Cela signifie simplement que vous ne pouvez pas obtenir quelque chose qui fonctionne de manière fiable sur toutes les instances d'un problème de la même manière que vous pouvez trier de manière fiable une liste d'entiers. Vous pourriez très bien être capable de trouver un algorithme qui fonctionnera très bien sur toutes les instances pratiques d'un problème NP-Hard.

31
David Nehme

Fondamentalement, les problèmes de ce monde peuvent être classés comme

1) Problème insoluble 2) Problème insoluble 3) Problème NP 4) Problème P


1) Le premier n’est pas une solution au problème. 2) Le second est le temps exponentiel nécessaire (c’est-à-dire O (2 ^ n) ci-dessus). 3) Le troisième s'appelle le NP. 4) Le quatrième est un problème facile.


P: renvoie à une solution du problème du temps polynomial.

NP: renvoie au temps polynomial pour trouver une solution. Nous ne sommes pas sûrs qu'il n'y ait pas de solution de temps polynomial, mais une fois que vous avez fourni une solution, cette solution peut être vérifiée dans le temps polynomial.

NP Complete: fait référence à Polynomial Time mais nous n’avons toujours pas trouvé de solution, mais elle peut être vérifiée sur Polynomial Time. Le problème NPC dans NP est le problème le plus difficile. Par conséquent, si nous pouvons prouver que nous avons la solution P à NPC problème, alors NP problèmes qui peuvent être trouvés dans la solution P.

NP Difficile: référence Le temps polynomial n’a pas encore trouvé de solution, mais il ne peut certainement pas être vérifié dans le temps polynomial. NP Un problème difficile dépasse NPC une difficulté.

25
Marcus Thornton

NP-Complete est une classe de problèmes.

La classe P comprend les problèmes qui peuvent être résolus en temps polynomial. Par exemple, ils pourraient être résolus en O (nk) pour une constante k, où n est la taille de l'entrée. En termes simples, vous pouvez écrire un programme qui fonctionnera dans un délai raisonnable .

La classe NP comprend les problèmes qui sont vérifiables en temps polynomial. Autrement dit, si une solution potentielle nous est donnée, nous pourrions alors vérifier si la solution donnée est correcte en temps polynomial.

Quelques exemples sont le problème de satisfiabilité booléenne (ou SAT) ou le problème du cycle hamiltonien. On sait que de nombreux problèmes appartiennent à la classe NP.

NP-Complete signifie que le problème est au moins aussi difficile que n'importe quel problème dans NP.

C'est important pour l'informatique car il a été prouvé que tout problème dans NP peut être transformé en un autre problème dans NP-complete. Cela signifie qu'une solution à tout problème NP-complet est une solution à tous les problèmes NP.

De nombreux algorithmes de sécurité dépendent du fait qu’aucune solution connue n’existe pour les problèmes difficiles NP. Cela aurait certainement un impact significatif sur l'informatique si une solution était trouvée.

22
Vincent Ramdhanie

C'est une classe de problèmes où nous devons simuler toutes les possibilités pour être sûr d'avoir la solution optimale.

Il y a beaucoup de bonnes heuristiques pour certains problèmes NP-Complete, mais ce ne sont au mieux qu'une supposition éclairée.

18
Eric Wendelin

Si vous cherchez un exemple de problème NP-complet, je vous suggère de regarder -SAT .

Le principe de base est que vous avez une expression dans forme normale conjonctive , ce qui est une façon de dire que vous avez une série d'expressions jointes par des OU qui doivent toutes être vraies:

(a or b) and (b or !c) and (d or !e or f) ...

Le problème des 3-SAT consiste à trouver une solution qui satisfasse l'expression dans laquelle chacune des expressions OR a exactement 3 booléens auxquels correspondre:

(a or !b or !c) and (!a or b or !d) and (b or !c or d) ...

Une solution à celle-ci pourrait être (a = T, b = T, c = F, d = F). Cependant, aucun algorithme n'a été découvert pour résoudre ce problème dans le cas général en temps polynomial. Cela signifie que le meilleur moyen de résoudre ce problème consiste à effectuer essentiellement des tests de force brute et à essayer différentes combinaisons jusqu'à ce que vous en trouviez une qui fonctionne.

La particularité du problème 3-SAT est que TOUT problème NP-complet peut être réduit à un problème 3-SAT. Cela signifie que si vous pouvez trouver un algorithme polynomial pour résoudre ce problème, alors vous obtenez 1 000 000 $ , sans oublier le respect et l'admiration des informaticiens et des mathématiciens du monde entier.

18
Kyle Cronin

Honnêtement, Wikipedia pourrait être le meilleur endroit pour chercher une réponse à cette question.

Si NP = P, nous pouvons résoudre des problèmes très difficiles beaucoup plus rapidement que nous ne le pensions auparavant. Si nous résolvons un seul problème NP-Complete en temps P (polynomial), il peut être appliqué à tous les autres problèmes de la catégorie NP-Complete.

14
jjnguy

Nous devons séparer les algorithmes et les problèmes. Nous écrivons des algorithmes pour résoudre des problèmes, et ils s’échelonnent d’une certaine manière. Bien que ce soit une simplification, étiquetons un algorithme avec un "P" si la mise à l'échelle est suffisante, et "NP" si ce n'est pas le cas.

Il est utile de connaître les problèmes que nous essayons de résoudre, plutôt que les algorithmes que nous utilisons pour les résoudre. Nous dirons donc que tous les problèmes qui ont un algorithme de bonne mise à l'échelle sont "in P". Et ceux qui ont un algorithme d'échelle médiocre sont "in NP".

Cela signifie que beaucoup de problèmes simples sont "en NP" aussi, car nous pouvons écrire de mauvais algorithmes pour résoudre des problèmes faciles. Il serait bon de savoir quels problèmes dans NP sont vraiment difficiles, mais nous ne voulons pas simplement dire "ce sont ceux pour lesquels nous n'avons pas trouvé de bon algorithme". Après tout, je pourrais trouver un problème (appelez-le X) qui, à mon avis, nécessite un algorithme super-étonnant. Je dis au monde que le meilleur algorithme que je pourrais trouver pour résoudre mal l'échelle X, et donc je pense que X est un problème vraiment difficile. Mais demain, peut-être que quelqu'un de plus intelligent que moi inventera un algorithme qui résout X et qui est en P. Donc, ce n'est pas une très bonne définition des problèmes difficiles.

Néanmoins, il y a beaucoup de problèmes dans NP pour lesquels personne ne connaît un bon algorithme. Donc, si je pouvais prouver que X est un certain type de problème: celui dans lequel un bon algorithme pour résoudre X pourrait aussi être utilisé, de façon détournée, pour donner un bon algorithme pour tous autre problème en NP. Eh bien, les gens sont peut-être un peu plus convaincus que X est un problème véritablement délicat. Et dans ce cas, nous appelons X NP-Complete.

9
Tom

Les définitions de NP problèmes complets ci-dessus sont correctes, mais je pensais pouvoir en dire plus sur leur importance philosophique, car personne ne s’était encore penché sur cette question.

Presque tous les problèmes complexes que vous rencontrerez seront NP complets. Il y a quelque chose de très fondamental dans cette classe, et qui semble simplement être différent du point de vue du calcul des problèmes faciles à résoudre. Ils ont en quelque sorte leur propre goût, et ce n'est pas si difficile de les reconnaître. Cela signifie qu’il est impossible pour vous de résoudre exactement un algorithme moyennement complexe - planification, optimisation, emballage, etc.

Mais tout n'est pas perdu si le problème que vous rencontrez est NP complet. Il existe un vaste domaine très technique où les gens étudient des algorithmes d’approximation, ce qui vous donnera des garanties d’être proches de la solution d’un problème complet NP. Certaines d'entre elles sont des garanties incroyablement fortes - par exemple, pour 3sat, vous pouvez obtenir une garantie 7/8 par le biais d'un algorithme vraiment évident. Mieux encore, en réalité, il existe des heuristiques très puissantes, qui permettent à Excel de fournir de bonnes réponses (mais aucune garantie!) À ces problèmes.

Notez que deux problèmes très connus - l'isomorphisme des graphes et la factorisation - ne sont pas connus pour être P ou NP.

5
Ying Xiao

J'ai entendu une explication, à savoir: "L'intégralité de NP est probablement l'une des idées les plus énigmatiques de l'étude des algorithmes". "NP" signifie "temps polynomial non déterministe" et est le nom de ce qu'on appelle une classe de complexité L'important dans la classe de complexité NP est que les problèmes de cette classe peuvent être . vérifié par un algorithme de temps polynomial. A titre d'exemple, considérons le problème du comptage des choses. Supposons qu'il y a un tas de pommes sur une table. Le problème est "Combien y a-t-il de pommes?" Une réponse possible est fournie, 8. Vous pouvez vérifier cette réponse en temps polynomial en utilisant l’algorithme de compter les pommes, qui se compte dans O(n) (c'est la notation Big-oh ) temps, car il faut une étape pour compter chaque pomme. Pour n pommes, vous avez besoin de n étapes. Ce problème se situe dans la classe de complexité NP.

Un problème est classé comme NP-complet s'il peut être démontré qu'il est à la fois NP-Hard et vérifiable en temps polynomial. Sans entrer trop dans le débat sur NP-Hard, il suffit de dire qu'il existe certains problèmes pour lesquels aucune solution temporelle polynomiale n'a été trouvée. C'est-à-dire qu'il faut quelque chose comme n! (n factoriel) étapes pour les résoudre. Toutefois, si vous avez une solution à un problème NP-Complete, vous pouvez le vérifier en temps polynomial.

Le problème du voyageur de commerce est un exemple classique de problème NP-Complete. "

L'auteur: ApoxyButt De: http://www.everything2.com/title/NP-complete

4
leizisdu

Problème NP: -

  1. Le problème NP est un problème qui peut être résolu en temps polynomial non déterministe.
  2. Les algorithmes non déterministes fonctionnent en deux étapes.
  3. Etape de prédiction non déterministe && Etape de vérification non déterministe.

Type de problème Np

  1. NP complète
  2. NP dur

NP problème complet: -

1 Décision Le problème A est appelé NP complet s'il a les deux propriétés suivantes: -

  1. Il appartient à la classe NP.
  2. Tous les autres problèmes de NP peuvent être transformés en P en temps polynomial.

Quelques Ex: -

  • Problème de sac à dos
  • problème de somme d'ensemble
  • Problème couvrant le sommet
2
HeadAndTail

Les problèmes NP-complets sont un ensemble de problèmes pour chacun desquels tout autre problème de NP peut être réduit en temps polynomial et dont la solution peut encore être vérifiée en temps polynomial. Autrement dit, tout problème NP peut être transformé en n'importe quel problème NP-complet. - De manière informelle, un problème NP-complet est un NP problème au moins aussi "difficile" que tout autre problème de NP.

1
Jamal Hussain

Autant que je comprends

P est l'ensemble des problèmes qui pourraient être résolus en temps polynomial avec une MT déterministe.

NP est l'ensemble des problèmes qui nécessitent une MT non déterministe pour pouvoir être résolus en temps polynomial. Cela signifie vérifier simultanément toutes les variables possibles, chaque instance prenant un temps polynomial. Si le problème peut être résolu, au moins un de ces états parallèles doit avoir la solution au problème. Cela signifie également que si vous devinez les variables de la solution, il suffit alors de vérifier la validité de la solution en temps polynomial.

NP-Hard est l’ensemble où les problèmes sont au moins aussi graves que NP. Tout problème dans NP peut être transformé en problème NP-Hard en temps polynomial. Ces problèmes ne peuvent pas être résolus en temps polynomial si P n'est pas égal à NP. C'est à ce moment que le problème le plus difficile dans NP est résolvable en temps polynomial, alors seuls les problèmes NP-Difficile peuvent être résolus en temps polynomial.

NP-Complete est l'ensemble d'intersection de NP et NP-Hard. Tout problème NP peut être transformé en problème NP-Complet en temps polynomial. Cela signifie que si l'un des NP-Complete pouvait avoir une solution efficace, alors tout problème de NP pourrait être résolu avec la même efficacité.

S'il vous plaît laissez-moi savoir si j'ai commis une erreur.

0
Revolver