Algorithmique Cours 3 : Diviser pour régner, théorème maître. ROB3 année

Documents pareils
1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

2.4 Représentation graphique, tableau de Karnaugh

1S Modèles de rédaction Enoncés

3 ème 2 DÉVELOPPEMENT FACTORISATIONS ET IDENTITÉS REMARQUABLES 1/5 1 - Développements

AC AB. A B C x 1. x + 1. d où. Avec un calcul vu au lycée, on démontre que cette solution admet deux solutions dont une seule nous intéresse : x =

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Chapitre 7. Récurrences

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

315 et 495 sont dans la table de 5. 5 est un diviseur commun. Leur PGCD n est pas 1. Il ne sont pas premiers entre eux

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

IFT1215 Introduction aux systèmes informatiques

Algorithmes de Transmission et de Recherche de l Information dans les Réseaux de Communication. Philippe Robert INRIA Paris-Rocquencourt

CHAPITRE VIII : Les circuits avec résistances ohmiques

CORRECTION EXERCICES ALGORITHME 1

Licence Sciences et Technologies Examen janvier 2010

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

2. RAPPEL DES TECHNIQUES DE CALCUL DANS R

Le théorème de Thalès et sa réciproque

Représentation d un entier en base b

PROBLEME(12) Première partie : Peinture des murs et du plafond.

FONCTION COMPTAGE BINAIRE ET DIVISION DE FRÉQUENCE

CONJUGUÉ D'UN POINT PAR RAPPORT À UN TRIANGLE

L ALGORITHMIQUE. Algorithme

Les droites (d 1 ) et (d 2 ) sont sécantes en A Le point A est le point d intersection des 2 droites

Première partie. Préliminaires : noyaux itérés. MPSI B 6 juin 2015

Cours d Informatique

Quelques contrôle de Première S

Limites finies en un point

Le seul ami de Batman

Note de cours. Introduction à Excel 2007

CH.6 Propriétés des langages non contextuels

Logique binaire. Aujourd'hui, l'algèbre de Boole trouve de nombreuses applications en informatique et dans la conception des circuits électroniques.

Cours d Analyse. Fonctions de plusieurs variables

TP Bases de données réparties

Cours Premier semestre

Activités numériques [13 Points]

ARBRES BINAIRES DE RECHERCHE

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

DOCM Solutions officielles = n 2 10.

CORRIGE LES NOMBRES DECIMAUX RELATIFS. «Réfléchir avant d agir!»

4. Les structures de données statiques

«Aucune investigation humaine ne peut être qualifiée de science véritable si elle ne peut être démontrée mathématiquement.

Algèbre binaire et Circuits logiques ( )

Chapitre 2. Matrices

Continuité et dérivabilité d une fonction

Chapitre 6. Fonction réelle d une variable réelle

Programmation Par Contraintes

LE RESEAU GLOBAL INTERNET

Formats d images. 1 Introduction

CHAPITRE 2 SYSTEMES D INEQUATIONS A DEUX INCONNUES

Présentation du cours de mathématiques de D.A.E.U. B, remise à niveau

Chapitre 14. La diagonale du carré

Développer, factoriser pour résoudre

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

Résolution de systèmes linéaires par des méthodes directes

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

3. Conditionnement P (B)

Les opérations binaires

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

MANUEL D INSTALLATION ET D UTILISATION DU PVR

Introduction au maillage pour le calcul scientifique

Introduction à la théorie des graphes. Solutions des exercices

Présentation du programme d automatisation du bâtiment

Exercice 6 Associer chaque expression de gauche à sa forme réduite (à droite) :

MIS 102 Initiation à l Informatique

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Enoncé et corrigé du brevet des collèges dans les académies d Aix- Marseille, Montpellier, Nice Corse et Toulouse en Énoncé.

Compter à Babylone. L écriture des nombres

Corrigés Exercices Page 1

Priorités de calcul :

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

INF 232: Langages et Automates. Travaux Dirigés. Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies

Le Système d Information Routier

Gestion de Projet. Génie Logiciel. Renaud Marlet. LaBRI / INRIA. (d'après A.-M. Hugues) màj 19/04/2007

Déclarer un serveur MySQL dans l annuaire LDAP. Associer un utilisateur DiaClientSQL à son compte Windows (SSO)

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

CHAPITRE 10. Jacobien, changement de coordonnées.

Les Angles. I) Angles complémentaires, angles supplémentaires. 1) Angles complémentaires. 2 Angles supplémentaires. a) Définition.

Algorithmique et Programmation Fonctionnelle

Représentation des Nombres

Angles orientés et trigonométrie

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Les devoirs en Première STMG

Exprimer ce coefficient de proportionnalité sous forme de pourcentage : 3,5 %

Algorithmique et Programmation

Date : Tangram en carré page

INFORMATIONS DIVERSES

Deux disques dans un carré

Brevet 2007 L intégrale d avril 2007 à mars 2008

Calculateur quantique: factorisation des entiers

Structures algébriques

Informatique Générale

Fonctions homographiques

Quelques Algorithmes simples

Programmation linéaire

Cours Informatique 1. Monsieur SADOUNI Salheddine

Transcription:

Algorithmique Cours 3 : Diviser pour régner, théorème maître ROB3 année 2014-2015

Résumé des épisodes précédents On s'est intéressé au comptage des lapins, via le calcul du n ème terme de la suite de Fibonacci : algorithme Fib1 de complexité O(2 0.694n ) algorithme Fib2 de complexité O(n 2 ) Algorithme Fib3 matriciel : La complexité de Fib3 est équivalente à la complexité de multiplication de deux entiers de n bits. On cherche donc à concevoir un algorithme de multiplication de complexité O(n α ) avec α < 2.

Diviser pour régner Pour concevoir des algorithmes plus rapides : DIVISER un problème en sous-pbs plus petits RESOUDRE les sous-problèmes récursivement FUSIONNER les réponses aux sous-pbs afin d'obtenir la réponse au problème de départ

Application à la multiplication n bits X = a X b Y = c Y d n/2 bits n/2 bits X = a 2 n/2 + b Y = c 2 n/2 + d X Y = ac 2 n + (ad + bc) 2 n/2 + bd Pour simplifier la présentation, mais sans perte de généralité, on suppose que n est une puissance de 2.

Application à la multiplication n bits X = Y = a c n/2 bits b d n/2 bits X Y = ac 2 n + (ad + bc) 2 n/2 + bd fonction mult(x,y) Entrée: Deux entiers x et y sur n bits Sortie: Leur produit si n = 1 retourner xy sinon partitionner x en a,b et y en c,d retourner mult(a,c)2 n + (mult(a,d)+ mult(b,c))2 n/2 + mult(b,d)

Ce qui donne en décimal n bits X = Y = a c n/2 bits b d n/2 bits X = a 10 n/2 + b Y = c 10 n/2 + d X Y = ac 10 n + (ad + bc) 10 n/2 + bd

Exemple (en décimal) 12345678 * 21394276 1234*2139 1234*4276 5678*2139 5678*4276 12*21 12*39 34*21 34*39 1*2 1*1 2*2 2*1 2 1 4 2 Ainsi : 12*21 = 2*10 2 + (1 + 4)10 1 + 2 = 252 X = a b Y = c d X Y = ac 10 n + (ad + bc) 10 n/2 + bd

Exemple (en décimal) 12345678 * 21394276 1234*2139 1234*4276 5678*2139 5678*4276 252 468 714 1326 *10 4 + *10 2 + *10 2 + *1 = 2639526 X = a b Y = c d X Y = ac 10 n + (ad + bc) 10 n/2 + bd

Exemple (en décimal) 12345678 * 21394276 1234*2139 2639526 1234*4276 5276584 5678*2139 121452425678*4276 24279128 *10 8 + *10 4 + *10 4 + *1 = 264126842539128 X = a b Y = c d X Y = ac 10 n + (ad + bc) 10 n/2 + bd

Arbre des appels récursifs T(n) n 4(n/2) 16(n/4) T(n / 2 k ) 4 k (n / 2 k ) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) 4 lg n (1) A chaque niveau k de l'arbre, il y a 4 k nœuds.

Calculs en un nœud T(n/2 k ) X = Y = a c n/2 k+1 bits n/2 k bits b d n/2 k+1 bits X Y = ac 2 n/2 + (ad + bc) 2 n/2 k k+1 + bd A un nœud T(n/2 k ), on réalise une multiplication par 2 n/2 (n/2 k décalages vers la gauche), une autre par 2 n/2 k+1, et trois additions avec des nombres comportant au plus n/2 k-1 bits, soit : O(n/2 k ) opérations élémentaires k

Arbre des appels récursifs T(n) n 4(n/2) 16(n/4) T(n / 2 k ) 4 k (n / 2 k ) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) 4 lg n (1) log 2 n T ( n)= k=0 4 k ( n log ) 2 n = 2 k k=0 n ( 4 2 ) k =n (2 log 2 n+1 1)=n(2 n 1)

Arbre des appels récursifs T(n) n 4(n/2) 16(n/4) T(n / 2 k ) 4 k (n / 2 k ) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) 4 lg n (1) Complexité en O(n 2 )

Question Soient deux nombres complexes a+bi et c+di Leur produit : (a+bi)(c+di) = [ac-bd] + [ad+bc]i Entrée : a, b, c, d Sortie : ac-bd, ad+bc Si la multiplication de deux nombres coûte 1 et leur addition coûte 1 centime, quelle est la façon la moins coûteuse d'obtenir la sortie à partir de l'entrée? Pouvez-vous faire mieux que 4.03?

La solution de Gauss à 3.05 Entrée : Sortie : a,b,c,d ac-bd, ad+bc 1 centime : 1 centime : 1 : 1 : 1 : 1 centime : 1 centime : P 1 = a + b P 2 = c + d P 3 = P 1 P 2 = ac + ad + bc + bd P 4 = ac P 5 = bd P 6 = P 4 P 5 = ac - bd P 7 = P 3 P 4 P 5 = bc + ad Carl Friedrich Gauss 1777-1855

mult gaussifiée (Karatsuba, 1962) X = Y = a c n bits b d n/2 bits n/2 bits X Y = ac 2 n + (ad + bc) 2 n/2 + bd fonction mult2(x,y) Entrée: Deux entiers x et y sur n bits Sortie: Leur produit si n = 1 retourner xy sinon partitionner x en a,b et y en c,d Anatolii Alexeevich Karatsuba, 1937-2008 P3= mult(a+b,c+d); P4= mult(a,c); P5= mult(b,d) retourner P4.2 n + (P3-P4-P5).2 n/2 + P5

mult2 : arbre des appels récursifs T(n) n 3(n/2) 9(n/4) T(n / 2 k ) 3 k (n / 2 k ) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) 3 lg n (1) log 2 n T ( n)= k=0 n ( 3 2 ) k =n ( 3 2 ) 1+ log 2 n 1 n(( =2 3 ) log 3 2 1 2 2 n 3 2 1 ) =2 n ( nlog 3 2 2 3 2 1 ) =3 nlog 2 3 2 n

mult2 : arbre des appels récursifs T(n) n 3(n/2) 9(n/4) T(n / 2 k ) 3 k (n / 2 k ) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) 3 lg n (1) Complexité : 3 n log 23 2 n O (n 1,58 ) car log 2 3=1,58

O(n 1,58 ) << O(n 2 ) n 2 n 1,58 Grâce à mult2, on a donc un algorithme de complexité O(n 1.58 ) pour compter les lapins!

Bref : diviser pour régner DIVISER le problème en a sous-pbs de taille n/b RESOUDRE les sous-problèmes récursivement FUSIONNER les réponses aux sous-pbs en O(n d ) afin d'obtenir la réponse au problème de départ A partir de la connaissance des valeurs des paramètres a, b et d, le théorème maître permet de déterminer «automatiquement» la complexité d'une méthode de type diviser pour régner.

Théorème maître Les algorithmes de type «diviser pour régner» résolvent a souspbs de taille n/b et combinent ensuite ces réponses en un temps O(n d ), pour a,b,d > 0 Leur temps d'exécution T(n) peut donc s'écrire : T(n) = at(n/b) + O(n d ) («n/b» signifiant ici partie entière inférieure ou supérieure de n/b) Le terme général est alors : Ce théorème permet de déterminer la complexité de la plupart des algorithmes de type «diviser pour régner».

Preuve T(n) a branches n Hauteur log b n T(n/b) T(n/b) T(n/b) a(n/b) T(n/b 2 ) T(n/b 2 ) T(n/b 2 ) T(n/b 2 ) T(n/b 2 ) T(n/b 2 ) T(n/b 2 ) T(n/b 2 ) T(n/b 2 ) a 2 (n/b 2 ) T(n / b k ) a k (n / b k ) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) a lg n (1) Largeur a log b n = n log b a k k Le niveau k est composé de a sous-problèmes, chacun de taille n/b

Preuve Sans perte de généralité, on suppose que n est une puissance de b. Le niveau k est composé de a k sous-problèmes, chacun de taille n/b k. Le travail total réalisé à ce niveau est : Comme k varie de 0 (racine) à log b n (feuilles), ces nombres forment une suite géométrique de raison a/b d Trois cas : La raison est inférieure à 1 : la suite est décroissante et la somme des termes est du même ordre de grandeur que le premier terme, soit O(n d ) La raison est supérieure à 1 : la suite est croissante et la somme des termes est du même ordre de grandeur que le dernier terme, soit O(n log a ) : La raison est exactement 1 : dans ce cas les O(log n) termes de la suite sont égaux à O(n d )

Le théorème «marche» bien Pour T(n) = at(n/b) + O(n d), le terme général est : Algorithme mult : T(n) = 4 + O(n) a=4, b=2, d=1 et donc 1<2=log 2 4 O(n log 4 )=O(n 2 ) Algorithme mult2 : T(n) = 3 + O(n) a=3, b=2, d=1 et donc 1<1,58 log 2 4 O(n log 4 )=O(n 1,58 )