Je pense que les articles Wikipedia
, et contre sont plutôt bons. Voici encore ce que je dirais: Partie I , Partie IIPN PPN P
[Je vais utiliser des remarques entre crochets pour discuter de certains détails techniques que vous pouvez sauter si vous le souhaitez.]
Partie I
Problèmes de décision
Il existe différents types de problèmes de calcul. Cependant, dans un cours d'introduction à la théorie de la complexité computationnelle, il est plus facile de se concentrer sur un problème de décision , c'est-à-dire des problèmes pour lesquels la réponse est OUI ou NON. Il existe d'autres types de problèmes de calcul, mais la plupart du temps, les questions les concernant peuvent être réduites à des questions similaires concernant les problèmes de décision. De plus, les problèmes de décision sont très simples. Par conséquent, dans un cours d'introduction à la théorie de la complexité computationnelle, nous nous concentrons sur l'étude des problèmes de décision.
Nous pouvons identifier un problème de décision avec le sous-ensemble d'entrées ayant répondu OUI. Cela simplifie la notation et nous permet d’écrire
à la place de et
à la place de .x ∈ QQ ( x ) = YESx ∉ QQ ( x ) = NO
Une autre perspective est que nous parlons de requêtes d'adhésion dans un ensemble. Voici un exemple:
Problème de décision:
Entrée: Un nombre naturel ,
Question: Est-ce que est un nombre pair?Xx
X
Problème d'adhésion:
Entrée: Un nombre naturel ,
Question: Est-ce que est dans ?Xx E v e n = { 0 , 2 , 4 , 6 , ⋯ }
XEv e n = { 0 , 2 , 4 , 6 , ⋯ }
Nous nous référons à la réponse OUI sur une entrée comme acceptant l'entrée et à la réponse NON à une entrée comme rejetant l'entrée.
Nous examinerons des algorithmes pour des problèmes de décision et de discuter de la façon dont ces algorithmes efficaces sont dans leur utilisation des ressources calculables . Je me fierai à votre intuition pour la programmation dans un langage tel que C au lieu de définir formellement ce que nous entendons par un algorithme et des ressources de calcul.
[Remarques: 1. Si nous voulions tout faire de manière formelle et précise, nous aurions besoin de fixer un modèle de calcul tel que le modèle standard de la machine de Turing pour définir avec précision ce que nous entendons par un algorithme et son utilisation des ressources de calcul. 2. Si nous voulons parler de calcul sur des objets que le modèle ne peut pas gérer directement, nous devons les coder en tant qu’objets que le modèle de machine peut gérer. Par exemple, si nous utilisons des machines de Turing, nous devons coder des objets tels que des nombres naturels et des graphes. comme des chaînes binaires.]
P = Problèmes avec des algorithmes efficaces pour trouver des solutions
Supposons que des algorithmes efficaces désignent des algorithmes utilisant au maximum la quantité polynomiale de ressources de calcul. La ressource principale qui nous importe est le temps d'exécution des algorithmes dans le pire des cas en ce qui concerne la taille d'entrée, c'est-à-dire le nombre d'étapes de base qu'un algorithme prend sur une entrée de taille . La taille d'une entrée est s'il faut bits de mémoire d'ordinateur pour stocker , auquel cas on écrit . Donc, par algorithmes efficaces, nous entendons des algorithmes qui ont un temps d'exécution polynomial dans le cas le plus défavorable .nXnnX| x | =n
La thèse de Cobham repose sur l' hypothèse selon laquelle les algorithmes à temps polynomiaux capturent la notion intuitive d'algorithmes efficaces . Je ne discuterai pas à ce stade si est le bon modèle pour résoudre efficacement les problèmes et si capture ou ne capture pas ce qui peut être calculé efficacement dans la pratique et les problèmes connexes. Pour le moment, il y a de bonnes raisons de faire cette hypothèse, donc nous supposons que tel est le cas. Si vous n'acceptez pas la thèse de Cobham, cela ne rend pas fausses ce que j'écris ci-dessous, la seule chose que nous perdrons, c'est l' intuition.PPsur le calcul efficace dans la pratique. Je pense que c'est une hypothèse utile pour quelqu'un qui commence à en apprendre davantage sur la théorie de la complexité.
P est la classe de problèmes de décision pouvant être résolus efficacement ,
c'est-à - dire les problèmes de décision ayant des algorithmes à temps polynomiaux.
Plus formellement, nous disons qu'un problème de décision est dans si eteQP
il existe un algorithme efficace tel que
pour toutes les entrées ,UNEx
X
- si alors , Q ( x ) = YESA ( x ) = YES
- si alors .Q ( x ) = NOA ( x ) = NO
Je peux simplement écrire mais je l’écris de cette façon afin que nous puissions le comparer à la définition de .A ( x ) = Q ( x )N P
N P = Problèmes avec des algorithmes efficaces pour la vérification des preuves / certificats / témoins
Parfois, nous ne connaissons aucun moyen efficace de trouver la réponse à un problème de décision. Toutefois, si quelqu'un nous dit la réponse et nous donne une preuve,
nous pouvons vérifier de manière efficace que la réponse est correcte en vérifiant si la preuve est valide. . C'est l'idée derrière la classe de complexité .N P
Si la preuve est trop longue, ce n'est pas vraiment utile, il peut prendre trop de temps pour lire la preuve et encore moins vérifier si elle est valide. Nous voulons que le temps requis pour la vérification soit raisonnable en taille de l'entrée originale, pas en taille de la preuve donnée! Cela signifie que ce que nous voulons vraiment, ce ne sont pas de longues preuves arbitraires, mais de courtes preuves. Notez que si la durée d'exécution du vérificateur est polynomiale dans la taille de l'entrée d'origine, il ne peut lire qu'une partie polynomiale de l'épreuve. En bref, nous entendons par taille polynomiale .
Formulez ce point chaque fois que j'utilise le mot "preuve", je veux dire "preuve courte".
Voici un exemple de problème que nous ne savons pas résoudre efficacement mais que nous pouvons vérifier efficacement des preuves:
Entrée de partition : un ensemble fini de nombres naturels , Question: est-il possible de partitionner en deux ensembles et
( et )
tels que la somme des nombres de est égal à la somme du nombre dans ( )?SS A B A ∪ B = S A ∩ B = ∅ A B Σ x ∈ A x = Σ x ∈ B x
SUNEBA ∪ B = SA ∩ B = ∅
UNEBΣx ∈ Ax = ∑x ∈ BX
Si je vous donne et vous demande si nous pouvons le partitionner en deux ensembles tels que leurs sommes soient égales, vous ne connaissez pas d'algorithme efficace pour le résoudre. Vous essaierez probablement toutes les manières possibles de partitionner les nombres en deux jeux jusqu'à ce que vous trouviez une partition où les sommes sont égales ou jusqu'à ce que vous ayez essayé toutes les partitions possibles et qu'aucune n'ait fonctionné. Si l'un d'entre eux travaillait, vous diriez OUI, sinon, vous diriez NON.S
Mais il y a de manière exponentielle beaucoup de partitions possibles, donc cela prendra beaucoup de temps. Toutefois , si je vous donne deux séries et , vous pouvez facilement vérifier si les sommes sont égales et si A et B est une partition de S . Notez que nous pouvons calculer les sommes efficacement.UNEBUNEBS
Ici, la paire de UNE et B que je vous donne est une preuve de réponse OUI. Vous pouvez vérifier efficacement ma réclamation en consultant ma preuve et en vérifiant si elle est valide . Si la réponse est OUI, il existe une preuve valide que je peux vous donner et que vous pouvez vérifier efficacement. Si la réponse est NON, il n'y a pas de preuve valable. Donc, quoi que je vous donne, vous pouvez vérifier et voir que ce n'est pas une preuve valable. Je ne peux pas vous tromper par une preuve invalide que la réponse est OUI. Rappelons que si la preuve est trop grande, il faudra beaucoup de temps pour la vérifier, nous ne voulons pas que cela se produise, nous ne nous intéressons donc qu'aux preuves efficaces , c'est-à-dire aux preuves de taille polynomiale.
Parfois, les gens utilisent " certificat " ou " témoin " au lieu de "preuve".
Remarque Je vous donne suffisamment d'informations sur la réponse pour une entrée donnée X
afin que vous puissiez trouver et vérifier la réponse efficacement. Par exemple, dans notre exemple de partition, je ne vous dis pas la réponse, je vous donne simplement une partition et vous pouvez vérifier si elle est valide ou non. Notez que vous devez vérifier la réponse vous-même, vous ne pouvez pas me faire confiance pour ce que je dis. De plus, vous ne pouvez que vérifier l'exactitude de mes preuves. Si ma preuve est valide, cela signifie que la réponse est OUI. Mais si ma preuve est invalide, cela ne signifie pas que la réponse est NON. Vous avez vu qu'une preuve était invalide et non qu'il n'y avait aucune preuve valide. Nous parlons de preuves pour OUI. Nous ne parlons pas de preuves pour NO.
Prenons un exemple:
A = { 2 , 4 } et B = { 1 , 5 } prouve que
S= { 1 , 2 , 4 , 5 } peut être partitionné en deux ensembles de sommes égales. Nous avons juste besoin de résumer les chiffres en UNE et les nombres B et voir si les résultats sont égaux, et vérifiez si UNE , B est la partition de S .
Si je vous ai donné A = { 2 , 5 } et B = { 1 , 4 } , vous allez vérifier que ma preuve est invalide. Cela ne signifie pas que la réponse est NON, cela signifie simplement que cette preuve était invalide. Votre tâche ici n’est pas de trouver la réponse, mais seulement de vérifier si la preuve qui vous est donnée est valide.
C'est comme si un étudiant résolvait une question dans un examen et un professeur vérifiait si la réponse était correcte. :) (malheureusement souvent les étudiants ne donnent pas assez d'informations pour vérifier l'exactitude de leur réponse et les professeurs doivent deviner le reste de leur réponse partielle et décider quelle note ils doivent accorder aux étudiants pour leurs réponses partielles, voire très difficile tâche).
Ce qui est étonnant, c’est que la même situation s’applique à de nombreux autres problèmes naturels que nous voulons résoudre:
nous pouvons vérifier efficacement si une preuve courte donnée est valide, mais nous ne connaissons aucun moyen efficace de trouver la réponse . C'est la raison pour laquelle la classe de complexité N P est extrêmement intéressante
(même si ce n'était pas la motivation initiale pour la définir). Quoi que vous fassiez (pas seulement en CS, mais aussi en mathématiques, biologie, physique, chimie, économie, gestion, sociologie, entreprises,…), vous serez confronté à des problèmes de calcul relevant de cette classe. Pour avoir une idée du nombre de problèmes qui se révèlent être chez N P check out
un condensé des problèmes d'optimisation des NP . En effet , vous aurez du mal à trouver des problèmes naturels qui ne sont pas en N P . C'est simplement incroyable.
N P est la classe de problèmes pour lesquels les vérificateurs sont efficaces, c'est-à-dire
qu'il existe un algorithme polynomial permettant de vérifier si une solution donnée est correcte.
Plus formellement, nous disons un problème de décision Q est N P ssi
il existe un algorithme efficace V appelé vérificateur tel que
pour toutes les entrées X ,
- si Q ( x ) = YES alors il y a une preuve y telle que V( x , y) = YES ,
- si Q ( x ) = NO alors pour toutes les preuves y , .V( x , y) = NO
Nous disons qu'un vérificateur est valable
s'il n'accepte aucune preuve lorsque la réponse est NON. En d'autres termes, un vérificateur de son ne peut pas être trompé pour accepter une preuve si la réponse est vraiment NON. Pas de faux positifs.
De même, nous disons qu'un vérificateur est complet
s'il accepte au moins une preuve lorsque la réponse est OUI. En d'autres termes, un vérificateur complet peut être convaincu que la réponse est OUI.
La terminologie vient des systèmes de logique et de preuve . Nous ne pouvons pas utiliser un système d'insonorisation pour prouver des déclarations fausses. Nous pouvons utiliser un système de preuves complet pour prouver toutes les affirmations vraies.
Le vérificateur obtient deux entrées,V
- XQ : l'entrée d'origine pour , etQ
- y : une preuve suggérée pourQ ( x ) = YES .
Notez que nous voulons que V soit efficace dans la taille de X . Si y est une grande preuve, le vérificateur ne pourra lire qu’une partie polynomiale de y . C'est pourquoi nous exigeons que les preuves soient courtes. Si y est court, dire que V est efficace dans X
équivaut à dire que V est efficace dans X et y
(car la taille de y est limitée par un polynôme fixe de la taille de X ).
En résumé, pour montrer qu'un problème de décision Q est N P
nous devons donner un efficace algorithme de vérification qui est son et complète .
Note historique: historique ce n'est pas la définition originale de N P . La définition d'origine utilise ce qu'on appelle des machines de Turing non déterministes . Ces machines ne correspondent pas à un réel modèle de machine et sont difficiles à se habituer à (au moins lorsque vous commencez à en apprendre davantage sur la théorie de la complexité). J'ai lu que de nombreux experts pensent qu'ils auraient utilisé la définition du vérificateur comme définition principale et auraient même nommé la classe V P
(pour vérifiable en temps polynomial) à la place de N P
s'ils remontent à l'aube de la théorie de la complexité informatique. La définition du vérificateur est plus naturel, plus facile à comprendre sur le plan conceptuel, et plus facile à utiliser pour montrer les problèmes sont en N P .
P ⊆ N P
Nous avons donc
P = efficace résoluble et N P = vérifiable efficacement . Alors P = N P ssi les problèmes qui peuvent être efficacement vérifiés sont les mêmes que les problèmes qui peuvent être efficacement résolus.
Notez que tout problème dans P est également dans N P , c'est-à-dire que si vous pouvez résoudre le problème, vous pouvez également vérifier si une preuve donnée est correcte: le vérificateur ignorera simplement la preuve!
C'est parce que nous n'en avons pas besoin, le vérificateur peut calculer la réponse lui-même, il peut décider si la réponse est OUI ou NON sans aucune aide. Si la réponse est NON, nous savons qu'il ne devrait y avoir aucune preuve et notre vérificateur rejettera simplement toutes les preuves suggérées. Si la réponse est OUI, il devrait y avoir une preuve, et en fait, nous n'accepterons rien comme preuve.
[Nous aurions pu demander à notre vérificateur d’en accepter seulement quelques-unes, ce qui est également bien, à condition que notre vérificateur accepte au moins une preuve que le vérificateur fonctionne correctement pour le problème.]
Voici un exemple:
Somme d'
entrée: une liste de n + 1 nombres naturels une1, ⋯ , an et s ,
Question: est Σni = 1uneje= s ?
Le problème est dans P parce que nous pouvons résumer les nombres puis les comparer avec s , nous retournons OUI s'ils sont égaux et NON si ils ne le sont pas.
Le problème est également en N P . Prenons un vérificateur V qui obtient une épreuve plus l’entrée pour Sum. Il agit de la même manière que l'algorithme de P décrit ci-dessus. C'est un vérificateur efficace pour Sum.
Notez qu'il existe d'autres vérificateurs efficaces pour Sum et que certains d'entre eux peuvent utiliser la preuve qui leur est donnée. Cependant, celui que nous avons conçu ne le fait pas et cela convient également. Depuis que nous avons donné un vérificateur efficace pour somme le problème est dans N P . La même astuce fonctionne pour tous les autres problèmes P donc
P ⊆ N P .
Algorithmes de recherche par force brute / recherche exhaustive pour N P et N P ⊆ E x p T i m e
Les meilleurs algorithmes que nous connaissons pour résoudre un problème arbitraire dans N P sont
les algorithmes de force brute / recherche exhaustive . Choisissez un vérificateur efficace pour le problème (il a un vérificateur efficace en supposant qu'il est dans N P ) et vérifiez toutes les preuves possibles une par une. Si le vérificateur en accepte un, la réponse est OUI. Sinon, la réponse est NON.
Dans notre exemple de partition, nous essayons toutes les partitions possibles et vérifions si les sommes sont égales dans l'une d'elles.
Notez que l'algorithme de force brute s'exécute dans le temps exponentiel dans le pire des cas. La taille des preuves est polynomiale dans la taille de l'entrée. Si la taille des épreuves est m il y a 2m épreuves possibles. La vérification de chacun d’eux prendra un temps polynomial par le vérificateur. Donc, au total, l'algorithme de force brute prend un temps exponentiel.
Cela montre que tout problème de N P peut être résolu en temps exponentiel, c'est-à-dire
N P ⊆ E x p T i m e . ( En outre , l'algorithme de force brute va utiliser seulement une quantité polynomiale de l' espace, à savoir
N P ⊆ P S p a c e
mais qui est une histoire pour un autre jour).
Un problème dans N P peut avoir des algorithmes beaucoup plus rapides, par exemple tout problème dans P a un algorithme polynomial. Cependant, pour un problème arbitraire dans N P
nous ne connaissons pas d’algorithmes capables de faire beaucoup mieux. En d'autres termes, si vous venez de me dire que votre problème est dans N P
(et rien d'autre à propos du problème), alors l'algorithme le plus rapide que nous connaissons pour le résoudre prend un temps exponentiel.
Cependant, cela ne signifie pas qu’il n’ya pas de meilleurs algorithmes,
nous ne le savons pas . Autant que nous sachions, il est toujours possible (bien que cela soit considéré comme très improbable par presque tous les théoriciens de la complexité) que
N P = P et tous les problèmes de N P puissent être résolus en temps polynomial.
En outre, certains experts supposent que nous ne pouvons pas faire beaucoup mieux, c'est-à-dire qu'il existe des problèmes dans N P qui ne peuvent pas être résolus beaucoup plus efficacement que les algorithmes de recherche par force brute, qui prennent un temps exponentiel. Voir Hypothèse de temps exponentiel
pour plus d'informations. Mais ce n'est pas prouvé, ce n'est qu'une conjecture . Cela montre à quel point nous sommes loin de trouver des algorithmes de temps polynomiaux pour des problèmes arbitraires de N P
Cette association avec le temps exponentiel confond certaines personnes: elles pensent à tort que les
problèmes de N P nécessitent une résolution de temps exponentiel (ou pire, il n’existe aucun algorithme pour eux). Affirmer qu'un problème est dans N P
ne signifie pas qu'un problème est difficile à résoudre, cela signifie simplement qu'il est facile à vérifier, c'est une limite supérieure à la difficulté de résoudre le problème, et de nombreux problèmes de N P sont faciles à résoudre étant donné que P ⊆ N P .
Néanmoins, il existe des problèmes N P qui semblent difficiles à résoudre. Je reviendrai quand nous discutons N P -hardness.
Les limites inférieures semblent difficiles à prouver
D'accord, nous savons maintenant qu'il existe de
nombreux problèmes naturels en N P , nous ne connaissons aucun moyen efficace de les résoudre et nous pensons qu'ils ont vraiment besoin de temps exponentiel pour les résoudre. Pouvons-nous le prouver?
Malheureusement, il est très difficile de prouver les limites inférieures . Nous ne pouvons même pas prouver que ces problèmes nécessitent plus que du temps linéaire ! Laisse seul nécessiter un temps exponentiel.
Il est assez facile de prouver les limites inférieures du temps linéaire: l'algorithme doit lire l'entrée après tout. Prouver des limites inférieures super-linéaires est une histoire complètement différente. Nous pouvons prouver des limites inférieures super-linéaires avec davantage de restrictions sur le type d'algorithmes que nous envisageons, par exemple, les algorithmes de tri utilisant la comparaison, mais nous ne connaissons pas les limites inférieures sans ces restrictions.
Pour prouver une limite supérieure à un problème, nous avons juste besoin de concevoir un algorithme assez bon. La mise au point d'un tel algorithme nécessite souvent des connaissances, une pensée créative et même de l'ingéniosité.
Cependant, la tâche est considérablement plus simple que de prouver une limite inférieure. Nous devons montrer qu'il n'y a pas de bons algorithmes . Non pas que nous ne connaissions pas assez d’algorithmes assez bons à l’heure actuelle, mais qu’il n’existe aucun bon algorithme , que personne ne trouvera jamais un bon algorithme . Pensez-y une minute si vous ne l'avez pas encore fait, comment pouvons-nous montrer un résultat aussi impossible ?
C'est un autre endroit où les gens sont confus. Ici, "impossibilité" est une impossibilité mathématique , c’est-à-dire que ce n’est pas un hasard si un génie peut le réparer à l’avenir. Lorsque nous disons impossible, nous entendons qu'il est absolument impossible, aussi impossible que 1 = 0 . Aucune avancée scientifique ne peut le rendre possible. C'est ce que nous faisons lorsque nous prouvons des limites inférieures.
Pour prouver une limite inférieure, par exemple pour montrer qu'un problème nécessite une certaine quantité de temps pour résoudre, signifie que nous devons prouver que toutUn algorithme, même très ingénieux qui ne le sait pas encore, ne peut résoudre le problème plus rapidement. Nous connaissons de nombreuses idées intelligentes (gourmande, correspondance, programmation dynamique, programmation linéaire, programmation semi-finale, programmation par somme de carrés, et bien d’autres idées intelligentes) et il en existe beaucoup d’autres que nous ne connaissons pas encore. Exclure un algorithme ou une idée particulière de concevoir des algorithmes ne suffit pas, nous devons les exclure tous, même ceux que nous ne connaissons pas encore, même ceux qui ne le savent peut-être jamais! Et on peut combiner tous ces éléments dans un algorithme, il faut donc également exclure leurs combinaisons. Certains progrès ont été réalisés pour montrer que certaines idées ne peuvent pas résoudre des problèmes difficiles N Ples problèmes, par exemple glouton et ses extensions, ne peuvent pas fonctionner, et certains travaux sont liés aux algorithmes de programmation dynamique, et certains travaux concernent des manières particulières d'utiliser la programmation linéaire. Mais ils ne sont même pas près d’écarter les idées intelligentes que nous connaissons (recherchez des limites inférieures dans des modèles de calcul restreints si vous êtes intéressé).
Obstacles: les limites inférieures sont difficiles à prouver
D'autre part, nous avons des résultats mathématiques appelés
obstacles
qui disent qu'une preuve de la limite inférieure ne peut pas être telle ou telle, et telle ou telle couvre presque toutes les techniques que nous avons utilisées pour prouver les limites inférieures! En fait, de nombreux chercheurs ont abandonné le travail de démonstration des limites inférieures après le résultat de barrière aux preuves naturelles d' Alexander Razbarov et Steven Rudich
. Il s’avère que l’existence d’un type particulier de preuves à la limite inférieure impliquerait l’insécurité des générateurs de nombres cryptographiques pseudo-aléatoires et de nombreux autres outils cryptographiques.
Je dis presque parce que ces dernières années, certains progrès ont été réalisés, principalement par Ryan Williams,
qui a réussi à contourner intelligemment les résultats de la barrière. Néanmoins, les résultats obtenus jusqu'à présent concernent des modèles de calcul très faibles et assez loin d'exclure les algorithmes généraux à temps polynomiaux. .
Mais je suis en train de diverger. Ce que je voulais surtout dire, c’est qu’il est difficile de prouver les limites inférieures et que nous n’avons pas de fortes limites inférieures pour les algorithmes généraux résolvant N P problèmes.
[D'autre part, les travaux de Ryan Williams montrent qu'il existe des liens étroits entre la détermination de limites inférieures et la détermination de valeurs supérieures. Voir sa présentation à l'ICM 2014 si cela vous intéresse.]
Réductions: Résoudre un problème en utilisant un autre problème comme sous-programme / Oracle / Black Box
L'idée d'une réduction est très simple: pour résoudre un problème, utilisez un algorithme pour un autre problème.
Voici un exemple simple: supposons que nous voulions calculer la somme d'une liste de n nombres naturels et que nous ayons un algorithme Su m qui renvoie la somme de deux nombres donnés. Pouvons-nous utiliser Su m pour additionner les nombres de la liste? Bien sûr!
Problème:
Entrée: une liste de n nombres naturels X1, … , Xn ,
Sortie: return Σni = 1Xje .
Algorithme de réduction:
- s = 0
- pour je de 1 à n
2.1. s = Su m ( s , xje)
- retour s
Ici, nous utilisons Su m dans notre algorithme en tant que sous - programme . Notez que nous ne se soucient pas de la façon dont Su m fonctionne, il agit comme boîte noire pour nous, nous ne nous soucions pas ce qui se passe à l' intérieur Su m . On parle souvent du sous - programme Su m comme oracle . C'est comme l'oracle de Delphes dans la mythologie grecque, nous posons des questions et l'oracle y répond et nous utilisons les réponses.
C’est essentiellement ce qu’est une réduction: supposons que nous ayons un algorithme pour un problème et l’utilisons comme un oracle pour résoudre un autre problème. Dans ce cas, efficace signifie efficace, en supposant que l'oracle réponde en unité de temps, c'est-à-dire que nous comptons chaque exécution de l'oracle comme une étape.
Si l'oracle renvoie une réponse volumineuse, nous devons la lire et cela peut prendre un certain temps. Nous devons donc compter le temps qu'il nous faut pour lire la réponse fournie par Oracle. De même pour écrire / poser la question de l'oracle. Mais oracle fonctionne instantanément, c'est-à-dire que dès que nous posons la question de l'oracle, l'oracle écrit la réponse pour nous en une seule unité de temps. Tout le travail effectué par oracle est compté en une seule étape, mais cela exclut le temps nécessaire pour écrire la question et lire la réponse.
Parce que nous ne nous soucions pas du fonctionnement d’Oracle mais seulement des réponses qu’il nous renvoie, nous pouvons faire une simplification et considérer l’Oracle comme le problème à la place d’un algorithme. En d'autres termes, nous ne nous soucions pas de savoir si l'oracle n'est pas un algorithme, nous ne nous soucions pas de savoir comment oracles parvient à ses réponses.
Par exemple, dans la question ci-dessus ,
Su m est la fonction d’addition elle-même (et non un algorithme de calcul de l’addition).
Nous pouvons poser plusieurs questions à un oracle et il n’est pas nécessaire que les questions soient prédéterminées: nous pouvons poser une question et sur la base de la réponse renvoyée par Oracle, nous effectuons certains calculs par nous-mêmes, puis nous posons une autre question en fonction de la réponse obtenue. la question précédente.
Une autre façon de voir cela consiste à le considérer comme un calcul interactif . Le calcul interactif est en soi un sujet important, je ne vais donc pas en parler ici, mais je pense que mentionner cette perspective de réduction peut être utile.
Un algorithme UNE qui utilise un oracle / boîte noire O est habituellement désignée par UNEO .
La réduction , nous avons discuté ci - dessus est la forme la plus générale d'une réduction et est connu comme la réduction de la boîte noire
(aka réduction oracle , réduction Turing ).
Plus formellement:
Nous disons que le problème Q est une boîte noire réductible au problème O et écrivons Q ≤TO si et seulement si
il existe un algorithme UNE tel que pour toutes les entrées X ,
Q ( x ) = AO( x ) .
En d' autres termes , s'il existe un algorithme UNE qui utilise l'oracle O en tant que sous - programme et résout le problème Q .
Si l' algorithme de réduction UNE court en temps polynomial que nous appelons un temps polynomiale réduction boîte noire ou simplement une réduction de Cook
(en l' honneur de
Stephen A. Cook ) et écrire Q ≤PTO . (L'indice T signifie "Turing" en l'honneur d'
Alan Turing ).
Cependant, nous pouvons vouloir imposer des restrictions à la manière dont l'algorithme de réduction interagit avec l'oracle. Plusieurs restrictions sont étudiées, mais la restriction la plus utile est celle appelée réductions de plusieurs unités
(ou réductions de mappage ).
L'idée ici est que, sur une entrée donnée X , nous effectuons un calcul polynomial en temps et générons un y
représentant le problème résolu par l'oracle. Nous demandons ensuite à l'oracle et nous retournons la réponse qu'il nous renvoie. Nous sommes autorisés à poser une seule question de l'oracle et les réponses de l'oracle sont ce qui sera retourné.
Plus formellement,
Nous disons que le problème Q est plusieurs-un réductible au problème O et écrivons Q ≤mO si et seulement
s'il existe un algorithme UNE tel que pour toutes les entrées X ,
Q ( x ) = O ( A ( x ) ) .
Lorsque l'algorithme de réduction est temps polynomiale que nous appelons
polynôme temps beaucoup-une réduction ou simplement la réduction Karp (en l' honneur de
Richard M. Karp ) et on note par Q ≤PmO .
La principale raison de l'intérêt dans ce cas particulier la réduction non interactive est qu'il préserve N P problèmes: s'il y a un polynôme temps beaucoup-une réduction d'un problème UNE à un N P problème B , alors UNE est également en N P .
La notion simple de réduction est l’une des notions les plus fondamentales de la théorie de la complexité avec P , N P et N P complète (que nous verrons plus loin).
La publication est devenue trop longue et dépasse la limite d'une réponse (30000 caractères). Je vais continuer la réponse dans la partie II .