Que signifie dire qu'un algorithme est sain et complet?

33

J'ai entendu différentes interprétations sonores et complètes . Je comprends que l' exhaustivité signifie trouver une solution s'il y en a une. Que signifie dire qu'un algorithme est sain .

Que signifie dire qu'un algorithme est sain et complet?

mutelogan
la source
Je vous suggère de réévaluer la réponse que vous avez acceptée étant donné que l'on a tort.
BlackJack
Je viens de le faire :)
mutelogan

Réponses:

50

Ce sont des termes très spécifiques liés à la logique.

Voici quelques points de départ:

http://en.wikipedia.org/wiki/Soundness

http://en.wikipedia.org/wiki/Completeness_(logic)

Fondamentalement, la solidité (d'un algorithme) signifie que l'algorithme ne donne aucun résultat faux. Si, par exemple, j'ai un algorithme de tri qui parfois ne renvoie pas de liste triée, l'algorithme n'est pas sain.

L'exhaustivité, d'autre part, signifie que l'algorithme traite toutes les entrées possibles et n'en manque aucune. Donc, si mon algorithme de tri ne renvoyait jamais une liste non triée, mais refusait simplement de travailler sur des listes contenant le numéro 7, il ne serait pas complet.

Il est complet et sain s'il fonctionne sur toutes les entrées (sémantiquement valable dans le monde du programme) et obtient toujours la bonne réponse.

Erik Dietrich
la source
Merci. J'étais vraiment confus quant à la signification de la solidité . J'obtenais plusieurs réponses.
mutelogan
Heureux si cela a aidé ... :)
Erik Dietrich
13
Un exemple serait la recherche binaire, c'est du son, mais ce n'est pas complet. Il ne peut pas fonctionner sur des listes non triées.
Malfist
3
@Malfist mais n'est-ce pas la liste triée du «monde du programme»?
Andres
1
"Un algorithme se comporte mal sur des entrées invalides" n'affecte pas la solidité ou l'exhaustivité, donc ni la recherche binaire ni le tri par comparaison ne sont pertinents - les deux algorithmes sont solides et complets pour des entrées valides.
Blaisorblade
15

Je trouve la réponse d'Erik Dietrich un peu déroutante. C'est mieux:

Un algorithme est valable si, à chaque fois qu'il renvoie une réponse, cette réponse est vraie. Un algorithme est complet s'il garantit de retourner une réponse correcte pour toute entrée arbitraire (ou, s'il n'y a pas de réponse, il garantit de retourner l'échec).

Deux points importants:

  1. La solidité est une faible garantie. Il ne promet pas que A prendra fin.
  2. La solidité et l'exhaustivité sont des concepts connexes; en fait, ils sont l'inverse logique de l'autre. ie Soundness dit que si une réponse est retournée, cette réponse est vraie. L'exhaustivité indique qu'une réponse est vraie si elle est retournée.

Considérons par exemple un algorithme de tri A qui reçoit en entrée une liste de nombres. Nous disons que A est sain si à chaque fois qu'il renvoie un résultat, ce résultat est une liste triée. De même, nous disons que A est complet si nous garantissons de renvoyer une liste triée chaque fois que nous lui donnons une liste de nombres.

Daniel
la source
Pourquoi es-tu confus? "Un algorithme est valable si, à chaque fois qu'il renvoie une réponse, cette réponse est vraie." signifie la même chose que "Fondamentalement, la solidité (d'un algorithme) signifie que l'algorithme ne donne aucun résultat qui est faux." Cela signifie la même chose. Quant à votre (très brève) définition de la complétude, elle ne correspond à rien dans le lien wikipedia et vous ne citez aucune référence de votre choix. Je dois dire que les définitions d'Erik sont plus utiles sur le plan pratique. Si la vôtre est correcte, vous devez fournir de meilleures preuves et plus de viande.
itsbruce
1
Juste pour clarifier, quand vous dites "l'exhaustivité dit qu'une réponse est vraie si elle est retournée", vous voulez dire que la réponse est "correcte", n'est-ce pas?
Dois
1
«Une réponse est vraie si elle est renvoyée» signifie littéralement la même chose que «si une réponse est renvoyée, elle est vraie». De plus, les réponses ne peuvent pas être «vraies», seulement correctes. softwareengineering.stackexchange.com/a/311649/21277 est plus correct.
Blaisorblade
2

Ces termes proviennent de la théorie du calcul, ils sont donc plus significatifs dans le contexte de la théorie du calcul que dans le contexte du génie logiciel

Dans la plupart des modèles de calcul standard, les problèmes informatiques sont représentés comme des langages . Une langue est un ensemble de chaînes. Un algorithme n'est donc qu'un système ou une procédure qui décide si une chaîne donnée est membre d'une langue (en renvoyant true ou false). En termes de génie logiciel, la théorie du calcul s'intéresse spécifiquement aux fonctions qui ressemblent à ceci, en supposant que les chaînes sont immuables:

boolean some_function(string argument){...}

Nous appelons cette fonction complète si elle retourne vrai pour chaque argument qui est membre du langage. Nous l'appelons son s'il renvoie faux pour chaque argument qui n'est pas membre du langage.

En d'autres termes, il est complet s'il retourne toujours vrai quand nous voulons qu'il revienne vrai, et son s'il retourne toujours faux quand nous voulons qu'il retourne faux.

Comment cela se traduit-il dans d'autres types de fonctions? En fait, il est presque toujours possible de bourrer une quantité arbitraire de données dans une chaîne et de la reconstituer à l'intérieur de la fonction. La restriction du type d'argument et de l'arité n'est donc rien d'autre qu'une simplification théorique. La restriction sur le type de retour est cependant plus importante. Les problèmes qui appellent un résultat booléen sont appelés problèmes de décision . Une grande partie de la théorie du calcul implique des problèmes de décision; les ensembles P et NP sont limités aux problèmes de décision (et NP, au moins, ne pourrait pas être raisonnablement défini sans cette restriction). Le problème de l'arrêt est un autre exemple d'un problème de décision très étudié.

À mon avis, ces termes ne se généralisent pas en dehors du domaine des problèmes de décision, de sorte que la différence entre eux n'est pas vraiment significative lorsque l'on discute d'une fonction générale.

Kevin
la source
-2

Il y a de bien meilleures réponses au SO . Fondamentalement, vous fournissez une collecte de données et des critères de recherche. Un algorithme sonore ne capture que le poisson qui correspond aux critères, mais il peut manquer certains éléments de données. L'algorithme complet produit un surensemble de résultats demandés, ce qui signifie que vous recevez des ordures en plus des résultats demandés. L'algorithme du son est plus conservateur.

Le statisticien dirait probablement que l'algorithme du son est biaisé par rapport aux erreurs de type I (il n'accepte pas les bons candidats), tandis que l'algorithme complet est biaisé par les erreurs de type II (pour accepter les faux candidats).

entrez la description de l'image ici

Valentin Tihomirov
la source