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

429

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

Claudiu
la source
5
Les réponses à cette question peuvent vous intéresser: stackoverflow.com/questions/111307/…
Dan Dyer
1
Eh bien, j'ai décidé d'écrire ma propre réponse parce que je n'aimais pas la façon dont la réponse acceptée est présentée, et j'ai inclus un lien vers la question P = NP.
grom
1
Il y a une très bonne conférence arsdigita sur les mathématiques discrètes qui explique ce qu'est un problème NP-complet. Les 50 premières minutes sont principalement sur l'algèbre booléenne. Alors sautez directement au début de la minute 53 si vous n'êtes intéressé que par les concepts de P, NP, NP-exhaustivité, le problème de satisfiabilité booléenne et la réduction.
davitenio
1
Nous ne le saurons jamais car avec un grand n il ne se terminera jamais;)
Pete Alvin
1
J'aime et recommande vraiment de vérifier cette explication vidéo: youtube.com/watch?v=YX40hbAHx3s
Maksym Ovsianikov

Réponses:

209

NP signifie temps polynomial non déterministe .

Cela signifie que le problème peut être résolu en temps polynomial en utilisant une machine de Turing non déterministe (comme une machine de Turing ordinaire 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 NP connu peut être résolu en utilisant le problème donné avec une entrée modifiée (un problème NP peut être réduit au problème donné) alors le problème est NP complet.

La principale chose à retenir d'un problème NP-complet est qu'il ne peut pas être résolu en temps polynomial d'une manière connue. NP-Hard / NP-Complete est un moyen de montrer que certaines classes de problèmes ne sont pas résolubles en temps réel.

Edit: Comme d'autres l'ont noté, il existe souvent des solutions approximatives aux problèmes NP-Complete. Dans ce cas, la solution approximative donne généralement une limite d'approximation en utilisant une notation spéciale qui nous indique la proximité de l'approximation.

Jonathan Adelson
la source
2
"... un problème NP peut être réduit au problème donné ..." - une contrainte importante sur la réduction est qu'elle doit être polynomique déterministe.
Rafał Dowgird
2
La notation O () est une notation mathématique générale utilisée partout: les algorithmes d'approximation sont en effet donnés à la précision O () - recherchez tout papier d'algorithme d'approximation sur arxiv.org
Ying Xiao
1
Pour clarifier un peu, les problèmes NP font référence à des machines de Turing non déterministes. On ne sait toujours pas si un problème NP-complet peut être résolu en temps polynomial sur une machine de Turing déterministe.
rjzii
1
@Yuval: Juste pour être clair. Ce que vous aviez auparavant était complètement faux (à moins que P = NP). D'après votre commentaire, j'ai l'impression que vous pensez que les deux versions étaient correctes. Sinon, je m'excuse.
33
Cette réponse est loin d'être complète et compréhensible, et je ne comprends pas pourquoi elle a autant de votes positifs.
nbro
428

Qu'est-ce que NP ?

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

Qu'est-ce que P ?

P est l'ensemble de tous les problèmes de décision qui peuvent être résolus en temps polynomial par une machine de Turing déterministe . Puisqu'ils peuvent être résolus en temps polynomial, ils peuvent également être vérifiés en temps polynomial. Par conséquent, P est un sous-ensemble de NP.

Qu'est-ce que NP-Complete ?

Un problème x qui est dans NP est également dans NP-Complete si et seulement si tous les autres problèmes dans NP peuvent être rapidement (c'est-à-dire en temps polynomial) transformés en x.

En d'autres termes:

  1. x est dans 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 NP-Complete devait être résolu rapidement, alors tous les problèmes NP peuvent être résolus rapidement.

Voir aussi le post 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 également NP-hard. Cependant, tous les problèmes NP-difficiles ne sont pas NP (ou même un problème de décision), bien qu'ils aient NPun préfixe. C'est-à-dire que le NP dans NP-hard ne signifie pas le temps polynomial non déterministe . Oui, cela prête à confusion, mais son utilisation est enracinée et ne devrait pas changer.

grom
la source
4
"C'est-à-dire que le NP en NP-dur ne signifie pas non polynomial" <- Le NP en NP-complet (ou n'importe où ailleurs) ne signifie pas non plus polynomial.
sepp2k
1
Merci sepp2k pour la correction. Je voulais dire que cela ne signifie pas NP (c'est-à-dire le temps polynomial non déterministe).
grom
1
Je pense que votre réponse simplifie autant ou plus que d'autres dans ce fil. Mais c'est toujours un problème très difficile à comprendre pour moi ... Je suppose que c'est pourquoi ils paient les gars de l'algorithme les gros sous.
SoftwareSavant
3
À propos de NP: Je pense que cela devrait être: Le problème peut être résolu par une machine de Turing non déterministe. (nonterministique plutôt que derministe)
hqt
2
@hqt Ce que j'ai écrit est correct. Notez le mot "vérifié". Vous avez également raison, le NP peut être résolu en temps polynomial par une machine de Turing non déterministe
grom
32

NP-Complete signifie quelque chose de très spécifique et vous devez être prudent ou vous vous tromperez de définition. Tout d'abord, un problème NP est un problème oui / non tel que

  1. Il existe une preuve de temps polynomial pour chaque instance du problème avec une réponse «oui» que la réponse est «oui», ou (de manière équivalente)
  2. Il existe un algorithme à temps polynomial (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 dans NP, et
  2. Pour tout problème Y dans NP, il y a une "réduction" de Y à X: un algorithme à temps polynomial qui transforme n'importe quelle instance de Y en une instance de X telle que la réponse à l'instance Y est "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 qui peut 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 dans le polynôme déterministe- temps (par réduction à X).

Jusqu'à présent, personne n'a proposé un tel algorithme déterministe en temps polynomial, mais personne n'a prouvé qu'il n'existe pas (il y a un million de dollars pour quiconque peut faire l'un ou l'autre: c'est le problème P = NP ). Cela ne signifie pas que vous ne pouvez pas résoudre une instance particulière d'un problème NP-Complete (ou NP-Hard). Cela signifie simplement que vous ne pouvez pas avoir quelque chose qui fonctionnera de manière fiable sur toutes les instances d'un problème de la même manière que vous pourriez trier de manière fiable une liste d'entiers. Vous pourriez très bien être en mesure de trouver un algorithme qui fonctionnera très bien sur toutes les instances pratiques d'un problème NP-Hard.

David Nehme
la source
1
Je n'aime pas me vanter, mais je suis assez fier de mon algorithme déterministe en temps polynomial dont j'ai prouvé qu'il n'existe pas. ;)
Kyle Cronin
20
J'ai découvert une preuve vraiment merveilleuse de cela, que ce commentaire est trop étroit pour contenir;)
quick_dry
La condition n ° 2 est une déclaration de P =? NP, pas la définition standard de NP-complétude. Cela devrait être: il existe un algorithme poly-temps déterministe qui peut transformer toute autre instance NP X en une instance Y de ce problème st la réponse à Y est "oui" si et seulement si la réponse à X est "oui".
Chris Conway
"vous devez être prudent ou vous vous tromperez de définition" - comme le prouve cette réponse. Cette réponse est en partie juste, mais elle n'aurait certainement pas dû être acceptée.
Programmeur Windows
29

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 est appelé NP. 4) Le quatrième problème est facile.


P: se réfère à une solution du problème du temps polynomial.

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

NP Complete: fait référence au temps polynomial, nous n'avons pas encore trouvé de solution, mais elle peut être vérifiée en temps polynomial. Le problème NPC dans NP est le problème le plus difficile, donc si nous pouvons prouver que nous avons une solution P au problème NPC, alors les problèmes NP qui peuvent être trouvés dans la solution P.

NP Hard: indique que le temps polynomial n'a pas encore trouvé de solution, mais il n'est certainement pas possible de le vérifier en temps polynomial. Le problème NP NP dépasse la difficulté NPC.

Marcus Thornton
la source
Heureux de voir cette réponse, la partie catégorisation est assez expressive pour l'ensemble du concept. Je pensais que les problèmes interactifs sont des problèmes NP.
PeerNet
22

NP-Complete est une classe de problèmes.

La classe Pcomprend les problèmes qui peuvent être résolus en temps polynomial . Par exemple, ils pourraient être résolus dans O (n k ) pour une constante k, où n est la taille de l'entrée. Autrement dit, vous pouvez écrire un programme qui s'exécutera dans un délai raisonnable .

La classe se NPcompose de ces problèmes qui sont vérifiables en temps polynomial. Autrement dit, si on nous donne une solution potentielle, alors nous pourrions vérifier si la solution donnée est correcte en temps polynomial.

Quelques exemples sont le problème de la satisfaction booléenne (ou SAT ) ou le problème du cycle hamiltonien. Il existe de nombreux problèmes connus dans la classe NP.

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

Il 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 durs NP. Cela aurait certainement un impact significatif sur l'informatique si une solution était trouvée.

Vincent Ramdhanie
la source
c'est faux. Un problème dans NP peut être transformé en n'importe quel problème dans NP-complete, pas dans n'importe quel problème dans NP. Voilà une grande différence.
David Nehme
En outre, "le problème est aussi difficile que n'importe quel problème dans NP" - vrai, mais une meilleure formulation serait "au moins aussi difficile". Dans l'ensemble, cette réponse est plus proche que toute autre réponse que j'ai vue, et plus proche que la réponse malheureusement acceptée.
Programmeur Windows
Merci pour vos observations. J'ai mis à jour la réponse pour inclure vos corrections.
Vincent Ramdhanie
1
Votre définition de NP-Complete n'est pas complète, vous devez également spécifier que les problèmes NP-Complete sont également des problèmes NP (et NP-hard) et pas aussi difficiles que tous les problèmes NP. Je vais downvote, si vous décidez de changer, faites le moi savoir et je supprime le downvote.
nbro
20

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 existe de nombreuses bonnes heuristiques pour certains problèmes NP-Complete, mais elles ne sont au mieux qu'une supposition éclairée.

Eric Wendelin
la source
Presque juste. Un problème peut avoir une solution non exhaustive qui n'est toujours pas de nature polynomiale.
Mark Bessey
1
Bien qu'il ne soit pas tout à fait exact, il est suffisamment proche pour une utilisation pratique. La définition pédante n'est pas nécessaire bien que l'OP veuille probablement la définition pédante. C'est une bonne approximation!
doug65536
18

Si vous cherchez un exemple de problème NP-complet, je vous suggère de jeter un œil à 3-SAT .

La prémisse de base est que vous avez une expression sous forme normale conjonctive , ce qui est une façon de dire que vous avez une série d'expressions jointes par des OR qui doivent toutes être vraies:

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

Le problème 3-SAT est de trouver une solution qui satisfera l'expression où chacune des expressions OR a exactement 3 booléens pour 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 la meilleure façon de résoudre ce problème est de faire essentiellement une supposition et une vérification par force brute et d'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, vous obtenez 1 000 000 $ , sans parler du respect et de l'admiration des informaticiens et des mathématiciens du monde entier.

Kyle Cronin
la source
Peut-être que je suis confus par les autres explications ici, mais ne devrait-il pas lire "N'IMPORTE QUEL problème NP peut être réduit à un problème 3-SAT en temps polynomial." Parce que n'est-ce pas ce qui rend 3-SAT NP-Complete?
DubiousPusher
@DubiousPusher Nope. La réponse le dit correctement. Cette image le clarifie stackoverflow.com/a/7367561/2686502
jayeshsolanki93
14

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

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

jjnguy
la source
6
"Si NP = P, alors nous pouvons résoudre des problèmes très difficiles beaucoup plus rapidement que nous ne le pensions auparavant." -- Nan. Si NP = P alors il existe des solutions (il existe des algorithmes déterministes pour les résoudre) mais il n'y a aucune garantie que nous saurons jamais ce qu'elles sont.
Programmeur Windows
Un juste point. Je pense que c'est une preuve que P = NP est susceptible d'être constructif (par exemple, la publication d'un algorithme polynomial pour 3-SAT).
Chris Conway
10

Nous devons séparer les algorithmes et les problèmes. Nous écrivons des algorithmes pour résoudre des problèmes, et ils évoluent d'une certaine manière. Bien que ce soit une simplification, étiquetons un algorithme avec un «P» si la mise à l'échelle est suffisamment bonne 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 mise à l'échelle bien sont "en P". Et ceux qui ont un algorithme de mise à l'échelle médiocre sont "en NP".

Cela signifie que beaucoup de problèmes simples sont également "dans NP", car nous pouvons écrire de mauvais algorithmes pour résoudre des problèmes faciles. Il serait bon de savoir quels sont les problèmes vraiment délicats dans NP, mais nous ne voulons pas simplement dire "ce sont ceux pour lesquels nous n'avons pas trouvé un bon algorithme". Après tout, je pourrais trouver un problème (appelez-le X) qui, je pense, a besoin d'un algorithme super étonnant. Je dis au monde que le meilleur algorithme que je puisse trouver pour résoudre mal les échelles X, et donc je pense que X est un problème vraiment difficile. Mais demain, peut-être quelqu'un de plus intelligent que moi invente 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: un où un bon algorithme pour résoudre X pourrait également être utilisé, d'une manière détournée, pour donner un bon algorithme pour tous les autres problèmes de NP. Eh bien maintenant, les gens pourraient être un peu plus convaincus que X est un problème vraiment délicat. Et dans ce cas, nous appelons X NP-Complete.

À M
la source
5

Les définitions des problèmes NP complets ci-dessus sont correctes, mais j'ai pensé que je pourrais être lyrique quant à leur importance philosophique car personne n'a encore abordé cette question.

Presque tous les problèmes complexes que vous rencontrerez seront NP Complete. Il y a quelque chose de très fondamental dans cette classe, et qui semble être différent des problèmes de résolution facilement calculables. Ils ont en quelque sorte leur propre saveur, et ce n'est pas si difficile de les reconnaître. Cela signifie essentiellement qu'il est impossible de résoudre exactement tout algorithme moyennement complexe - planification, optimisation, emballage, recouvrement, etc.

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

Notez que deux problèmes très connus - isomorphisme de graphe et factorisation - ne sont pas connus pour être P ou NP.

Ying Xiao
la source
5

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

Un problème est classé NP-complet s'il peut être démontré qu'il est à la fois NP-dur et vérifiable en temps polynomial. Sans entrer trop profondément dans la discussion de NP-Hard, il suffit de dire qu'il y a certains problèmes auxquels aucune solution temporelle polynomiale n'a été trouvée. Autrement dit, il faut quelque chose comme n! (n factorielle) étapes pour les résoudre. Cependant, si on vous donne une solution à un problème NP-Complete, vous pouvez le vérifier en temps polynomial.

Un exemple classique d'un problème NP-Complete est le problème du voyageur de commerce. "

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

leizisdu
la source
2

Problème NP: -

  1. Le problème NP est un problème qui peut être résolu en temps polynomial non déterministe.
  2. Un algorithme non déterministe fonctionne en deux étapes.
  3. Étape de détermination non déterministe && Étape de vérification non déterministe.

Type de problème Np

  1. NP complet
  2. NP Hard

NP Problème complet: -

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

  1. Il appartient à la classe NP.
  2. Tout autre problème dans NP peut être transformé en P en temps polynomial.

Certains Ex: -

  • Problème de sac à dos
  • problème de sous-ensemble
  • Problème de couverture de sommet
HeadAndTail
la source
Question rapide sur vos étapes ... l'étape de vérification ne peut-elle pas être déterministe? Les problèmes NP ne sont-ils pas vérifiés dans le temps P
Branden Keck
1

Les problèmes NP-complets sont un ensemble de problèmes pour chacun desquels tout autre problème NP peut être réduit en temps polynomial, et dont la solution peut encore être vérifiée en temps polynomial. C'est-à-dire que 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 problème NP qui est au moins aussi "difficile" que tout autre problème dans NP.

Jamal Hussain
la source
1

Pour 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 être résolus en temps polynomial. Cela signifie vérifier parallèlement toutes les variables possibles, chaque instance prenant du temps polynomial. Si le problème est résoluble, au moins un de ces états parallèles doit avoir la solution au problème. Cela signifie également que si vous avez fait une supposition sur les variables de la solution, la seule chose nécessaire est de vérifier la validité de la solution en temps polynomial.

NP-Hard est l'ensemble où les problèmes sont au moins aussi difficiles que NP. Tout problème dans NP pourrait ê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 alors que le problème le plus difficile dans NP est résolu en temps polynomial, alors seuls les problèmes NP-Hard sont résolus en temps polynomial.

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

Veuillez me faire savoir si j'ai fait une erreur.

rsonx
la source
-17

un problème NP est celui où un algorithme informatique qui vérifie une solution peut être créé en temps polynomial.

un problème NP-Complete est NP, mais aussi si vous pouvez le résoudre en temps polynomial (appelé P) alors tous les problèmes NP sont P.

Alors craquez.

Keith Twombley
la source