Algorithmique P2. Optimisation d'un algorithme de tri 2009-2010, Ulg R.Dumont



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

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

ARBRES BINAIRES DE RECHERCHE

Algorithmique I. Algorithmique I p.1/??

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

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

Quelques Algorithmes simples

Chp. 4. Minimisation d une fonction d une variable

Chapitre 7. Récurrences

Les arbres binaires de recherche

MIS 102 Initiation à l Informatique

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

INF601 : Algorithme et Structure de données

STAGE IREM 0- Premiers pas en Python

Arbres binaires de recherche

Algorithmique, Structures de données et langage C

Algorithmique et Programmation

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

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

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Chapitre 5 : Flot maximal dans un graphe

Recherche dans un tableau

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

1 Recherche en table par balayage

4. Les structures de données statiques

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Algorithmes récursifs

Programmation linéaire

Cours 1 : La compilation

Initiation à l algorithmique

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

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

Probabilités sur un univers fini

Algorithmes de recherche

Plus courts chemins, programmation dynamique

La classification automatique de données quantitatives

Logiciel Libre Cours 3 Fondements: Génie Logiciel

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

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

Les deux points les plus proches

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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

Exo7. Limites de fonctions. 1 Théorie. 2 Calculs

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

Algorithmique et Programmation, IMA

Quelques algorithmes simples dont l analyse n est pas si simple

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Résolution d équations non linéaires

Image d un intervalle par une fonction continue

CHAPITRE VIII : Les circuits avec résistances ohmiques

Cours d initiation à la programmation en C++ Johann Cuenin

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

Université de Strasbourg UFR de Mathématique et d'informatique. L2 Informatique Semestres S3 et S4. Structures de Données et Algorithmes 1 et 2

ÉPREUVE COMMUNE DE TIPE Partie D

Feuille TD n 1 Exercices d algorithmique éléments de correction

Introduction à MATLAB R

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Limites finies en un point

Encryptions, compression et partitionnement des données

Les structures de données. Rajae El Ouazzani

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

Génie Logiciel avec Ada. 4 février 2013

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

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

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

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

TP 2 Réseaux. Adresses IP, routage et sous-réseaux

Structures algébriques

Programmation Linéaire - Cours 1

Algorithmes d'apprentissage

Géométrie Algorithmique Plan du cours

Présentation du langage et premières fonctions

Initiation. àl algorithmique et à la programmation. en C

TP3 : Manipulation et implantation de systèmes de fichiers 1

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

Suites numériques 3. 1 Convergence et limite d une suite

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Cours 1 : Qu est-ce que la programmation?

Fibonacci et les paquerettes

Chapitre 11. Séries de Fourier. Nous supposons connues les formules donnant les coefficients de Fourier d une fonction 2 - périodique :

Algorithmique - Cours et Travaux Dirigés Ecole Normale Supérieure de Lyon

Chapitre VI- La validation de la composition.

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Licence Sciences et Technologies Examen janvier 2010

Contexte. Pour cela, elles doivent être très compliquées, c est-à-dire elles doivent être très différentes des fonctions simples,

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

Chapitre 9. Algorithmique. Quelques définitions. L'informatique au lycée.

Objets Combinatoires élementaires

Programmes des classes préparatoires aux Grandes Ecoles

Cours de Master Recherche

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

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

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

Transcription:

Algorithmique P2 Optimisation d'un algorithme de tri 2009-2010, Ulg R.Dumont

Sources supplémentaires Cours Algorithms and Data Structures in Java, Patrick Prosser, 2000, Glasgow University Algorithmique du tri, C.Jard, 2006, Département Informatique et Télécommunications, ENS Cachan Articles QuickSort, A Historical Perspective and Empirical Study, Laila Khreisat, Fairleigh Dickinson University, 2007 Autres QuickSort is Optimal, Sedgewick & Bentley

Diviser pour régner : Quicksort Diviser : Le tableau A[p.. r] est partitionné en deux soustableaux (éventuellement vides) A[p..q 1] et A[q+1..r] tels que chaque élément de A[p..q 1] soit inférieur ou égal à A[q] qui, lui-même, est inférieur ou égal à chaque élément de A[q+1..r]. L indice q est calculé dans le cadre de cette procédure de partitionnement Problème central Régner : Les deux sous-tableaux A[p..q 1] et A[q+1..r] sont triés par des appels récursifs au tri rapide. Combiner : Suite aux appels récursifs sur les sous-tableaux, aucun travail n est nécessaire pour les recombiner : le tableau A[p..r] est maintenant trié.

Quicksort

Quicksort Initialement, Le premier segment est vide Le deuxième segment également Le segment "non traité" s'étend de l'élément p à l'élément r-1 Le pivot est à l'indice r Chaque itération de la boucle réduit le segment non traité d'un élément Finalement, Le segment non traité est vide Les deux autres segments contiennent 0 ou plusieurs éléments.

Quicksort

Quicksort - Python

Choix du pivot Prendre le premier élément du tableau (ou le dernier ) Si les éléments ne sont pas déjà partiellement triés ou en ordre inverse Ok Sinon Considérons le cas d'une liste déjà triée (ou inversement triée) Quelle est la taille des sous-listes L et R? Tous les éléments vont dans A[p..q-1] ou A[q+1..r] Le pivot étant constamment choisi à cette position, le problème se répercute récursivement. Dans ces cas particuliers, le quicksort est dit "dégénéré" Complexité O(n 2 )

Quicksort : Complexité Soit l'arbre de partition du Quicksort À partir de P.Prosser (voir sources sup.)

Quicksort : Complexité v1 Soit s i (n), la taille totale des entrées au niveau i de l'arbre T On a s 0 (n) = n s 1 (n) = n-1 (on ne traite plus le pivot) s 2 (n) = n-3 (on ne traite plus les pivots) ou n-2 (si une partition est vide) Pire cas n 1 n 1 n i ( ) ( ) i= 0 i= 0 i= 1 2 ( ) O s n = O n i = O i = O n À partir de P.Prosser (voir sources sup.)

Quicksort : Complexité v1 Meilleur des cas = partitions de taille égale : s 0 (n) = n s 1 (n) = n-1 s 2 (n) = n-3 = n-(1+2) s 3 (n) = n-7 = n-(1+2+4)=n-(1+2+2 2 ) s i (n) = n-(1+2+2 2 + +2 i-1 )=n-(2 i -1)=n-2 i +1 i s ( n) = n + n 1+ n 3 +... + n 2 + 1 Il vient i Or, au max, i=log n (puisque prop. à la hauteur de T) Donc, i si ( n) = ( i + 1) n (1 + 3 +... + 2 ) + 1 Ou encore s ( n) = log n. n + n (1 + 3 +... + n) + 1 O( nlog n) i

Quicksort : Complexité v2 Plus formellement, la complexité de Partition est O(n), à une constante près notée α Le pivot sépare le tableau en deux parties (k) éléments et (n-k) éléments Travaillons sur la relation suivante T(n) = T(k) + T(n-k)+ αn

Quicksort : Complexité v2 Cas défavorable : Dans ce cas, on a k=1 et n-k=n-1 (une des soustableaux est vide) pivot le + petit ou le + grand Il vient successivement T(n) = T(1)+T(n-1)+αn = T(n-1)+T(1)+αn = [T(n-2)+T(1)+α(n-1)]+T(1)+αn = T(n-2)+2.T(1)+α(n-1+n) = [T(n-3)+T(1)+α(n-2)]+2.T(1)+α(n-1+n) = T(n-3)+3.T(1)+α(n-2+n-1+n) [= T(n-i)+i.T(1)+α(n-i+1+ +n-2+n-1+n) i 1 = T(n-i)+i.T(1)+α. ( n j) ] n 2 j= 0 = T(1)+(n-1)T(1)+α. ( n j) j= 0 = nt(1)+α(n(n-2)-(n-2)(n-1)/2) O(n²) O(n²)

Quicksort : Complexité v2 Cas favorable : Dans ce cas, on a k=n/2 et n-k=n/2 Il vient successivement T(n) = 2T(n/2)+αn = 2(2T(n/4)+α(n/2))+αn = 4T(n/4)+2α(n/2)+αn = 2²T(n/4)+2αn = 2²(2T(n/8)+α(n/4))+2αn = 2³T(n/8)+3αn [= 2 k T(n/2 k )+kαn] = nt(1)+αnlogn O(n O(n logn)

Optimisations possibles Choix du pivot Pivot aléatoire, central, median-of-three Autre algorithme de tri pour les petites listes Insertion Sort Optimisations avancées Différentes manières de partitionner les sous-listes (Dutch flag) Améliorations plus 'techniques' (Qsorte, Bsort, )

Optimisations possibles Afin de simplifier la présentation des améliorations, adoptons une nouvelle approche Le choix du pivot est inclus en tant que paramètre Le parcours s'effectue à partir des deux extrémités

Optimisations possibles Problème : Tableau en partie trié (pire des cas = tableau entièrement trié) Cas relativement fréquent Résulte du choix du pivot Solutions pour le pivot : 1. Pivot aléatoire Solution classique 2. Pivot en milieu de tableau

Pivot en tant qu'élément central 1 5 15 8 7 2 4 11 6 1 5 15 8 6 2 4 11 6 i j 1 5 15 8 6 2 4 11 6 i j 1 5 4 8 6 2 15 11 6 i j 1 5 4 2 6 8 15 11 6 j i 1 5 4 2 6 7 15 11 8

Optimisations possibles La solution idéale aurait été un pivot médian Obtention de deux sous-tableaux de tailles proches [N/2] et [N/2]-1 Problème : détermination coûteuse en temps 3. Calcul de la médiane (T[p], T[r] et T[ (p+r)/2 ]) Median-of-three partitioning: a. Calcul de la médiane à partir des valeurs de 3 éléments choisis aléatoirement, ou b. Calcul basé sur le premier élément, le central et le dernier, ou c. Choix sur 3 groupes de 3 éléments 3 médianes 1 médiane Peut dépendre du nombre d'éléments à trier. Exemple : < 7 : a. 7<=x<=40 : b. > 40 : c.

Pivot médian x y z x z y x<=z y>=z Choix des éléments choix du pivot Exemple x m z y placement du pivot 3 9 7 2 8 10 6 5 1 4 sélection des 3 éléments 3 9 7 2 4 10 6 5 1 8 déplacement des éléments 3 9 7 2 1 10 6 5 4 8 échange du pivot sélectionné 3 9 7 2 1 10 6 5 4 8 i j

QS : 3-way way, aperçu 'Multikey QuickSort', 'Qsort7' Implémentation du problème du drapeau hollandais (Dutch Flag) de Dijkstra par Benteley et McIlroy Optimisation pour le tri de chaines de caractères Choisir un élément comme pivot Considérer le premier caractère de la string pivot Partitionner en 3 sous-tableaux Le premier contient celles dont le caractère correspondant est inférieur Le second, contient les égaux Le troisième, les supérieurs Tri récursif sur les tableaux 1 et 3 Tri récursif sur le tableau 2, sur le second caractère du pivot

QS : 3-way way, aperçu a (d) pointe le premier (dernier) élément inférieur (supérieur) à l'élément pivot b (c) pointe le premier (dernier) élément à traiter b et c sont échangés quand nécessaire Au final, on rassemble les extrémités au centre du tableau Voir L. Khreisat, Sources Suppl.

Du tri rapide au tri par insertion Lorsque le tableau contient peu d'éléments (moins de 15), il est conseillé de passer au tri par insertion. Tri itératif Efficace en temps Plus efficace en espace mémoire en raison de l'absence de récursion sur les sous-listes

Tri par insertion

Complexité du tri par insertion Source basée sur C.Jard, voir s. supp.

Tri par insertion cas favorable et défavorable Cas favorable : tableau déjà trié. Fonction linéaire Cas défavorable : tableau trié par ordre décroissant Car et Fonction quadratique

Tri par insertion Cas moyen Cas le plus favorable = borne inférieure Cas le plus défavorable = borne supérieure Cas général = entre les deux On fait parfois des analyses de "cas moyen" : Tableau d'entrée = n nombres tirés au hasard (on suppose une loi uniforme). Pour une clé choisie ligne 2 en moyenne la moitié du tableau lui est supérieure et l'autre moitié lui est inférieure.

Tri par insertion Cas moyen Donc Il vient Fonction quadratique

Tri par insertion complexité simp. Op. fondamentale = comp. de deux éléments

Tri par insertion complexité simp.

Algorithmique P2 Techniques de preuves 2009-2010, Ulg R.Dumont

Preuve par (contre-)exemple Par l'exemple Proposition Il existe des nombres égaux au produit de la somme et du produit de leurs chiffres Preuve 135 = 9*15 Par contre-exemple Proposition Tout nombre 2 i 1 est premier Preuve 2 4-1=15=5*3

Preuve par contrapositive Proposition Soient a et b entiers. Si ab est pair, alors a est pair ou b est pair. Preuve Si a et b sont impairs, alors ab est impair. Supposons a = 2i + 1 et b = 2j + 1. Alors, ab = 4ij + 2i + 2j + 1 = 2(2i j + i + j) + 1 Par conséquent, ab est impair.

Preuve par contradiction Par contradiction Proposition Soient a et b entiers. Si ab est impair, alors a est impair et b est impair. Preuve Soit ab impair. Supposons que a est pair. Alors, a = 2i. Par conséquent, ab = 2ib. Donc ab est pair, ce qui constitue une contradiction. En conséquence, a est impair et b est impair.

Preuve par récurrence Proposition F(n) < 2 n où F est la fonction Fibonacci définie par F(0) = 0, F(1) = 1 et F(n) = F(n 2) + F(n 1). Preuve Initialisation F(0) <2 0, F(1)<2 1. Hérédité Supposons la relation vérifiée pour F(n-2) et F(n-1) Alors F(n)=F(n-2)+F(n-1)<2 n-2 +2 n-1 <2.2 n-1 =2 n

Preuve par récurrence Proposition n! 2 n 1 n Preuve Vrai pour n =0 et n =1 Par ailleurs (n +1)!=(n +1)n! (n +1)2 n 1 2.2 n 1 =2 n

Algorithmique P2 Type de données abstrait 2009-2010, Ulg R.Dumont

TDA Type de Données Abstrait ADT Abstract Data Type TDA = Description d'une structure de données et des opérations de manipulation (accès, modification, suppression, ) de cette structure. Il comprend Une partie interface Description de la structure et des opérations possibles Opérations élémentaires (= primitives) Opérations possibles, basées sur ces primitives Les éventuels arguments et retours de ces opérations Une partie implémentation Description explicite

TAD La définition d'un TAD repose sur Des structures de données simples Les algorithmes permettant de les implémenter Éventuellement d'autres TAD Il ne dépend pas d'un langage particulier Il permet d'utiliser une structure de données sans pour autant y accéder directement Un TAD est un ensemble limité d'opérations

TAD - Exemples Pile push(e : element, p: pile) Place l'élément e au sommet de la pile p pop(p : pile) Supprime l'élément au sommet de la pile taille(p : pile) : entier Retourne la taille de la pile estvide(p : pile) : booleen Teste si la pile p est vide top(p : pile) : value Retourne la valeur de l'élément au sommet de la pile

TAD - Exemples File push(e : element, f: file) Place l'élément e en queue de la file f pop(f : file) Supprime l'élément en tête de la file taille(f : file) : entier Retourne la taille de la file estvide(f : file) : booleen Teste si la file f est vide top(f : file) : value Retourne la valeur de l'élément en tête de file

TAD Exemples Arbre binaire EstVide(A : arbre) : booleen Teste si l'arbre A est vide Racine(A : arbre) : value Retourne la valeur de l'élément racine de A Gauche(A : arbre) : tree Retourne le sous-arbre à gauche de A Droite(A) : tree Retourne le sous-arbre à droite de A Construire(x,B,C) Construit l'arbre de racine x, ss-arbres gauche B et droit C