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

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

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

Saved successfully!

Ooh no, something went wrong!