Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parBenjamin Michel Lanthier Modifié depuis plus de 6 années
1
Algorithmique Avancée et Complexité Chap3:Diviser pour Régner
Université Abou Bakr Belkaid Faculté des Sciences Département d’informatique Algorithmique Avancée et Complexité Chap3:Diviser pour Régner RSD -GL 1
2
Principe Diviser : le problème en un certain nombre de sous-problèmes . Régner : sur les sous-problèmes en les résolvant récursivement , si la taille d’un sous-problème est assez réduite,le résoudre directement ; Combiner : les solutions des sous-problèmes en une solution complète du problème initial. 2
3
Exemple Algorithme Classique MULTIPLIER-MATRICES(A, B)
Soit n la taille des matrices carrés A et B Soit C une matrice carré de taille n Algorithme Classique Pour i =1 à n faire Pour j= 1 à n faire cij:= 0 Pour k =1 à n faire cij:= cij+ aik bkj renvoyer C La complexité de cet algorithme est θ(n3) .
4
Exemple :multiplication naïve de matrices
Algorithme « diviser pour régner » on suppose que n est une puissance exacte de 2. on décompose les matrices A, B et C en sous-matrices de taille n/2*n/2. L’équation C = A*B peut être ecrit: aprés développement de cette équation, nous obtenons : Puisque l’addition des matrices carrés de taille n/2 est Q(n2). 4
5
Complexité La complexité d’un algorithme « diviser pour régner » se décompose suivant les trois étapes du paradigme de base : 1. Si la taille du problème est suffisamment réduite, n c pour une certaine constante c, la résolution est directe et consomme un temps constant Q (1) 2. Sinon, on divise le problème en a sous-problèmes chacun de taille 1/b de la taille du problème initial. Le temps d’exécution total se décompose alors en trois parties : (a) D(n) : le temps nécessaire à la division du problème en sous-problèmes. (b) aT(n/b) : le temps de résolution des a sous-problèmes. (c) C(n) : le temps nécessaire pour construire la solution finale à partir des solutions aux sous-problèmes.
6
Complexité La relation de récurrence prend alors la forme :
où l’on interprète n/b soit comme ,soit comme
7
Complexité
8
Exemple1 multiplication naïve de matrices a=8,b=2 f(n) =θ(n²)
Appliquons le théorème précédent: log ba=3 cas 1 ξ =1 T(n)= θ(n3) donc rien ne change
9
Exemple1 Donc meilleur que l’algorithme classique
Algorithme de Strassen pour la multiplication de matrices p1 = a(g – h) p2 = (a + b)h p3 = (c + d)e p4 = d(f - e) p5 = (a + d)(e + h) p6 = (b - d)(f + h) p7 = (a - c)(e + g) r = p5 + p4 - p2 + p6 s = p1 + p2 t = p3 + p4 u = p5 + p1-p3 - p7 7 multiplication et 18 addition T(n) = 7T(n/2)+θ(n²). T(n)= θ (nlog27) ~ θ (n2.8 ) Donc meilleur que l’algorithme classique
10
Exemple Tri par fusion Principe
L’algorithme de tri par fusion est construit suivant le paradigme « diviser pour régner » : 1. Il divise la séquence de n nombres à trier en deux sous-séquences de taille n/2. 2. Il trie récursivement les deux sous-séquences. 3. Il fusionne les deux sous-séquences triées pour produire la séquence complète triée. La récursion termine quand la sous-séquence à trier est de longueur 1 car une telle séquence est toujours triée.
11
Exemple Tri par fusion Diviser Fusionner
12
Exemple Tri par fusion FUSIONNER(A, p, q, r) i :=p j :=q+1
Soit C un tableau de taille r- p+1 K:= 1 tant que i≤ q et j ≤ r faire si A[i] < A[ j] alors C[k] :=A[i] i :=i+1 sinon C[k] :=A[ j] J:= j+1 K:= k+1 tant que i ≤ q faire C[k]:= A[i] tant que j ≤ r faire C[k] :=A[ j] j :=j+1 k :=k+1 pour k :=1 à r- p+1 faire A[p+k-1] :=C[k]
13
Exemple Tri par fusion Étudions les différentes étapes de l’algorithme : – les initialisations ont un coût constant θ(1) ; – la boucle tant que de fusion s’exécute au plus r- q fois, chacune de ses itérations étant de coût constant, d’où un coût total en θ(r-q) ; – les deux boucles tant que complétant C ont une complexité respective au pire de q- p+1 et de r-q, ces deux complexités étant en θ(r- p) ; – la recopie finale coûte θ(r- p+1). Par conséquent, l’algorithme de fusion a une complexité en θ(n)
14
Complexité Tri par fusion
Pour déterminer la formule de récurrence qui nous donnera la complexité de l’algorithme TRI-FUSION, nous étudions les trois phases de cet algorithme « diviser pour régner » : Diviser : cette étape se réduit au calcul du milieu de l’intervalle [p..r] sa complexité est donc en θ(1). Régner : l’algorithme résout récursivement deux sous-problèmes de tailles respectives n/2 Combiner : la complexité de cette étape est celle de l’algorithme de fusion qui est de θ(n) pour la construction d’un tableau solution de taille n.
15
Complexité Tri par fusion
Par conséquent, la complexité du tri par fusion est donnée par la récurrence : Pour déterminer la complexité du tri par fusion, nous utilisons de nouveau le théorème. Ici a=2 et b=2 donc logba =1, et nous nous trouvons dans le deuxième cas du théorème par conséquent :
16
Complexité Tri par fusion
Pour des valeurs de n suffisamment grandes, le tri par fusion avec son temps d’exécution en Q(nlogn)est nettement plus efficace que le tri par insertion dont le temps d’exécution est en Q(n2).
17
AVANTAGES ET INCONVÉNIENTS
L'avantage résolution des pièces plus réduites du même problème par le même code. dépassement des ressources autorisées. Le temps d'exécution est plus long à cause de sauvegarde et de récupération des tâches sur la pile.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.