Le pseudo-code pour la boucle de recherche linéaire:Cette invariance de boucle est-elle correcte?
for j = 1 to A.length
if(A[j] = v)
return j;
return NIL
boucle invariante J'ai écrit:
Au début de chaque itération de la boucle, j est le prochain indice après où A [j-1] n'est pas égal à v.
Initialisation:
Lorsque j est égal à 1 et avant de vérifier si elle est moindre que a.length, l'indice précédent est . Alors A [0] n'est pas égal à v, car dans ce contexte A [0] n'existe même pas.
Entretien:
Si A [j] est égal àv puis la boucle se termine. Ce qui signifie que nous n'avons pas l'itération suivante. Mais si elle n'est pas égale à v alors l'itération suivante de la boucle s'exécute tout en préservant l'invariant de boucle.
terminaison:
Les conditions provoquant la boucle pour mettre fin sont que j est plus grande que a.length ou v est égal àA [j]. Parce que chaque itération de boucle augmente j par , nous avons vérifié tous les éléments de A contre v jusqu'à j est plus grande que a.length. D'où l'algorithme est correct. Si v est égal à A [j] alors cela signifie que nous avons trouvé l'élément que nous avons cherché. Ainsi, l'algorithme est correct.
Est-ce correct?