Notations Asymptotiques Et Complexit l Notations asymptotiques 0

  • Slides: 97
Download presentation
Notations Asymptotiques Et Complexité l Notations asymptotiques : 0 et l Complexité des algorithmes

Notations Asymptotiques Et Complexité l Notations asymptotiques : 0 et l Complexité des algorithmes l Exemples de calcul de complexité 1

Complexités d ’un algorithme l Un algorithme à partir d ’une donnée établit un

Complexités d ’un algorithme l Un algorithme à partir d ’une donnée établit un résultat. l La taille de la donnée est mesurée par un entier n. ¡ complexité temporelle une fonction de n qui mesure le temps de calcul pour une donnée de taille n ¡ complexité en mémoire 2

Complexités temporelles l Dans le pire des cas : donne une borne sur le

Complexités temporelles l Dans le pire des cas : donne une borne sur le temps de calcul pour toute donnée de taille n l En moyenne : fait la moyenne des temps de calculs pour toutes les données de taille n 3

Mesure-t-on vraiment le temps de calcul ? l Non, car le temps de calcul

Mesure-t-on vraiment le temps de calcul ? l Non, car le temps de calcul dépend de la machine. l Mesures effectuées à une constante multiplicative près l Terme dominant 4

Définitions l On dit que f est du même ordre de grandeur que g

Définitions l On dit que f est du même ordre de grandeur que g et l'on note f = (g) lorsque f=O(g) et g=O(f). l On dit que f est dominée par g (noté f= O (g)) lorsque 5

Définitions l f est négligeable devant g, (noté f =o(g)) lorsque f(n)/g(n) tend vers

Définitions l f est négligeable devant g, (noté f =o(g)) lorsque f(n)/g(n) tend vers 0 quand n tend vers l'infini l On dit que f est équivalente à g lorsque f(n)/g(n) tend vers 1 lorsque n tend vers l'infini 6

Polynômes et notations O et l Soit P (n) un polynôme en n. Pour

Polynômes et notations O et l Soit P (n) un polynôme en n. Pour quelles valeurs de p a-ton P(n)=O(np)? Pour quelles valeurs de p a-t-on P(n)= (np)? 7

l Montrer que pour tout entier k, on a 8

l Montrer que pour tout entier k, on a 8

Échelle De Comparaison l Exercice Soient les fonctions f 1(n)=n, f 2(n)=2 n, f

Échelle De Comparaison l Exercice Soient les fonctions f 1(n)=n, f 2(n)=2 n, f 3(n)=n 2, f 4(n)=2 n, f 5(n)=nn, f 6(n)=log n, f 7(n)=n!, f 8(n)= nlogn Pour chaque couple i, j, dire si l’on a fi=o( fj), fi=O( fj), fi= ( fj). 9

109 Instructions/secondes 10

109 Instructions/secondes 10

En Une Journée on Peut Aller Jusqu’à ? 11

En Une Journée on Peut Aller Jusqu’à ? 11

Et En Un an ? 12

Et En Un an ? 12

Pourquoi Utiliser O Et Pour Mesurer Des Complexités? l Expressions à une constante multiplicative

Pourquoi Utiliser O Et Pour Mesurer Des Complexités? l Expressions à une constante multiplicative près, indépendante du temps de calcul d ’une instruction de base l Toute instruction de base prend un temps un l Terme dominant uniquement donc expression simple 13

n, C’est quoi? l La complexité s’exprime en fonction de la taille de la

n, C’est quoi? l La complexité s’exprime en fonction de la taille de la donnée l A vous de dire quelle fonction taille vous avez choisie l Et la donnée c’est quoi ? 14

Règle 1 Composition Séquentielle l I 1 complexité temporelle en (f 1(n)) l I

Règle 1 Composition Séquentielle l I 1 complexité temporelle en (f 1(n)) l I 2 complexité temporelle en (f 2(n)) Le bloc d’instructions I 1 ; I 2 a une complexité temporelle en (max(f 1 (n), f 2 (n)) 15

Règle 2 If Else l Évaluation de C est en (f(n)) l De I

Règle 2 If Else l Évaluation de C est en (f(n)) l De I 1 en (f 1 (n)), de I 2 en (f 2 (n)) Alors la complexité de l’instruction if C I 1 else I 2 ; est en O(max(f(n), f 1 (n), f 2 (n)) 16

Règle 3 Boucle for l I 1 a une complexité temporelle en (f 1

Règle 3 Boucle for l I 1 a une complexité temporelle en (f 1 (n)) l I 1 n’a aucun effet sur les variables i et n. La complexité temporelle de la boucle for (int i=1 ; i< = n ; i++){ I 1 } est en (n(f 1 (n)) 17

l Si une instruction I se trouve au cœur de k boucles for imbriquées,

l Si une instruction I se trouve au cœur de k boucles for imbriquées, chacune d'elle de la forme for (int i=1 ; i < n ; i++), combien de fois l'instruction I est elle exécutée ? 18

l Si une instruction I se trouve au cœur de k boucles for imbriquées,

l Si une instruction I se trouve au cœur de k boucles for imbriquées, chacune d'elle de la forme l for (int ij=1 ; ij < ij-1 ; i++), (avec i 0=n), combien de fois l'instruction I est elle exécutée ? 19

Règle 4 Boucle While l Évaluation de C en (f 1 (n)) l I

Règle 4 Boucle While l Évaluation de C en (f 1 (n)) l I en (f 2 (n)) l Boucle while est exécutée (g(n)) while C {I} est en (g(n)*max(f 1 (n), f 2 (n))) 20

Estimer les complexités des morceaux de codes suivants, sachant que et l’ instruction est

Estimer les complexités des morceaux de codes suivants, sachant que et l’ instruction est en (1) et ne modifie pas les entiers i, j, k et n for (int i=1 ; i < n ; i++) { for (int j=i+1 ; j <=n ; j++) { for ( int k=1 ; k <=j ; k++) { I 1 } } } 21

Estimer les complexités des morceaux de codes suivants, sachant que et les instructions. I

Estimer les complexités des morceaux de codes suivants, sachant que et les instructions. I 1, I 2, I 3 sont en (1) et ne modifie pas les entiers i, j, k et n int i=1 ; int j =1 ; while (i <n) { i++ ; I 1 ; while (( j < n) && Condition) { j++ ; I 2 } ; I 3 ; } 22

Règle 5 Composition De Méthodes l Methode 1 (classe 1 c 1) en O(f

Règle 5 Composition De Méthodes l Methode 1 (classe 1 c 1) en O(f 1 (taille 1 (c 1)) l Methode 2 ( classe 2 c 2) en O(f 2 (taille 2 (c 2)) l Methode 2 renvoie un objet de classe 1 La complexité de methode 1 (methode 2 ( c 2)) est en O(max (f 2 (taille 2 (c 2)) , f 1 (taille 1 (méthode 2 (c 2)))) 23

On connaît l'écriture d'un nombre en base b, et l'on veut convertir ce nombre

On connaît l'écriture d'un nombre en base b, et l'on veut convertir ce nombre en basse usuelle (10). 1. On utilise la méthode "direct". Quelle en est la complexité? public int direct ( int[] a, int b){ int résultat =a[0] ; int auxiliaire ; for (int rang= 1 ; rang < a. length ; rang++){ if (a[rang] != 0) { auxiliaire = a[rang] ; for (int indice =1 ; indice <=rang ; indice ++){ auxiliaire = auxiliaire *b ; } résultat = résultat + auxiliaire; } return résultat ; } 24

Prouvez que la méthode suivante dite de Horner, effectue bien le même travail. Quelle

Prouvez que la méthode suivante dite de Horner, effectue bien le même travail. Quelle en est la complexité public int horner ( int[] a, int b) { int n = a. length ; int résultat =a[n-1] ; for (int rang = n-2 ; rang >= 0 ; rang--){ résultat = b* résultat +a[rang] ; } return résultat ; } 25

On désire élever l'entier a à la puissance n . Quelle est la complexité

On désire élever l'entier a à la puissance n . Quelle est la complexité de la méthode suivante? public int puissance (int n, int a) { int résultat = a ; for(int i =1 ; i <n ; i++){ résultat=résultat*a ; } return résultat ; } 26

Montrez que le code suivant est correct. Quel en est la complexité ? public

Montrez que le code suivant est correct. Quel en est la complexité ? public int puissance (int n, int a) { int aux = n ; int puissancedea=a ; int résultat=1 ; while ( aux !=0) { if (aux mod 2 = = 1) résultat =résultat * puissancedea ; aux=aux/2 ; puissancedea = puissancedea * puissancedea ; } return résultat ; } 27

Programmation récursive l Quelques exemples l Equations de récurrences l Quelques méthodes de résolution

Programmation récursive l Quelques exemples l Equations de récurrences l Quelques méthodes de résolution 28

Recherche dichotomique du plus grand élément l L contient N éléments l Algorithme (récursif)

Recherche dichotomique du plus grand élément l L contient N éléments l Algorithme (récursif) ¡ Si L contient un seul élément c ’est fini ¡ Sinon : Couper L en deux listes L 1 et L 2 de taille presque identiques l Chercher m 1 le max de L 1 l Chercher m 2 le max de L 1 l Comparer m 1 et m 2 l 29

Combien de comparaisons ? l c(1)=0 l c(n) = c( n/2 )+1 30

Combien de comparaisons ? l c(1)=0 l c(n) = c( n/2 )+1 30

Déterminez la complexité de la méthode suivante int factorial(int n) { if (n ==

Déterminez la complexité de la méthode suivante int factorial(int n) { if (n == 0) return 1; else return (n*factorial(n-1)); } 31

Méthode factorielle l Soit c(n) la nombre de multiplications effectuées dans le calcul de

Méthode factorielle l Soit c(n) la nombre de multiplications effectuées dans le calcul de factoriel(n). l On a c(n)=c(n-1)+1, c(1)=0 32

Recherche du maximum dans une table de n éléments l Si n=1, renvoyer l’unique

Recherche du maximum dans une table de n éléments l Si n=1, renvoyer l’unique élément l Sinon calculer recursivement le maximum des n-1 premiers élements. Le comparer avec le dernier élément, renvoyer le plus grand des deux. 33

Analyse : nombres de comparaisons effectuées l C(n)= complexité de la recherche du plus

Analyse : nombres de comparaisons effectuées l C(n)= complexité de la recherche du plus grand parmi n l c(n)=c(n-1)+1 l c(1)=0 34

Trier une table de n éléments l Si n=1 rien à faire l Sinon

Trier une table de n éléments l Si n=1 rien à faire l Sinon ¡ recher le maximum de la table ¡ échanger le maximum et le dernier élément ¡ trier la sous-table constituée des n -1 premiers éléments 35

l c(n)=c(n-1)+an+b l c(1)=1 36

l c(n)=c(n-1)+an+b l c(1)=1 36

Tours de Hanoi l Combien de mouvements au minimum pour déplacer une tour de

Tours de Hanoi l Combien de mouvements au minimum pour déplacer une tour de n disques 37

Tour de Hanoi class Towers { static int n. Disks=7; public static void main(String[]

Tour de Hanoi class Towers { static int n. Disks=7; public static void main(String[] args) {move. Towers(n. Disks, ’A’, ’B’, ’C’); } 38

public static void move. Towers (int n, char from, char inter, char to) {if

public static void move. Towers (int n, char from, char inter, char to) {if (n==1) System. out. println(“Disk 1 from”+from +”to”+to); else { move. Towers( n-1, from, to , inter); System. out. println(“Disk” +n+”from”+from +”to”+to); move. Towers( n-1, inter, from , to); } } } 39

Complexité de move. Towers l c(n)=2 c(n-1)+k (ou c(n)=2 c(n- 1)+1) l Donc c(n)=a

Complexité de move. Towers l c(n)=2 c(n-1)+k (ou c(n)=2 c(n- 1)+1) l Donc c(n)=a 2 n+b l C(n)= (2 n) 40

l On considère deux versions modifiées des tours de Hanoi. Dans chacun des cas,

l On considère deux versions modifiées des tours de Hanoi. Dans chacun des cas, on demande quel est le nombre minimum de déplacements de disques nécessaires. l La pile contient initialement 2 n disques, de n tailles différentes, il y a deux disques de chaque taille. Les disques de même taille sont indistinguables l La pile comporte n disques de tailles différentes, mais les 3 piquets sont sur un cercle et les mouvements doivent toujours se faire dans le sens des aiguilles d'une montre 41

Nombres De Fibonacci public int fibonacci (int n) { if (n= =0) return 0

Nombres De Fibonacci public int fibonacci (int n) { if (n= =0) return 0 ; else if (n= =1) return 1 ; else return fibonacci(n-1)+fibonacci(n-2) ; } 42

Analyse de la complexité l c(n)=c(n-1)+c(n-2)+1 l c(1)=c(0)=1 43

Analyse de la complexité l c(n)=c(n-1)+c(n-2)+1 l c(1)=c(0)=1 43

Complexité d’une méthode récursive …. . . …… résolution d’une équation de récurrence l

Complexité d’une méthode récursive …. . . …… résolution d’une équation de récurrence l Avec un outil de calcul formel (type maple) l Avec des théorèmes de maths 44

Récurrences linéaires l Définition: Une relation de récurrence linéaire homogène d’ordre k , à

Récurrences linéaires l Définition: Une relation de récurrence linéaire homogène d’ordre k , à coefficients constants est définie par une équation de la forme Le polynôme caractéristique associé est 45

Solutions d’une équation de récurrence linéaire d’ordre k l L’ensemble des solutions forme un

Solutions d’une équation de récurrence linéaire d’ordre k l L’ensemble des solutions forme un espace vectoriel de dimension k l Si r est racine du polynôme caractèristique alors est solution de l’équation. l Cas des racines multiples 46

Méthode du polynôme caractéristique l Soit E l’équation de récurrence . l Soient ri

Méthode du polynôme caractéristique l Soit E l’équation de récurrence . l Soient ri , les q racines du polynôme caractéristique de (E), ri ayant multiplicité mi. l Les solutions de (E) s’écrivent sous la forme où les sont des polynômes en n de degré mi-1. 47

Exemple l Détermine en fonction de u 0 et u 1, la suite telle

Exemple l Détermine en fonction de u 0 et u 1, la suite telle que l un=un-1 -2 un-2 48

Réponse 49

Réponse 49

Exercice l Utilisez la méthode du polynôme caractèristique pour résoudre l’équation de récurrence 50

Exercice l Utilisez la méthode du polynôme caractèristique pour résoudre l’équation de récurrence 50

Exercice l Chaque jour, pour mon goûter , je m’achète ou 2 F 4

Exercice l Chaque jour, pour mon goûter , je m’achète ou 2 F 4 F l Soit gn le nombre de choix de goûters possibles si l’on a n Francs ¡ Déterminer g 1, g 2, g 3 et g 4 ¡ Déterminer et résoudre l’équation de récurrence liant les gn 51

l Donnez l’ensemble des solutions des équations de récurrences suivantes : l un=2 un-1

l Donnez l’ensemble des solutions des équations de récurrences suivantes : l un=2 un-1 -un-2 l vn=vn-1+6 vn-2 52

l Déterminez la suite un , telle que des: l un=5 un-1 -8 un-2+4

l Déterminez la suite un , telle que des: l un=5 un-1 -8 un-2+4 un-3 l u 1=3, u 2=11, u 3=31 53

Equations non homogènes l Soit R l’équation non homogène l On lui associe l’équation

Equations non homogènes l Soit R l’équation non homogène l On lui associe l’équation homogène R’ l La différence entre deux solutions de R’ est une solution de R 54

Espace affine/ Espace vectoriel l Soit sn une solution particulière de R’. l Toute

Espace affine/ Espace vectoriel l Soit sn une solution particulière de R’. l Toute solution de R’ est obtenue à partir d’une solution de R en lui ajoutant sn 55

Une recette de cuisine l Si l’équation est de la forme il existe une

Une recette de cuisine l Si l’équation est de la forme il existe une solution particulière de la forme où Qi(n) est un polynôme de degré d(Pi)+mi 56

Exercices 57

Exercices 57

l Donnez l’ensemble des solutions des équations de récurrences suivantes : l un=3 un-1

l Donnez l’ensemble des solutions des équations de récurrences suivantes : l un=3 un-1 -2 un-2+n l vn=vn-1+6 vn-2+5 n l wn=wn-1+6 wn-2+3 n 58

l Résoudre l'équation de récurrence l un=3 un-1 -2 un-2+n, u 0=0, u 1=0

l Résoudre l'équation de récurrence l un=3 un-1 -2 un-2+n, u 0=0, u 1=0 59

l Soit somme. Factoriel, la fonction définie par Evaluer la complexité en nombre de

l Soit somme. Factoriel, la fonction définie par Evaluer la complexité en nombre de multiplications des méthodes récursives après 60

public int somme. Factoriel(int n) {int factorieln ; if (n<=1) {return n+1 }; else

public int somme. Factoriel(int n) {int factorieln ; if (n<=1) {return n+1 }; else { factorieln = n * (somme. Factoriel (n-1) – somme. Factoriel (n-2)) ; return somme. Factoriel (n-1) + factorieln ; } } 61

public int somme. Factoriel(int n) {int factorieln , somme ; if (n<=1) { return

public int somme. Factoriel(int n) {int factorieln , somme ; if (n<=1) { return n+1 }; else {somme = somme. Factoriel (n-1) ; factorieln = n * (somme– somme. Factoriel (n-2)) ; return somme + factorieln ; } } 62

public class Deux. Entiers { int somme ; int factoriel } Deux. Entiers factorielet.

public class Deux. Entiers { int somme ; int factoriel } Deux. Entiers factorielet. Somme. Factoriel (int n) { Deux. Entiers resultat ; if (n==0) { resultat. somme = 1 ; resultat. factoriel = 1 ; return resultat ; } ; else 63

 { resultat=factorielet. Somme. Factoriel (n-1) ; resultat. factoriel = n* resultat. factoriel ;

{ resultat=factorielet. Somme. Factoriel (n-1) ; resultat. factoriel = n* resultat. factoriel ; resultat. somme = resultat. somme+ resultat. factoriel ; return resultat ; } ; } public int somme. Factoriel (int n) { Deux. Entiers resultat ; resultat=factorielet. Somme. Factoriel (n) ; return resultat. somme ; } 64

Parmi les méthodes récursives vues en exemple quelles sont celles dont on peut maintenant

Parmi les méthodes récursives vues en exemple quelles sont celles dont on peut maintenant calculer la complexité? l Factorielle l Tri l Tours de Hanoi l Les nombres de Fibonnacci l Mais pas la recherche dichotomique 65

Le cas de Fibonacci l On obtient une complexité exponentielle pour la programmation récursive.

Le cas de Fibonacci l On obtient une complexité exponentielle pour la programmation récursive. l Il existe des programmations plus efficace du calcul du nième nombre de fibonacci. 66

Fibonacci V 2 public int fibonacci (int n ){ int f 0=0 ; int

Fibonacci V 2 public int fibonacci (int n ){ int f 0=0 ; int f 1=1 ; for ( int i =2 ; i < n ; i++){ f 1=f 0+f 1 ; // f 1 est le ième terme de la suite f 0 = f 1 -f 0 ; //f 0 est le i-1 ième terme de la suite } ; // f 1 est le nième terme de la suite pour tout n >0 if (n==0) return 0 ; else return f 1 ; } 67

Complexité de la V 2 l Cette fois la complexité est linéaire 68

Complexité de la V 2 l Cette fois la complexité est linéaire 68

Méthode Rapide l On utilise une autre relation d ’induction l On décompose n

Méthode Rapide l On utilise une autre relation d ’induction l On décompose n en base 2 l La suite d 0=1, di=2 di 1+decomposition(p-i), est telle que dp=n. On calcul les fdi. 69

Calcul Des Nombres De Fibonacci V 3 public int [] decompose (int n) {

Calcul Des Nombres De Fibonacci V 3 public int [] decompose (int n) { int p = log 2 n ; int auxiliaire = n ; int[p] decomposition ; for (int indice = 0 ; indice <p, indice ++) { decomposition[indice] = auxiliaire mod 2 ; auxiliaire = auxiliaire / 2; } return decomposition ; } 70

Calcul Des Nombres De Fibonacci V 3 public int fibonacci (int n) { int

Calcul Des Nombres De Fibonacci V 3 public int fibonacci (int n) { int a =0 ; int b =1 ; int p = log 2 n ; int auxiliaire ; int [p] decomposition = decompose (n) ; for (int indice =1 ; indice < = p ; indice++){ auxiliaire = a ; a = a*a + b*b; b=(2*auxiliaire+b)*b; if (c(p-indice)= =1 ) { b = a+b; a =b-a; } If (n= = 1) return 1 ; else return a ; } 71

Analyse de la version 3 l Cette fois la complexité est en log (n)

Analyse de la version 3 l Cette fois la complexité est en log (n) 72

Et la recherche dichotomique ? l On va considérer un cas plus général 73

Et la recherche dichotomique ? l On va considérer un cas plus général 73

Solutions de type diviser pour régner l Pour résoudre un problème de taille n

Solutions de type diviser pour régner l Pour résoudre un problème de taille n on divise le problème en a problèmes de taille n/b et chaque sous-problème est résolu récursivement l La phase de division et combinaison des résultats partiels a une complexité en f(n) 74

L ’équation de récurrence des solutions divise pour régner l T(1) = constante l

L ’équation de récurrence des solutions divise pour régner l T(1) = constante l T(n) = a T(n/b) + f(n) 75

Théorème l T(n) peut alors être borné asymptotiquement comme suit : l Si f(n)=

Théorème l T(n) peut alors être borné asymptotiquement comme suit : l Si f(n)= O(nlogba-e) pour une constante e>0, alors T(n) = (nlogba). l Si f(n)= (nlogba) , alors T(n) =O (logn nlogba). l Si f(n)=W(nlogba+e )pour une constante e>0, et si af(n/b) < cf(n) pour une constante c<1 alors T(n) = (f(n)) 76

Lemme 1 l T(n)=T(bk)= (nlogba)+ l Posons g(n)= 77

Lemme 1 l T(n)=T(bk)= (nlogba)+ l Posons g(n)= 77

Lemme 2 l Si f(n)= O(nlogba-e) pour une constante e>0, alors g(n))= O(nlogba). l

Lemme 2 l Si f(n)= O(nlogba-e) pour une constante e>0, alors g(n))= O(nlogba). l Si f(n)= (nlogba) , alors g(n) =O (logn nlogba). l Si af(n/b) < cf(n) pour une constante c<1 alors g(n) = (f(n)) 78

Si f(n)= O(nlogba-e) pour une constante e>0, alors g(n)= O(nlogba). l On a alors

Si f(n)= O(nlogba-e) pour une constante e>0, alors g(n)= O(nlogba). l On a alors g(n)= l Or 79

Exemple d’application du cas 1 l Recherche dichotomique du maximum l c(n)=2 c(n/2)+1 80

Exemple d’application du cas 1 l Recherche dichotomique du maximum l c(n)=2 c(n/2)+1 80

Si f(n)= (nlogba) , alors g(n) =O (logn nlogba). On obtient cette fois Or

Si f(n)= (nlogba) , alors g(n) =O (logn nlogba). On obtient cette fois Or 81

Exemple de ce cas l Le tri dichotomique l c(n)=2 c(n/2)+n 82

Exemple de ce cas l Le tri dichotomique l c(n)=2 c(n/2)+n 82

Si af(n/b) < cf(n) pour une constante c<1 alors g(n) = (f(n)) 83

Si af(n/b) < cf(n) pour une constante c<1 alors g(n) = (f(n)) 83

On se propose de multiplier entre eux des « grands nombres » . a)

On se propose de multiplier entre eux des « grands nombres » . a) Si l’on utilise la méthode naïve, combien de multiplications élémentaires sont effectuées ? 84

Soient U et V deux nombres de 2 n chiffres en base B. On

Soient U et V deux nombres de 2 n chiffres en base B. On peut donc écrire U=U 1 Bn+U 2 et V=V 1 Bn+ V 2 où U 1, U 2 , V 1, V 2 sont des nombres à n chiffres en base B. 85

b) On utilise l’égalité : (U 1 Bn +U 2 )(V 1 Bn+ V

b) On utilise l’égalité : (U 1 Bn +U 2 )(V 1 Bn+ V 2 )= U 1 V 1 B 2 n +(U 1 V 2 + U 2 V 1) Bn + U 2 V 2 pour calculer récursivement la multiplication. C’est à dire que l’on ramène le problème d’une multiplication de deux nombres de 2 n chiffres à celui de 4 multiplications de deux nombres de n chiffres, 4 décalages et trois additions. 86

On suppose qu’additions et décalages s’effectuent en (n). Etablir une relation de récurrence permettant

On suppose qu’additions et décalages s’effectuent en (n). Etablir une relation de récurrence permettant d’évaluer la complexité de cet algorithme récursif de multiplications et la résoudre. 87

c) On utilise maintenant l’égalité (U 1 Bn + U 2 )(V 1 Bn

c) On utilise maintenant l’égalité (U 1 Bn + U 2 )(V 1 Bn + V 2 )= U 1 V 1 B 2 n +((U 1 - U 2 )(V 2 - V 1 ) + U 2 V 2 + U 1 V 1 Bn + U 2 V 2 pour calculer récursivement la multiplication. C’est à dire que l’on ramène le problème d’une multiplication de deux nombres de 2 n chiffres à celui de 3 multiplications de deux nombres de n chiffres, 5 décalages et 6 additions. On suppose qu’additions et décalages s’effectuent en (n). Établir une relation de récurrence permettant d’évaluer la complexité de cet algorithme récursif de multiplications et la résoudre. 88

On se propose dans cet exercice de calculer la complexité de plusieurs algorithmes dont

On se propose dans cet exercice de calculer la complexité de plusieurs algorithmes dont le but est de fusionner les p listes triées de longueur n contenues dans un tableau de listes en une seule liste triée de longueur np. 89

On suppose définie une classe Liste contenant entre autre une méthode permettant de fusionner

On suppose définie une classe Liste contenant entre autre une méthode permettant de fusionner une liste l 1 triée de longueur n 1 et un liste triée l 2 de longueur n 2 dont la signature est public static Liste fusion (Liste l 1, Liste l 2) et la complexité est en (n 1+n 2). 90

Déterminer la complexité de cette méthode en fonction de n et de p. public

Déterminer la complexité de cette méthode en fonction de n et de p. public static Liste fusion. Multiple(Liste[] mes. Listes) { Liste L=mes. Listes[1]; for (int i=2; i < mes. Listes. length; i++){ L= Liste. fusion(L, mes. Listes[i]); } return L; } 91

On suppose maintenant que p est une puissance de 2 et l’on propose maintenant

On suppose maintenant que p est une puissance de 2 et l’on propose maintenant d’utiliser l’algorithme de multifusion récursif suivant : Pour multifusionner p listes de taille n Si p=2 utiliser fusion Sinon Multifusionner (récursivement) les p/2 première listes Multifusionner (récursivement ) les p/2 dernières listes Utiliser fusion pour fusionner le résultat des deux premières étapes. 92

Soit c(n, p) = la complexité de la fusion de p listes de taille

Soit c(n, p) = la complexité de la fusion de p listes de taille n par cette méthode. Déterminez la relation de récurrence suivie par cette suite, ainsi que c(n, 2). 93

Posez d(n, p)=c(n, p)/n. l Déterminez la relation de récurrence suivie par cette suite.

Posez d(n, p)=c(n, p)/n. l Déterminez la relation de récurrence suivie par cette suite. l Montrez que d(n, p) ne dépend pas de p. On pourra montrer par induction sur p que pour tout p >=2, d(n, p)=d(1, p) pour tout n >0. l Posez d(1, p)=f(p), et déterminez l’équation de récurrence suivie par f(p). Résoudre cette équation. En déduire c(n, p). l 94

l On considère le programme java récursif suivant où b est une constante entière

l On considère le programme java récursif suivant où b est une constante entière l On suppose défini un objet table à partir d’une classe Table dérivée de la classe Vector en y ajoutant la méthode table. echanger (int i, int j) qui échange table. element. At(i) et table. element. At(j). 95

public void T(int debut, int fin){ // opère sur la Table table dans la

public void T(int debut, int fin){ // opère sur la Table table dans la tranche table[debut. . fin] int n=fin-debut+1 ; //la dimension de la tranche if (n>1) { if (n=2) {// tri par ordre croissant des deux éléments de la tranche if (table. element. At(debut)>table. element. At( fin)) {table. echanger(debut, fin) ; }} else { T( debut, debut+n/b) ; T( fin-n/b, fin) ; T(debut, debut+n/b) ; } } 96

Etablir la relation de récurrence vérifiée par la complexité de cet algorithme l Si

Etablir la relation de récurrence vérifiée par la complexité de cet algorithme l Si b=3/2, (dans ce cas bien sûr l’algorithme utilise la partie entière de n/b) quelle en est la complexité ? l Question bonus : démontrer que si b=3/2, T est un tri l 97