Lyc´ee Faidherbe de Lille
Informatique pour tous - MPSI et PCSI
TP : Dichotomie
1 Recherche dans un tableau
Dans ce TP, les listes ne contiennent que des nombres entiers ou r´eels. Elles peuvent contenir plusieurs
appartions ou occurences d’une mˆeme quantit´e.
1. ´
Ecrire une fonction chercheIndice(l,x) qui parcourt terme `a terme la liste `et qui retourne la liste
des indices itel que `[i] = x.
Justifier que le nombre de comparaisons effectu´ees est de l’ordre de n, la longueur de `.
2. ´
Ecrire une fonction estDans(l,x) qui parcourt terme `a terme la liste `ou une partie de `et qui
retourne True si xest un ´el´ement de `et False sinon. Justifier que nombre de comparaisons effectu´ees
est domin´e par n, la longueur de `.
Dans la suite, on donne une m´ethode pour am´eliorer l’efficacit´e de la fonction estDans, le prix `a payer
est de chercher dans une liste tri´ee dans l’ordre croissant.
3. ´
Ecrire une fonction verifie(l) qui retourne True si la liste `est tri´ee dans l’ordre croissant et False
sinon.
4. Soit `une liste tri´ee dans l’ordre croissant et xun nombre. On note nla longueur de `. La recherche
dichotomique se propose de retourner True si xest un ´el´ement de `et False sinon et cela avec un
nombre de comparaisons de l’ordre de ln(n) ce qui est mieux que la recherche na¨ıve qui est de l’ordre
de n.
Pour tout 0 a < b n, on note `[a:b] la tranche [`[a],· · · , `[b1]] de `. On proc`ede ainsi :
On cherche xdans la tranche `[a:b] :
estdans est initialis´e `a False.
Tant que a < b et not(estdans), on pose m=b1+a
2,# le milieu de [a,b-1]
si x=`[m] alors on donne la valeur True `a estdans
sinon si x<`[m], alors on pose b=m
sinon on a `[m]< x et on pose a=m+ 1.
Fin du tant que.
Retourner(estdans)
(a) Justifier que l’algorithme est correct et qu’il se termine, c’est-`a-dire qu’il donne une bonne r´eponse
`a la question pos´ee et cela avec un nombre fini d’´etapes. On distinguera les cas o`u xest dans `
et le cas contraire.
(b) ´
Ecrire une fonction chercheDicho(l,x) qui d´etermine avec cette m´ethode s’il existe dans une
liste croissante `un indice itel que `[i] = x. Le retour est donc un bool´een.
5. ´
Ecrire une fonction chercheIndice2(l,x) qui retourne la liste des indices itel que `[i] = x. On
utilisera une m´ethode dichotomique pour trouver un indice i0tel que `[i0] = x. Puis on construira la
liste voulue `a partir de cette position i0.
Donner un exemple, o`u le nombre de comparaisons est de l’ordre de la taille de la liste.
6. ´
Ecrire une fonction chercheNegatif(l,x) qui d´etermine dans une liste croissante `l’indice itel que
`[i]0< `[i+ 1].On suppose que `[0] 0< `[n1] o`u nest la longueur de `. On utilisera une
m´ethode dichotomique (en temps ln(n))
1
7. BONUS : La dichotomie s’appuie sur la comparaison entre xet la m´ediane de `[a:b].La connaissance
de la m´ediane peut donc rendre de grands services. On donne ici une m´ethode pour calculer une
pseudo-m´ediane (pour les d´etails voir le sujet d’option informatique de Centrale 2012) sur un tableau
non tri´e.
Pour un tableau de taille n= 3k,on utilisera l’algorithme de recherche d’une pseudo m´ediane suivant:
si k= 0,on retourne directement le seul ´el´ement consid´er´e ;
sinon, on regroupe les ´el´ements du tableau par 3, on calcule les 3k1m´edianes de ces groupes,
puis on it`ere le processus sur ces 3k1m´edianes. On obtient 3k2nouvelles m´edianes. De proche
en proche, il ne reste qu’un seul nombre que l’on retourne.
(a) ´
Ecrire une fonction mediane(t,i,j,k) prenant en entr´ee un tableau tet trois indices distincts
i, j, k et retournant un indice de la m´ediane, parmi les trois ´el´ements t[i], t[j], t[k].
(b) Pour appliquer la m´ethode, on pourra supposer le tableau de taille 3k, placer dans une premi`ere
´etape les m´edianes de blocs de trois en positions 3i, puis prendre les m´edianes de ces m´edianes et
les placer en position 9i, etc. Appliquer la m´ethode sur [7,1,4,9,8,5,3,2,6] et justifier que l’on
obtient 4.
(c) ´
Ecrire une fonction calculant une pseudo m´ediane. Cette fonction travaillera obligatoirement dans
le tableau initial, sans en cr´eer de nouveau, et en maintenant globalement invariant l’ensemble
des valeurs pr´esentes dans le tableau de taille 3k.
Donner en fonction de k, un ordre de grandeur du nombres de comparaisons.
2 Recherche de racine d’une fonction
2.1 Exercice : Dichotomie et suites adjacentes.
Une banque propose ce placement : la 1`ere ann´ee, le capital augmente de t%,la 2`eme ann´ee de t% et la 3`eme
ann´ee de (t+ 1) %.L’augmentation de capital est de 8 % au bout des trois ans. On souhaite connaˆıtre une
valeur approch´ee de t. Le banquier dit que tvaut environ 2,4%.Peut-on lui faire confiance ?
1. Justifier que tv´erifie l’´equation t3+ 301t2+ 30200t70000 = 0.
On d´efinit l’application gpar g: [0; +[R
x7→ x3+ 301x2+ 30200x70000
2. ´
Ecrire une fonction g(x) qui retourne la valeur de g(x).
3. Justifier math´ematiquement que l’´equation g(x) = 0 admet une unique solution, not´ee α, sur l’intervalle
[0; +[ et que gest strictement croissante sur [0,3].Donner les valeurs de g(0) et g(3).
On construit deux suites (un)nNet (vn)nNtelles que u0= 1, v0= 3 et pour tout entier naturel non
a :
Si g(un+vn
2)>0,alors un+1 =unet vn+1 =un+vn
2.
Si g(un+vn
2)0,alors un+1 =un+vn
2et vn+1 =vn.
4. Montrer que les suites (un)nNet (vn)nNsont `a termes positifs, qu’elles sont adjacentes et qu’elles
convergent vers α.
5. ´
Ecrire une fonction rechercheRacine(eps) qui retourne une valeur de α`a εpr`es. Il suffit de calculer
unet vntels que |vnun|< ε et de retourner un+vn
2.En effet, on sait que, pour tout nN, α est
encadr´e par unet vn.
2
6. Montrer que, pour tout entier naturel n, on a vnun=1
2n1.
7. En d´eduire le nombre d’op´erations induites par rechercheRacine(eps) en fonction de ε.
3
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !