QCM
Algorithmes dichotomiques — vrai ou faux

1.La recherche dichotomique fonctionne correctement sur un tableau non trié, tant que la valeur cherchée y figure effectivement.

2.Le nombre d’itérations de recherche_dichotomique sur un tableau de longueur est majoré par .

3.Dans puissance_rapide, lorsque exposant est pair, on met à jour resultat en le multipliant par base.

4.D’après le cours, doubler la taille du tableau n’ajoute qu’une seule itération au majorant du nombre d’itérations de la recherche dichotomique.

5.Remplacer d = m - 1 par d = m dans recherche_dichotomique peut provoquer une boucle infinie.

Exercice
Tracer une recherche dichotomique

On considère le tableau trié (longueur , indices à ).

a.

Dérouler l’exécution de recherche_dichotomique(a, 31), en donnant à chaque itération les valeurs de , , et .

g=0,  d=11, m=5, a[m]=18  (18<31, donc g <- 6)
g=6,  d=11, m=8, a[m]=40  (40>31, donc d <- 7)
g=6,  d=7,  m=6, a[m]=25  (25<31, donc g <- 7)
g=7,  d=7,  m=7, a[m]=31  (31=31, on renvoie 7)

L’appel recherche_dichotomique(a, 31) renvoie donc , en itérations.

b.

Dérouler de la même façon l’exécution de recherche_dichotomique(a, 20) (valeur absente du tableau).

g=0,  d=11, m=5, a[m]=18  (18<20, donc g <- 6)
g=6,  d=11, m=8, a[m]=40  (40>20, donc d <- 7)
g=6,  d=7,  m=6, a[m]=25  (25>20, donc d <- 5)

On a alors  : la boucle s’arrête, et l’appel renvoie None, en itérations.

Exercice
Tracer l’exponentiation rapide

On souhaite calculer par puissance_rapide(2, 25).

a.

Écrire en base , puis dérouler l’exécution de puissance_rapide(2, 25), en donnant à chaque itération la parité de exposant, ainsi que les nouvelles valeurs de resultat, base et exposant.

. Le déroulé :

exposant=25 (impair) : resultat=1*2=2,      base=2*2=4,          exposant=12
exposant=12 (pair)   : resultat=2,          base=4*4=16,         exposant=6
exposant=6  (pair)   : resultat=2,          base=16*16=256,      exposant=3
exposant=3  (impair) : resultat=2*256=512,  base=256*256=65536,  exposant=1
exposant=1  (impair) : resultat=512*65536=33554432, base=65536^2, exposant=0

La boucle s’arrête () et l’algorithme renvoie .

b.

Vérifier que ce résultat est correct, et compter le nombre de multiplications effectuées (les deux mises à jour resultat = resultat * base et base = base * base comptent chacune pour une multiplication). Comparer à un calcul naïf par multiplications successives.

On vérifie que . Le déroulé ci-dessus comporte itérations ; à chacune, base = base * base s’exécute (soit multiplications), et resultat = resultat * base s’exécute uniquement lorsque exposant est impair, ce qui se produit fois sur les itérations (, et sont impairs). Le nombre total de multiplications est donc , conforme au majorant du cours (le compte réel est ici strictement inférieur au majorant, car deux mises à jour de resultat sont évitées par la parité).

Le calcul naïf ( facteurs) effectuerait multiplications : l’exponentiation rapide en économise ici .

Les corrigés sont sur Intégrer

5 blocs de plus : les autres énoncés et tous les corrigés, rédigés en entier. Le reste du programme est écrit de la même main, avec les figures interactives et votre progression.