J'essaie de comprendre (intuitivement) les deux termes «décidabilité» et «vérifiabilité».
J'ai fait un nombre raisonnable de recherches et de lecture des différents textes sur lesquels je peux mettre la main. Cependant, leur compréhension intuitive semble m'échapper, spécialement pour le second.
Parmi les nombreuses définitions trouvées, la suivante trouvée dans cette page , m'a clairement expliqué la décidabilité.
Une langue est appelée décidable s'il existe une méthode - une méthode quelconque - pour déterminer si un mot donné appartient à cette langue ou non.
Cependant, je n'arrive pas à trouver une définition parallèle de la vérifiabilité.
Dans le livre Theory of Computation de Sipser , nous trouvons,
P = la classe de langues dont l'adhésion peut être décidée rapidement.
NP = la classe de langues dont l'appartenance peut être vérifiée rapidement.
À la lumière de ce qui précède, je veux comprendre la vérifiabilité.
Veuillez fournir autant d'exemples que possible, à un moment donné, j'essaie de comprendre le sens, dans le suivant, je me retrouve à nouveau confus.
Réponses:
La clé pour comprendre ici est que P et NP sont des classes de problèmes de décision. Cela signifie que tous ont des réponses oui / non.
Donc, quand nous disons qu'un problème comme 3-SAT est NP-Complete, cela signifie que, étant donné une instance de 3-SAT (aka un mot potentiellement dans la langue), il n'y a pas de moyen efficace connu pour tester si le mot est ou n'est pas dans la langue.
Dire que quelque chose est en NP signifie qu'il existe une sorte de "preuve" pour chaque chaîne dans la langue, qui est polynomiale dans la longueur de l'entrée.
Par exemple, dans 3-SAT, nous demandons, existe-t-il une affectation de True / False à un ensemble de variables dans une formule booléenne, de sorte que la formule se révèle être vraie. Le mot que nous testons est la formule booléenne. Il n'y a aucun moyen connu de savoir s'il existe une solution unique qui rend la formule entière vraie. Mais, si nous avons un ensemble de valeurs vraies / fausses pour les variables, il est très facile de vérifier (en temps polynomial) si cela fait évaluer la formule à vrai.
Le point clé ici est que le mot que nous testons n'est PAS les valeurs vrai / faux pour chaque variable. Le mot que nous testons est la formule contenant les variables, et la langue est l'ensemble de toutes les formules booléennes évaluées à true.
Nous ne savons pas comment tester efficacement si le mot (formule) est dans la langue (peut être évalué comme vrai), mais étant donné un ensemble d'affectations vrai / faux, nous pouvons vérifier s'il évalue vrai, c'est-à-dire qu'il s'agit d'une "preuve". "que le mot (formule) est dans la langue. Ainsi, le problème est dans NP, mais pas connu pour être dans P.
NP est en fait la classe des problèmes de décision résolubles polynomiaux non déterministes. En effet, dans une machine de turing non déterministe, nous avons des points de "décision" où nous pouvons prendre une des actions multiples, et notre certificateur polynomial dit simplement simplement quelle décision prendre à chaque point de décision.
la source
Supposons que vous me posiez un problème et que vous m'ayez demandé une solution alors disons que vous ne pouvez vérifier que le montant polynomial de ma preuve (c'est-à-dire que vous pouvez exécuter un programme informatique efficace sur ma preuve) lorsque je vous envoie ma preuve de la solution vous devez exécuter votre programme et décider en fonction de la sortie du programme.
par exemple: supposez que vous me demandiez si un graphique est tricolore, alors ce que je dois faire est d'envoyer une 3 coloration du graphique puis vous vérifiez si tous les sommets adjacents ont des couleurs différentes alors la coloration est légale et le programme se termine par "accepter" (sinon la preuve n'est pas acceptée et nous terminons par "rejeter").
qui est appelé pour vérifier "rapidement".
si vous pouvez construire un "programme informatique" "efficace" (ou simplement: algorithme polynomial) qui dit si une entrée (une chaîne de longueur n) est dans la langue (ou si la sortie du programme 1 \ "accepte") c'est ce que signifie par classe de complexité P.
exemple: supposons que je vous donne une liste de chaînes (disons annuaire téléphonique) et vous ai demandé un nom que vous devez dire s'il est dans l'annuaire ou non. une solution consiste à jeter tous les noms et à comparer chaque nom avec le nom donné, ce qui signifie que vous pouvez le résoudre en temps linéaire.
un autre exemple est: étant donné un graphique G = (V, E) et un bord e = (u, v) et vous voulez dire si le bord est dans le graphique.
la source