Plan du cours. 1/ Rappels et compléments Java. 2/ Tableaux, boucles et invariants. 3/ Notions élémentaires de complexité. ICI. 4/ Récursion.

Documents pareils
ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

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

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

Limites finies en un point

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Architecture des Systèmes d Information Architecture des Systèmes d Information


Corrigé des TD 1 à 5

Chapitre 7. Récurrences

CCP PSI Mathématiques 1 : un corrigé

Les arbres binaires de recherche

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Organigramme / Algorigramme Dossier élève 1 SI

Algorithmique I. Algorithmique I p.1/??

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

1 Recherche en table par balayage

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

Algorithmique et Programmation

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Corrigé des exercices sur les références

Initiation à l algorithmique

Quelques Algorithmes simples

Java Licence Professionnelle CISII,

Algorithmes récursifs

Programmation C++ (débutant)/instructions for, while et do...while

Initiation à la programmation en Python

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

SUPPORT DE COURS. Dr. Omari Mohammed Maître de Conférences Classe A Université d Adrar Courriel : omarinmt@gmail.com

Algorithmique, graphes et programmation dynamique Notes de Cours Rapport de Travaux Pratiques. Laurent Canet

Programme Compte bancaire (code)

Image d un intervalle par une fonction continue

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

Définitions. Numéro à préciser. (Durée : )

Algorithmique, Structures de données et langage C

Rappels sur les suites - Algorithme

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

Conventions d écriture et outils de mise au point

ARBRES BINAIRES DE RECHERCHE

Recherche dans un tableau

Cours Informatique Master STEP

Introduction à MATLAB R

Comparaison de fonctions Développements limités. Chapitre 10

TD3: tableaux avancées, première classe et chaînes

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Les structures de données. Rajae El Ouazzani

Plan du cours. Historique du langage Nouveautés de Java 7

Continuité et dérivabilité d une fonction

Programmation linéaire

Algorithmique et structures de données I

Quantification Scalaire et Prédictive

Nouvelles propositions pour la résolution exacte du sac à dos multi-objectif unidimensionnel en variables binaires

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

Introduction au langage C

Algorithmique et Programmation, IMA

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Chapitre 3. Quelques fonctions usuelles. 1 Fonctions logarithme et exponentielle. 1.1 La fonction logarithme

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Solutions du chapitre 4

Calcul Formel et Numérique, Partie I

4. Les structures de données statiques

Initiation à LabView : Les exemples d applications :

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

Cours 1 : La compilation

Problèmes liés à la concurrence

Cours de Master Recherche

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Bases de programmation. Cours 5. Structurer les données

Découverte de Python

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

L ALGORITHMIQUE. Algorithme

Principes des langages de programmation INF 321. Eric Goubault

Langage Java. Classe de première SI

Programmer en JAVA. par Tama

Cours d algorithmique pour la classe de 2nde

Table des matières. I Mise à niveau 11. Préface

Équations non linéaires

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Cours Optimisation Partie Optimisation Combinatoire. Année scolaire Gérard Verfaillie ONERA/DCSD/CD, Toulouse

Examen Médian - 1 heure 30

Objets et Programmation. origine des langages orientés-objet

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

Projet de programmation (IK3) : TP n 1 Correction

Les algorithmes de base du graphisme

Quatrième partie IV. Test. Test 15 février / 71

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

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Résolution d équations non linéaires

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Cours d Algorithmique et de Langage C v 3.0

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

I. Polynômes de Tchebychev

CHAPITRE V. Recherche et tri

Maple: premiers calculs et premières applications

Chapitre VI - Méthodes de factorisation

2. Comprendre les définitions de classes

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

1. Langage de programmation Java

Transcription:

Plan du cours 1/ Rappels et compléments Java. 2/ Tableaux, boucles et invariants. 3/ Notions élémentaires de complexité. ICI 4/ Récursion. 5/ Structures de données et introduction aux types abstraits de données. 6/ Quelques compléments Java. 2009 2010 1 / 19

3/ Notions élémentaires de complexité. 2009 2010 2 / 19

Généralités Evaluer un algorithme Quels sont les critères pour caractériser un bon algorithme, un bon programme? 2009 2010 3 / 19

Généralités Evaluer un algorithme Quels sont les critères pour caractériser un bon algorithme, un bon programme? Réponses intuitives L algorithme est correct et est bien programmé (sans bugs, bien commenté, lisible, modulable,...). Il peut s exécuter rapidement ou en un temps raisonnable en utilisant peu de ressource en mémoire même si on augmente la taille des données à traiter : ce sont des thèmes centraux en théorie de la complexité des algorithmes. 2009 2010 3 / 19

Généralités Evaluer un algorithme Quels sont les critères pour caractériser un bon algorithme, un bon programme? Réponses intuitives L algorithme est correct et est bien programmé (sans bugs, bien commenté, lisible, modulable,...). Il peut s exécuter rapidement ou en un temps raisonnable en utilisant peu de ressource en mémoire même si on augmente la taille des données à traiter : ce sont des thèmes centraux en théorie de la complexité des algorithmes. Deux critères en complexité En fonction de la taille des données en entrée, on a deux questions fondamentales. 1/ Temps d exécution. Quel est le temps d exécution de l algorithme? 2/ Place mémoire. Quelle est la place mémoire nécessaire pour son exécution? 2009 2010 3 / 19

Un premier exemple introductif Un programme de recherche d un élément } public static int recherche(int[] tab, int x) { /** méthode pour rechercher l indice d un élément * ENTRÉES : tab est un tableau d entiers distincts, * x est un entier * SORTIE : renvoie i si tab[i] == x, * -1 si x n est pas dans le tableau */ int i=0; while(i<tab.length && x=tab[i]) /* A1 : 0 j i, tab[j]!=x */ i++; if (i==tab.length) /* A2 : x n est pas dans le tableau. */ return -1; else return i; /* A3 : x est à l indice i */ 2009 2010 4 / 19

L algorithme de l exemple est correct A1 est vrai en rentrant dans la boucle (i = j = 0). 2009 2010 5 / 19

L algorithme de l exemple est correct A1 est vrai en rentrant dans la boucle (i = j = 0). A1 est vrai à chaque passage dans la boucle car on rentre quand tab[i]!=x et i a été incrémenté. 2009 2010 5 / 19

L algorithme de l exemple est correct A1 est vrai en rentrant dans la boucle (i = j = 0). A1 est vrai à chaque passage dans la boucle car on rentre quand tab[i]!=x et i a été incrémenté. A2 est vrai puisque A1 est vrai à chaque étape de la boucle si i == tab.length alors 0 j tab.length tab[j]!=x, donc x n est pas dans le tableau. 2009 2010 5 / 19

L algorithme de l exemple est correct A1 est vrai en rentrant dans la boucle (i = j = 0). A1 est vrai à chaque passage dans la boucle car on rentre quand tab[i]!=x et i a été incrémenté. A2 est vrai puisque A1 est vrai à chaque étape de la boucle si i == tab.length alors 0 j tab.length tab[j]!=x, donc x n est pas dans le tableau. A3 est vrai car si i < tab.length alors on est sorti de la boucle avec x ==tab[i] et donc le x recherché est à l indice i. 2009 2010 5 / 19

L algorithme de l exemple est correct A1 est vrai en rentrant dans la boucle (i = j = 0). A1 est vrai à chaque passage dans la boucle car on rentre quand tab[i]!=x et i a été incrémenté. A2 est vrai puisque A1 est vrai à chaque étape de la boucle si i == tab.length alors 0 j tab.length tab[j]!=x, donc x n est pas dans le tableau. A3 est vrai car si i < tab.length alors on est sorti de la boucle avec x ==tab[i] et donc le x recherché est à l indice i. ET le programme est bien commenté. 2009 2010 5 / 19

Temps d exécution et place mémoire L algorithme termine! Au pire i croît de 0 à tab.length qui est une valeur finie. 2009 2010 6 / 19

Temps d exécution et place mémoire L algorithme termine! Au pire i croît de 0 à tab.length qui est une valeur finie. Temps d exécution : cas pire, analyse en moyenne et meilleur des cas Dans le pire des cas, on doit parcourir tout tab, n itérations. Dans le meilleur des cas, on trouve x de suite, 1 itération. Si p est la probabilité que x se trouve dans le tableau, le nombre moyen d itérations sera (sous l hypothèse que tous les nombres sont équiprobables) n(1 p 2 ) + p 2. 2009 2010 6 / 19

Temps d exécution et place mémoire L algorithme termine! Au pire i croît de 0 à tab.length qui est une valeur finie. Temps d exécution : cas pire, analyse en moyenne et meilleur des cas Dans le pire des cas, on doit parcourir tout tab, n itérations. Dans le meilleur des cas, on trouve x de suite, 1 itération. Si p est la probabilité que x se trouve dans le tableau, le nombre moyen d itérations sera (sous l hypothèse que tous les nombres sont équiprobables) n(1 p 2 ) + p 2. Mémoire La place nécessaire pour stocker x, tab et l indice i. Si tab contient n éléments on aura besoin de place pour n + 2 entiers. 2009 2010 6 / 19

Un second exemple Dans le premier programme, on a pris comme hypothèse des entiers distincts. Dans ce second exemple, on suppose de plus que le tableau tab donné en entrée est déjà trié! Il s agît toujours de savoir si l élément x est dans tab. 2009 2010 7 / 19

Un second exemple Dans le premier programme, on a pris comme hypothèse des entiers distincts. Dans ce second exemple, on suppose de plus que le tableau tab donné en entrée est déjà trié! Il s agît toujours de savoir si l élément x est dans tab. Solution force brute On utilise l algorithme précédent et on trouve soit l indice de x soit 1 si x n est pas dans tab. 2009 2010 7 / 19

Un second exemple Dans le premier programme, on a pris comme hypothèse des entiers distincts. Dans ce second exemple, on suppose de plus que le tableau tab donné en entrée est déjà trié! Il s agît toujours de savoir si l élément x est dans tab. Solution force brute On utilise l algorithme précédent et on trouve soit l indice de x soit 1 si x n est pas dans tab. Solution dichotomique On profite du fait que les éléments sont ordonnés pour appliquer le paradigme DIVISER POUR RÉGNER. Le principe est le suivant: on compare x à lélément m qui est celui du milieu du (sous-)tableau considéré. Si x = m alors renvoyer l indice de m. Si x < m alors on va travailler dans la partie gauche du tableau (la partie < m). Si x > m alors idem mais avec la partie droite. 2009 2010 7 / 19

Le programme Java pour le second exemple Un programme de recherche dichotomique /** ENTRÉES : tab est un tableau d entiers * distincts ordonnés par ordre croissant, x est un entier * SORTIE : renvoie i si tab[i] == x, * -1 si x n est pas dans le tableau */ public int recherchedichotomique(int[] tab, int x) { int gauche = 0; int droite = tab.length - 1; int milieu; while (gauche <= droite) { /* A1 : j < gauche tab[j]!=x j > droite tab[j]!=x */ milieu = (gauche + droite) / 2 ; if (x==tab[milieu]) /* A2 : x est à l indice milieu */ return milieu; if (x<tab[milieu]) droite = milieu - 1; else gauche = milieu + 1; } /* A3 : x n est pas dans le tableau */ return -1; } 2009 2010 8 / 19

Temps d exécution et place mémoire pour le second exemple L algorithme termine! Pour tout n, il existe k tel que 2 k n < 2 k+1. Intuitivement, dans le pire des cas on va toujours diviser la taille du (sous)tableau à traiter en 2 jusqu à ce que la condition de la boucle gauche <= droite ne soit plus satisfaite. 2009 2010 9 / 19

Temps d exécution et place mémoire pour le second exemple L algorithme termine! Pour tout n, il existe k tel que 2 k n < 2 k+1. Intuitivement, dans le pire des cas on va toujours diviser la taille du (sous)tableau à traiter en 2 jusqu à ce que la condition de la boucle gauche <= droite ne soit plus satisfaite. Temps d exécution : cas pire, analyse en moyenne et meilleur des cas Dans le pire des cas, on doit toujours traiter tous les sous-tableaux. Soit k tel que 2 k n < 2 k+1 on va traiter en gros au plus k + 1 = log 2 n + 1 sous-tableaux! On parle de complexité logarithmique! Dans le meilleur des cas, on trouve x de suite, 1 itération. Si p est la probabilité que x se trouve dans le tableau, le nombre moyen d itérations sera (sous l hypothèse que tous les nombres sont équiprobables) aussi logarithmique : ( log 2 n + 1)(1 p) + 2009 2010 9 / 19

Temps d exécution et place mémoire pour le second exemple L algorithme termine! Pour tout n, il existe k tel que 2 k n < 2 k+1. Intuitivement, dans le pire des cas on va toujours diviser la taille du (sous)tableau à traiter en 2 jusqu à ce que la condition de la boucle gauche <= droite ne soit plus satisfaite. Temps d exécution : cas pire, analyse en moyenne et meilleur des cas Dans le pire des cas, on doit toujours traiter tous les sous-tableaux. Soit k tel que 2 k n < 2 k+1 on va traiter en gros au plus k + 1 = log 2 n + 1 sous-tableaux! On parle de complexité logarithmique! Dans le meilleur des cas, on trouve x de suite, 1 itération. Si p est la probabilité que x se trouve dans le tableau, le nombre moyen d itérations sera (sous l hypothèse que tous les nombres sont équiprobables) aussi logarithmique : ( log 2 n + 1)(1 p) + Mémoire : n + 4 entiers pour tab, x, milieu gauche et droite 2009 2010 9 / 19

Complexité asymptotique et notations Attention!!! En algorithmique, on s intéresse aux ordres de grandeur du temps d exécution et/ou de l espace mémoire nécessaire à un algorithme en fonction de la taille des données en entrée n. On s intéresse aux grandes valeurs de n (n ). 2009 2010 10 / 19

Complexité asymptotique et notations Attention!!! En algorithmique, on s intéresse aux ordres de grandeur du temps d exécution et/ou de l espace mémoire nécessaire à un algorithme en fonction de la taille des données en entrée n. On s intéresse aux grandes valeurs de n (n ). Soit f et g deux fonctions. Grand O. On note f (n) = O(g(n)) si il existe une constante c > 0 et un entier n 0 tel que n n 0, g(n) cf (n). On dit alors que f domine g à partir d un certain rang. Par exemple, f (n) = 2n + n et g(n) = n. Autre exemple, f (n) = sin ` nπ 3 et g(n) = 1. 2009 2010 10 / 19

Complexité asymptotique et notations Attention!!! En algorithmique, on s intéresse aux ordres de grandeur du temps d exécution et/ou de l espace mémoire nécessaire à un algorithme en fonction de la taille des données en entrée n. On s intéresse aux grandes valeurs de n (n ). Soit f et g deux fonctions. Grand O. On note f (n) = O(g(n)) si il existe une constante c > 0 et un entier n 0 tel que n n 0, g(n) cf (n). On dit alors que f domine g à partir d un certain rang. Par exemple, f (n) = 2n + n et g(n) = n. Autre exemple, f (n) = sin ` nπ 3 et g(n) = 1. Theta. On note f (n) = Θ(g(n)) s il existe deux constantes c 1 > 0 et c 2 > 0 telles que f (n) c 1 lim n g(n) c 2 2009 2010 10 / 19

Complexité asymptotique et notations Attention!!! En algorithmique, on s intéresse aux ordres de grandeur du temps d exécution et/ou de l espace mémoire nécessaire à un algorithme en fonction de la taille des données en entrée n. On s intéresse aux grandes valeurs de n (n ). Soit f et g deux fonctions. Grand O. On note f (n) = O(g(n)) si il existe une constante c > 0 et un entier n 0 tel que n n 0, g(n) cf (n). On dit alors que f domine g à partir d un certain rang. Par exemple, f (n) = 2n + n et g(n) = n. Autre exemple, f (n) = sin ` nπ 3 et g(n) = 1. Theta. On note f (n) = Θ(g(n)) s il existe deux constantes c 1 > 0 et c 2 > 0 telles que f (n) c 1 lim n g(n) c 2 Omega. On note f (n) = Ω(g(n)) si f (n) est minorée par cg(n) avec c > 0 quand n. 2009 2010 10 / 19

Quelques propriétés du grand O Le Grand O est transitif : si h(n) = O(g(n)) et g(n) = O(f (n)) alors h(n) = O(f (n)). 2009 2010 11 / 19

Quelques propriétés du grand O Le Grand O est transitif : si h(n) = O(g(n)) et g(n) = O(f (n)) alors h(n) = O(f (n)). La règle des sommes : si g 1 (n) = O(f 1 (n)) et g 2 (n) = O(f 2 (n)) alors g 1 (n) + g 2 (n) = O(max(f 1 (n), f 2 (n))). 2009 2010 11 / 19

Quelques propriétés du grand O Le Grand O est transitif : si h(n) = O(g(n)) et g(n) = O(f (n)) alors h(n) = O(f (n)). La règle des sommes : si g 1 (n) = O(f 1 (n)) et g 2 (n) = O(f 2 (n)) alors g 1 (n) + g 2 (n) = O(max(f 1 (n), f 2 (n))). La règle des produits : si g 1 (n) = O(f 1 (n)) et g 2 (n) = O(f 2 (n)) alors g 1 (n)g 2 (n) = O(f 1 (n)f 2 (n)). 2009 2010 11 / 19

Quelques propriétés du grand O Le Grand O est transitif : si h(n) = O(g(n)) et g(n) = O(f (n)) alors h(n) = O(f (n)). La règle des sommes : si g 1 (n) = O(f 1 (n)) et g 2 (n) = O(f 2 (n)) alors g 1 (n) + g 2 (n) = O(max(f 1 (n), f 2 (n))). La règle des produits : si g 1 (n) = O(f 1 (n)) et g 2 (n) = O(f 2 (n)) alors g 1 (n)g 2 (n) = O(f 1 (n)f 2 (n)). Supposons que la limite lim n f (n) g(n) = L existe avec L R { } alors 1 si L = 0 alors f (n) = O(g(n)) 2 si 0 < L < alors f (n) = Θ(g(n)) 3 si L = alors f (n) = Ω(g(n)). 2009 2010 11 / 19

Theta et grand O f (n) = Θ(g(n)) f (n) = O(g(n)) et g(n) = O(f (n)) 2009 2010 12 / 19

Theta et grand O f (n) = Θ(g(n)) f (n) = O(g(n)) et g(n) = O(f (n)) f (n) = O(g(n)) n implique pas f (n) = Θ(g(n)). Ex: f (n) = log n et g(n) = n. Les indications en Theta sont plus précises que les Grand O. 2009 2010 12 / 19

Le Omega en algorithmique Quand on écrit que le temps d exécution T (n) = Ω(g(n)) d un algorithme avec des entrées de taille n, au delà du fait mathématique que T (n) est minorée à un facteur près par g(n), en algorithmique cela a un sens fort. 2009 2010 13 / 19

Le Omega en algorithmique Quand on écrit que le temps d exécution T (n) = Ω(g(n)) d un algorithme avec des entrées de taille n, au delà du fait mathématique que T (n) est minorée à un facteur près par g(n), en algorithmique cela a un sens fort. Remarque g(n) est une borne inférieure (à un facteur constant près) de T (n). Ce qui implique qu il existe des instances sur lesquelles l algorithme nécessitera un temps d exécution d au moins g(n). 2009 2010 13 / 19

Le Omega en algorithmique Quand on écrit que le temps d exécution T (n) = Ω(g(n)) d un algorithme avec des entrées de taille n, au delà du fait mathématique que T (n) est minorée à un facteur près par g(n), en algorithmique cela a un sens fort. Remarque g(n) est une borne inférieure (à un facteur constant près) de T (n). Ce qui implique qu il existe des instances sur lesquelles l algorithme nécessitera un temps d exécution d au moins g(n). Exemple Le temps d exécution d une multiplication de deux matrices carrées d ordre n nécessite Ω(n 2 ) opérations (au moins on doit calculer les n 2 termes de la nouvelle matrice)! 2009 2010 13 / 19

Logarithmique, linéaire, quadratique, traitable et intraitable Que ce soit en temps d exécution T (n) et/ou en espace mémoire M(n), on parle de complexité logarithmique si T (n) = Θ(log n) (resp. pour la mémoire M(n) = Θ(log n) ) linéaire si T (n) = Θ(n) (resp. pour la mémoire M(n) = Θ(n) ) quadratique si T (n) = Θ(n 2 ) (resp. pour la mémoire M(n) = Θ(n 2 ) ) traitable ou polynomial si T (n) = O(n α ) pour α > 0 constante (idem pour M(n)) intraitable si T (n) = Θ(n ω(n) ) où lim n ω(n) = +. 2009 2010 14 / 19

Quelques idées sur les temps d exécution Algorithme linéaire Si un algorithme linéaire s exécutant en Θ(n) traite 10 données par minute, il peut en traiter 14 400 par jour, 5 260 000 par an... 2009 2010 15 / 19

Quelques idées sur les temps d exécution Algorithme linéaire Si un algorithme linéaire s exécutant en Θ(n) traite 10 données par minute, il peut en traiter 14 400 par jour, 5 260 000 par an... Intraitable Pour un algorithme s exécutant en Θ(2 n ), il va aussi traiter 10 données en quelques minutes mais déjà il est limité à quelques 20 données par jour et à une trentaine par siècle! 2009 2010 15 / 19

Un cas d étude : LE TRI FUSION (mergesort) 2009 2010 16 / 19

Le principe Nous avons en entrée un tableau T à trier. L idée est d appliquer le paradigme diviser pour régner récursivement : Le tri fusion Conditions d arrêt. Si la taille du tableau T est 1 alors il est trié. Corps de la récursion. Sinon on le partitionne en DEUX (sous)tableaux T 1 et T 2 qu on trie ( appels récursifs) T 1 puis T 2 et on fusionne les deux tableaux triés obtenus. 2009 2010 17 / 19

La fusion Le tri-fusion a besoin d un algorithme de fusion de deux tableaux T 1 et T 2 triés et dont le résultat (T 3 ) sera la fusion triée de ces deux tableaux. 2009 2010 18 / 19

La fusion Le tri-fusion a besoin d un algorithme de fusion de deux tableaux T 1 et T 2 triés et dont le résultat (T 3 ) sera la fusion triée de ces deux tableaux. Il suffit pour cela d utiliser deux indices i et j indiquant respectivement les éléments de T 1 et de T 2 que l on compare. L élément le plus petit est copié dans T 3 et l indice du tableau correspondant est incrémenté. 2009 2010 18 / 19

Une analyse élémentaire de complexité On utilise plusieurs faits : L algorithme de fusion de deux tableaux T 1 et T 2 triés (de taille resp. n 1 et n 2 ) nécessite n = n 1 + n 2 itérations (quelque soit le cas). 2009 2010 19 / 19

Une analyse élémentaire de complexité On utilise plusieurs faits : L algorithme de fusion de deux tableaux T 1 et T 2 triés (de taille resp. n 1 et n 2 ) nécessite n = n 1 + n 2 itérations (quelque soit le cas). Soit T (n) le temps nécessaire pour l exécution d un tri fusion sur un tableau de taille n. Pour simplifier, on va supposer que n est une puissance de 2. On a ( n T (n) = n + 2T 2) 2009 2010 19 / 19

Une analyse élémentaire de complexité On utilise plusieurs faits : L algorithme de fusion de deux tableaux T 1 et T 2 triés (de taille resp. n 1 et n 2 ) nécessite n = n 1 + n 2 itérations (quelque soit le cas). Soit T (n) le temps nécessaire pour l exécution d un tri fusion sur un tableau de taille n. Pour simplifier, on va supposer que n est une puissance de 2. On a ( n T (n) = n + 2T 2) Donc T (n) n = 1 + 2 T ( ) n 2 n 2009 2010 19 / 19

Une analyse élémentaire de complexité On utilise plusieurs faits : L algorithme de fusion de deux tableaux T 1 et T 2 triés (de taille resp. n 1 et n 2 ) nécessite n = n 1 + n 2 itérations (quelque soit le cas). Soit T (n) le temps nécessaire pour l exécution d un tri fusion sur un tableau de taille n. Pour simplifier, on va supposer que n est une puissance de 2. On a ( n T (n) = n + 2T 2) Donc T (n) n = 1 + 2 T ( ) n 2 n Posons u n = T (n) n, on a donc u n = 1 + u n/2 = 2 + u n/4 = et au final T (n) = O(n log n). 2009 2010 19 / 19