• Aucun résultat trouvé

Diviser pour régner

N/A
N/A
Protected

Academic year: 2022

Partager "Diviser pour régner"

Copied!
2
0
0

Texte intégral

(1)

Lycée Stanislas

T.D. 4

Diviser pour régner

MPSI 1 & 2

2018-2019

I. Tris

Exercice 1. (Mergesort)Écrire un algorithme de tri fusion qui trie les listes.

tri_fusion : 'a list -> 'a list

Exercice 2. (Tri rapide)Dans l'algorithme de tri rapide, on choisit récursivement un pivot, dans cet exercice le premier élément de la liste, et on place à sa gauche les éléments qui lui sont strictement inférieurs et à sa droite ceux qui lui sont supérieurs. Écrire un algorithme de tri rapide qui trie les listes.

tri_rapide : 'a list -> 'a list

II. Diviser pour régner

Exercice 3. (Multiplication de polynômes, Algorithme de Knuth)On représente informatiquement un poly- nômeP=a0+· · ·+anXn−1 avecan−16= 0par le vecteur P = [|a0;. . .;an−1|]. Le polynôme nul sera représenté par le vecteur vide [||].

1. a)Écrire un algorithme naïf mult_pol permettant de calculer le produit de deux polynômes.

mult_pol : int array -> int array -> int array

b) Si on multiplie un polynôme P de degré n avec un polynôme Q de degré m, quel est le nombre d'opérations (additions + multiplications) eectuées dans l'algorithme précédent ?

Quelle est la complexité d'un produitP Qlorsque degP = degQ=n.

2.Soienta, b, c, ddes éléments d'un anneau commutatif. Montrer que l'on peut calculerα=ac, β=bd etγ=ad+bcen ne faisant que trois multiplications.

3. a) On suppose que P et Q sont de même degré n. On note m = n

2

le quotient de la division euclidienne de npar2. Montrer qu'il existe deux polynômesA et B, de degrés inférieurs àm+ 1, dont la recherche des coecients ne nécessite aucun calcul tels queP(X) =A(X) +XmB(X). On posera de mêmeQ(X) =C(X) +XmD(X).

b) Écrire un algorithme coupe qui, étant donné un polynôme, renvoie les polynômes A et B dénis précédemment.

coupe : int array -> int array * int array

c)En déduire un algorithme récursif mult_rec calculant le produit de polynômes de mêmes degrésn. mult_rec : int array -> int array -> int array

On supposera données des fonctions add, oppose, translate qui permettent respectivement d'additionner deux polynômes, de renvoyer leur opposé et de les multiplier par un monôme.

add : int array -> int array -> int array oppose : int array -> int array

translate : int array -> int -> int array

Expliquez (sans écrire de programme) comment modier la fonction précédente pour qu'elle puisse mul- tiplier des polynômesP et Qde degrés éventuellement distincts.

d) En notant T(n) le coût de calcul du produit P Q, montrer qu'il existe un algorithme qui permet d'aboutir à la relation de récurrence

T(n) = 3T(n/2) + Θ(n).

4.On écritΘ(n) =an, oùa >0est une constante. On est ainsi ramené à résoudre l'équation fonctionnelle T(1) = 1, T(n) = 3T(n/2) +an,∀n>2.

a)Soitβ un réel. En posantuk = 2−βkT(2k), écrire la relation de récurrence entre uk etuk−1. b)Pour quelle valeur de β cette relation est-elle de la formeuk =uk−1+K2αk?

Préciserer alors la valeur des constantesKetαen fonction dea etβ.

Lycée Stanislas A. Camanes

(2)

T.D. 4. Diviser pour régner MPSI 1 & 2

c)En déduire l'expression deuk en fonction de k, puis l'expression deT(n)en fonction de n, lorsque n= 2k est une puissance de2.

d)En déduire une expression deT(n)lorsquen→ ∞sous une formeΘ(·). e)Conclure.

Exercice 4. (Algorithme de Strassen, 1969)Les matrices seront dénies en lignes et représentées par des objets de type 'a array array

1.Évaluer la complexité d'un algorithme naïf de multiplication matricielle en nombre de multiplications scalaires, puis en nombre d'additions.

En 1969, Strassen a conçu un algorithme permettant de faire mieux asymptotiquement. Pour cela, il a remarqué que multiplier deux matrices d'ordre 2 permet de se faire à l'aide de 7 multiplications et 18 additions. En eet, si

A=

a11 a12

a21 a22

etB=

b11 b12

b21 b22

,

alors

AB=

m1+m4−m5+m7 m3+m5

m2+m4 m1+m3−m2+m6

,

m1= (a11+a22)(b11+b22) m2= (a21+a22)b11 m3=a11(b12−b22) m4=a22(b21−b11)

m5= (a11+a12)b22

m6= (a21−a11)(b11+b12) m7= (a12−a22)(b21+b22)

2.Écrire les formules de récurrences satisfaites par le nombre de multiplications Mn et le nombre d'ad- ditionsAn nécessaires pour multiplier des matrices d'ordren.

3.On suppose quen= 2k est une puissance de2. a)DéterminerMn.

b)En étudiant la suite(M2k/7k), déterminer une majoration deMn.

Lycée Stanislas A. Camanes

Références

Documents relatifs

Ce nom risque de vous induire en erreur : si le tri par pivot est effecti- vement très rapide en pratique dans les meilleurs cas, il est en pratique délicat à mettre en œuvre si on

Vous trouverez dans le fichier lance_tests.py les commandes permettant de générer les douze combinaisons possibles (quatre méthodes pour générer un tableau, trois fonctions de

Pour lire les données dans l’ordre croissant, il faut partir de la référence minimale, l’indice 9, soit la valeur 0, et lire les « indices suivants » : l’indice 3, qui vaut

3) Combiner : les deux sous-listes triées sont alors combinées de sorte à ce que la liste résultat soit triée... Il nécéssite de l’ordre de n log(n) comparaisons/affectations

Lorsqu’une base de données est très volumineuse et non ordonnée, trouver une information dans cette base est très long et très ingrat.. En effet la seule solution est

Or pour que l’élément de rang i et l’élément de rang j soient comparés il faut que le pivot ne soit jamais choisi entre l’élément de rang i et de rang j avant le choix de i ou

• Idée : trouver le plus petit et le placer en premier puis trouver le plus petit parmi les éléments non placés et le placer en.

On construit alors deux « sous-tableaux » : l'un contient toutes les valeurs du premier tableau qui sont inférieures ou égales au pivot, l'autre contient les valeurs supérieures