2 Multiplication des grands entiers
3 Multiplication matricielle
4 Exponentiation discrète
Principe général de la technique DPR :
fonction DPR(x)
/* cette fonction retourne comme valeur la solution de l'exemplaire x */
si x est suffisamment petit alors retourner ADHOC(x) décomposer x en sous-exemplaires
plus simples: x1, x2,...,xk pour i <-- 1 jusqu'à k faire yi <-- DPR(xi) re combiner les yi pour
obtenir une solution y à x retourner y
où ADHOC , le sous algorithme de base , sert à résoudre les k petits exemplaires du
problème. Lorsque k=1 on ne parle pas de technique DPR mais d'algorithme de
simplification.
1 Fouille
Il s'agit de retrouver un mot dans un dictionnaire ou un tableau. le pb consiste à
localiser un élément x dans le tableau T déjà trié en ordre croissant c.à.d. trouver i tel
que T[i] ≤ x < T[i+1] par les algorithmes suivants:
Travail demandé pour Mercredi 4 Mars :
Ecrire un algorithme séquentiel et un algorithme dichotomique et donnez leur ordre.
fonction fouille (T[1..n] , x)
/* recherche dichotomique de x dans T */
si n = 0 ou x < T[1] alors retourner 0
sinon retourner dichotorec(T , x)
fonction dichotorec(T[i .. j] , x)
/* recherche dichotomique de x dans le sous tableau T[i..j]
cette fonction n'est appelée que si i≤j et T[i] ≤ x < T[j+1] */
si i = j alors retourner i
k <-- (i+j+1) div 2
si x < T[k] alors retourner dichotorec(T[i...k-1] , x )
sinon retourner dichotorec(T[k...j] , x )
Trace et Ordre pour n = 8 x = 5 T = [ 1,4,5,8,11,14,20,23]
2 Multiplication des grands entiers
Supposons que l’on veuille effectuer le produit u*v , mais quand la taille de u ou v dépasse la
longueur d'un mot machine la multiplication ne reste pas une opération élémentaire. Le
nombre de multiplications effectuées par le programme est un bon indicateur pour l'ordre.
Pour diminuer le temps: Décomposons u et v comportant n chiffres par une technique DPR:
on divise par 2 les nombres u et v, ainsi :
u = 10s w + x et v = 10s y + z ; s = n/2 d’où
u*v = 102s w.y + 10s (wz + yx) + x.z