29.12.2013 Views

la recherche d'un élément par dichotomie dans un ... - Verimag

la recherche d'un élément par dichotomie dans un ... - Verimag

la recherche d'un élément par dichotomie dans un ... - Verimag

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

def<br />

ψ 5 = T [0..N] croissant ∧ x ∈ T [0..N] ⇒ x ∈ T [d..f]<br />

Remarque : T [0..N] croissant et x > T [m] permet de montrer que x ∈ T [m + 1..N] mais<br />

ne sut pas pour montrer que x est situé avant f. Il faut donc ajouter <strong>la</strong> seconde condition qui<br />

dit que si x est <strong>dans</strong> le tableau alors il est <strong>dans</strong> le sous-tableau qui se termine à f.<br />

m←(d+f)÷2<br />

En q 4 : on détermine ψ 4 d'après ψ 5 en utilisant <strong>la</strong> transition q 4 −−−−−−−−→ q 5 . On choisit<br />

def<br />

ψ 4 = ψ 5 [m ← (d + f) ÷ 2] def<br />

= T [0..N] croissant ∧ x ∈ T [0..N] ⇒ x ∈ T [d..f]<br />

Remarque : La propriété ψ 5 ne mentionne pas m, donc le remp<strong>la</strong>cement de m <strong>par</strong> (d+f)÷2<br />

n'a pas d'eet et on trouve que ψ 4 = ψ 5 . Ce<strong>la</strong> signie que le calcul de m ne joue auc<strong>un</strong> rôle<br />

<strong>dans</strong> <strong>la</strong> preuve de correction ; ce qui peut <strong>par</strong>aître surprenant. En fait, ce calcul est important<br />

<strong>dans</strong> <strong>la</strong> preuve de terminaison de l'algorithme mais n'a pas d'impact sur <strong>la</strong> preuve de correction.<br />

✞<br />

☎<br />

d≤f<br />

En q 1 : ✝VÉRIFICATION ✆: on utilise <strong>la</strong> transition q 1 −−−→ q 4 pour s'assurer que les propriétés que<br />

nous avons choisies forme <strong>un</strong>e chaîne d'implications qui est préservée <strong>par</strong> les itérations (c'est-à-dire les<br />

chemins de q 1 à q 1 ).<br />

On vérie que<br />

x ∈ T [0..N] ⇒ x ∈ T [d..f] ∧ d ≤ f<br />

} {{ }<br />

ψ 1<br />

?<br />

=⇒ T [0..N] croissant ∧ x ∈ T [0..N] ⇒ x ∈ T [d..f]<br />

} {{ }<br />

La seconde <strong>par</strong>tie de <strong>la</strong> propriété ψ 4 est trivialement satisfaite puisqu'elle ap<strong>par</strong>aît en prémisse de<br />

l'implication (c'est ψ 1 ). Par contre <strong>la</strong> première <strong>par</strong>tie de ψ 4 n'est pas <strong>un</strong>e conséquence de <strong>la</strong> prémisse.<br />

On doit réviser notre choix de ψ 1 et prendre :<br />

def def<br />

ψ 1 = ψ 4 = T [0..N] croissant ∧ x ∈ T [0..N] ⇒ x ∈ T [d..f]<br />

Ceci entraîne des révisions en cascade des propriétés qu'on a déterminées à <strong>par</strong>tir de ψ 1 . On doit donc<br />

reprendre les raisonnements depuis q 1 .<br />

def<br />

ψ 8 = ψ 1 [d ← m + 1] def<br />

= T [0..N] croissant ∧ x ∈ T [0..N] ⇒ x ∈ T [m + 1..f]<br />

?<br />

Avec ces modications, l'implication ψ 1 ∧ d ≤ f =⇒ ψ 4 est trivialement satisfaite car elle est de <strong>la</strong><br />

forme P ∧ Q ⇒ P donc nos choix sont validés : les propriétés ψ 1 , ψ 4 , ψ 5 , ψ 8 , ψ 2 , ψ 11 , ψ s sont donc des<br />

invariants des états q 1 , q 4 , q 5 , q 8 , q 2 , q 11 , q s respectivement.<br />

En q 0 : on détermine les conditions initiales ψ 0 d'après ψ 1 en utilisant <strong>la</strong> transition q 0 −−−−−−−−→ q 1<br />

ψ 4<br />

d←0 ; f←N<br />

ψ 0<br />

def<br />

= ψ 1 [d ← 0 ; f ← N] def<br />

= T [0..N] croissant ∧ x ∈ T [0..N] ⇒ x ∈ T [0..N]<br />

} {{ }<br />

def<br />

= T [0..N] croissant<br />

true<br />

Donc l'algorithme fonctionne pour n'importe quel tableau croissant (contenant ou non le x cherché).<br />

3

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!