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
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
preuve : m ∈ [0..N] et 1 ∈ [1..1] impliquent m + 1 ∈ [1..N + 1].<br />
Avec f ∈ [0..N] on a m + 1 + f ∈ [1..2N + 1] et donc (m + 1 + f) ÷ 2 ∈ [1 ÷ 2..(2N + 1) ÷ 2] = [0..N]<br />
On est conduit à <strong>un</strong>e nouvelle révision de ψ 5 et des propriétés qui en dépendent. Pour plus de c<strong>la</strong>rté<br />
on ne fait désormais ap<strong>par</strong>aître que les nouvelles propriétés à valider.<br />
ψ 5<br />
ψ 4<br />
ψ 1<br />
ψ 7<br />
ψ 0<br />
ψ 8<br />
def<br />
= m ∈ [0..N] ∧ d, f ∈ . . . . . . . . . . . . . . . ∧ . . .<br />
def<br />
= ψ 5 [m ← (d + f) ÷ 2]<br />
def<br />
= (d + f) ÷ 2 ∈ [0..N] ∧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ∧ . . .<br />
def def<br />
= ψ 4 = (d + f) ÷ 2 ∈ [0..N] ∧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ∧ . . .<br />
def<br />
= ψ 1 [f ← m − 1]<br />
def<br />
= (d + m − 1) ÷ 2 ∈ [0..N] ∧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ∧ . . .<br />
def<br />
= ψ 1 [d ← 0 ; f ← N]<br />
def<br />
= (0 + N) ÷ 2 ∈ [0..N]<br />
} {{ }<br />
true<br />
def<br />
= ψ 1 [d ← m + 1]<br />
∧ . . . . . . . . . . .<br />
∈ [0..N] ∧ . . .<br />
} {{ }<br />
true<br />
def<br />
= (m + 1 + f) ÷ 2 ∈ [0..N] ∧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ∧ . . .<br />
Qu'y a t'il de nouveau <strong>dans</strong> cette révision ?<br />
Pour valider ψ 8 on doit montrer que m + 1 ∈ [0..N] sachant (d'après ψ 5 ) que m ∈ [0..N]. C'est<br />
impossible. En eet, si d = N et f = N alors m = (N + N) ÷ 2 = . . . . . et m + 1 . . . . N ; donc les<br />
propriétés concernant d, f doivent être plus subtiles.<br />
De <strong>la</strong> même manière pour valider ψ 7 , on doit montrer que m − 1 ∈ [0..N] sachant (d'après ψ 5 ) que<br />
m ∈ [0..N]. C'est impossible. En eet, si d = . . . et f = . . . alors m = (d + f) ÷ 2 = . . . et m − 1 < . . ..<br />
On constate que les seuls cas qui nous ennuie sont les cas d = f = m = N et d = f = m = 0. Il ne<br />
posent pas <strong>un</strong> réel problème puisque <strong>dans</strong> ces deux cas il n'y aura pas de nouvelle itération.<br />
On choisit donc d'ajouter <strong>la</strong> contrainte d ≤ f ⇒ d, f ∈ [0..N] à ψ 1 , c'est-à-dire qu'à l'état<br />
q 1 on s'intéresse aux valeurs de d, f <strong>un</strong>iquement lorsque d ≤ f.<br />
On modie à nouveau les propriétés :<br />
ψ 5<br />
ψ 4<br />
ψ 1<br />
ψ 7<br />
def<br />
= m ∈ [0..N] ∧ d, f ∈ [0..N] ∧ . . .<br />
def<br />
= ψ 5 [m ← (d + f) ÷ 2]<br />
def<br />
= (d + f) ÷ 2 ∈ [0..N] ∧ d, f ∈ [0..N] ∧ . . .<br />
def<br />
= (d + f) ÷ 2 ∈ [0..N] ∧ d ≤ f ⇒ d, f ∈ [0..N] ∧ . . .<br />
def<br />
= ψ 1 [f ← m − 1]<br />
def<br />
= (d + m − 1) ÷ 2 ∈ [0..N] ∧ . . . . . . . . . . . . . . . . . . . . . . . . . . . ⇒ . . . . . . . . . . . . . . . . . . . . . . ∈ [0..N] ∧ . . .<br />
6