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
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