Les algorithmes de tri



Documents pareils
Limites des Suites numériques

20. Algorithmique & Mathématiques

Chap. 5 : Les intérêts (Les calculs financiers)

FEUILLE D EXERCICES 17 - PROBABILITÉS SUR UN UNIVERS FINI

Dénombrement. Introduction. 1 Cardinaux d'ensembles nis. ECE3 Lycée Carnot. 12 novembre Quelques dénitions

LES ÉCLIPSES. Éclipser signifie «cacher». Vus depuis la Terre, deux corps célestes peuvent être éclipsés : la Lune et le Soleil.

Consolidation. C r é e r un nouveau classeur. Créer un groupe de travail. Saisir des données dans un groupe

Convergences 2/2 - le théorème du point fixe - Page 1 sur 9

Chap. 6 : Les principaux crédits de trésorerie et leur comptabilisation

Les Nombres Parfaits.

Sommaire Chapitre 1 - L interface de Windows 7 9

Chap. 6 : Les principaux crédits de trésorerie et leur comptabilisation

Séquence 5. La fonction logarithme népérien. Sommaire

Chapitre 3 : Fonctions d une variable réelle (1)

Dénombrement. Chapitre Enoncés des exercices

1 Mesure et intégrale

II LES PROPRIETES DES ESTIMATEURS MCO 1. Rappel : M1 LA REGRESSION : HYPOTHESES ET TESTS Avril 2009

. (b) Si (u n ) est une suite géométrique de raison q, q 1, on obtient : N N, S N = 1 qn+1. n+1 1 S N = 1 1

3.1 Différences entre ESX 3.5 et ESXi 3.5 au niveau du réseau. Solution Cette section récapitule les différences entre les deux versions.

[ édité le 10 juillet 2014 Enoncés 1. Exercice 6 [ ] [correction] Si n est un entier 2, le rationnel H n =

x +1 + ln. Donner la valeur exacte affichée par cet algorithme lorsque l utilisateur entre la valeur n =3.

UNIVERSITE MONTESQUIEU BORDEAUX IV. Année universitaire Semestre 2. Prévisions Financières. Travaux Dirigés - Séances n 4

EXERCICES : DÉNOMBREMENT

SÉRIES STATISTIQUES À DEUX VARIABLES

14 Chapitre 14. Théorème du point fixe

2 ième partie : MATHÉMATIQUES FINANCIÈRES

Deuxième partie : LES CONTRATS D ASSURANCE VIE CLASSIQUES

STATISTIQUE : TESTS D HYPOTHESES

UNIVERSITÉ DE SFAX École Supérieure de Commerce

Statistique descriptive bidimensionnelle

Comportement d'une suite

TRANSFERT DE CHARGE DANS UN RÉSEAU DE PROCESSEURS TOTALEMENT CONNECTÉS (*) par Maryse BÉGUIN ( 1 )

Séries réelles ou complexes

Statistiques appliquées à la gestion Cours d analyse de donnés Master 1

55 - EXEMPLES D UTILISATION DU TABLEUR.

CHAPITRE 2 SÉRIES ENTIÈRES

capital en fin d'année 1 C 0 + T C 0 = C 0 (1 + T) = C 0 r en posant r = 1 + T 2 C 0 r + C 0 r T = C 0 r (1 + T) = C 0 r 2 3 C 0 r 3...

Neolane Message Center. Neolane v6.0

Exercice I ( non spé ) 1/ u 1 = u / Soit P la propriété : u n + 4. > 0 pour n 1. P est vraie au rang 1 car u 1

Compte Sélect Banque Manuvie Guide du débutant

Polynésie Septembre Exercice On peut traiter la question 4 sans avoir traité les questions précédentes.

Logiciel de synchronisation de flotte de baladeurs MP3 / MP4 ou tablettes Androïd

Gérer les applications

Simulations interactives de convertisseurs en électronique de puissance

Exo7. Déterminants. = 4(b + c)(c + a)(a + b). c + a c + b 2c Correction. b + a 2b b + c. Exercice 2 ** X a b c a X c b b c X a c b a X

La France, à l écoute des entreprises innovantes, propose le meilleur crédit d impôt recherche d Europe

Etude de la fonction ζ de Riemann

Donnez de la liberté à vos données. BiBOARD.

STATISTIQUE AVANCÉE : MÉTHODES

Examen final pour Conseiller financier / conseillère financière avec brevet fédéral. Recueil de formules. Auteur: Iwan Brot

c. Calcul pour une évolution d une proportion entre deux années non consécutives

Réseaux d ondelettes et réseaux de neurones pour la modélisation statique et dynamique de processus

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable

Processus géométrique généralisé et applications en fiabilité

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable

Neolane Leads. Neolane v6.0

Un nouvel opérateur de fusion adaptatif. A new adaptive operator of fusion. 1. introduction

UV SQ 20. Automne Responsable d Rémy Garandel ( m.-el. remy.garandel@utbm.fr ) page 1

Probabilités et statistique pour le CAPES

Exercices de mathématiques

RECHERCHE DE CLIENTS simplifiée

PROMENADE ALÉATOIRE : Chaînes de Markov et martingales

Intégration et probabilités ENS Paris, TD (20)13 Lois des grands nombres, théorème central limite. Corrigé :

Statistique Numérique et Analyse des Données

Chapitre 3 : Transistor bipolaire à jonction

Échantillonnage et estimation

Université Victor Segalen Bordeaux 2 Institut de Santé Publique, d Épidémiologie et de Développement (ISPED) Campus Numérique SEME

Formation d un ester à partir d un acide et d un alcool

Mobile Business. Communiquez efficacement avec vos relations commerciales 09/2012

LE WMS EXPERT DE LA SUPPLY CHAIN DE DÉTAIL

Groupe orthogonal d'un espace vectoriel euclidien de dimension 2, de dimension 3

Module 3 : Inversion de matrices

POLITIQUE ECONOMIQUE ET DEVELOPPEMENT

Processus et martingales en temps continu

Opérations bancaires avec l étranger *

Télé OPTIK. Plus spectaculaire que jamais.

Initiation à l analyse factorielle des correspondances

TARIFS BANCAIRES. Opérations bancaires avec l étranger Extrait des conditions bancaires au 1 er juillet Opérations à destination de l étranger

GUIDE METHODOLOGIQUE INDUSTRIES, OUVREZ VOS PORTES

Mécanismes de protection contre les vers

Université de Bordeaux - Master MIMSE - 2ème année. Scoring. Marie Chavent machaven/

Etude Spéciale SCORING : UN GRAND PAS EN AVANT POUR LE MICROCRÉDIT?

Principes et Méthodes Statistiques

Faites prospérer vos affaires grâce aux solutions d épargne et de gestion des dettes

Cours de Statistiques inférentielles

La maladie rénale chronique

Un accès direct à vos comptes 24h/24 VOTRE NUMÉRO CLIENT. Centre de Relations Clients (0,12 /min)

La fibre optique arrive chez vous Devenez acteur de la révolution numérique

Notes de version. Neolane v6.0

Guide des logiciels de l ordinateur HP Media Center

Chapitre 2 SONDAGE ALEATOIRE SIMPLE OU A PROBABILITES EGALES. 2.1 DEFINITIONS 2.2 SONDAGE ALEATOIRE SIMPLE SANS REMISE (PESR) 2.2.

Renseignements et monitoring. Renseignements commerciaux et de solvabilité sur les entreprises et les particuliers.

One Office Voice Pack Vos appels fixes et mobiles en un seul pack

Suites et séries de fonctions

Des résultats d irrationalité pour deux fonctions particulières

Une action! Un message!

Manuel d initiation à l ordinateur HP Media Center

Microscope de mesure sans contact pour inspection et mesures de précision

Université Pierre et Marie Curie. Biostatistique PACES - UE

Notes de version. Neolane v6.1

Transcription:

CONSERVATOIRE NATIONAL DES ARTS ET METIERS PARIS MEMOIRE POUR L'EXAMEN PROBATOIRE e INFORMATIQUE par Nicolas HERVE Les algorithmes de tri Souteu le mai JURY PRESIDENTE : Mme COSTA

Sommaire Itroductio.... Rappels sur l'aalyse des algorithmes.... Qu'est-ce qu'u algorithme?.... Aalyse de l'efficacité d'u algorithme.... Les pricipaux algorithmes de tri... 7. Le problème du tri... 7. Les tris par comparaiso... 8. Tri par isertio... 9. Diviser pour réger.... Tri rapide..... Versio stadard..... Versio aléatoire..... Versios améliorées.... Tri fusio... 9.. Versio itere... 9.. Versio extere....7 Tri par tas....8 Tri par déombremet.... D'autres algorithmes... 8. Tri à bulles... 8. Tri par sélectio... 8. Tri par base... 8. Tri par paquets... 9. Tri de Shell... 9. Quelques exemples d'implémetatio et d'utilisatio de tris.... Librairie stadard Java.... Microsoft Word et Excel.... Oracle.... Simulatios sur ordiateur.... Détails sur l'implémetatio.... Les types de distributios d'etiers.... Résultats gééraux.... Résultats sur de petits tableaux... 9. Sesibilité aux doublos du tri rapide... 9. Comparaiso des deux tris de Java... Coclusio... Bibliographie...

Itroductio Classer les cotacts de so caret d'adresse par ordre alphabétique, trier les résultats d'ue recherche sur iteret par pertiece ou ecore archiver ses mails les plus acies sot des opératios courates pour ue persoe qui utilise u ordiateur. Elles ot toutes e commu le fait de mettre e oeuvre ue opératio de tri sur des doées. Mais ces quelques exemples aecdotiques, directemet perceptibles par l'utilisateur, sot loi de représeter l'étedue du champ d'applicatio du tri e iformatique. Le tri des doées est otammet préset das de ombreux programmes e tat que phase itermédiaire. O retrouve aisi des algorithmes de tri das toutes les applicatios et jeux D pour l'affichage des facettes des objets qui sot triées selo leur éloigemet (algorithme Z-sortig). Le tri est égalemet massivemet utilisé par les baques pour la gestio des opératios bacaires. De ombreux théoricies de l'iformatique cosidèret le tri comme le problème le plus fodametal e matière d'algorithmique. Le tri est ue des pricipales opératios exécutées sur les ordiateurs. Des études tedet d'ailleurs à motrer qu'eviro u quart des cycles machie sot utilisés pour trier. De part l'acieeté et l'importace de cette problématique, u grad ombre d'algorithmes et de variates a été iveté. A travers cette profusio, commet choisir le bo algorithme? La répose à cette questio 'est pas uiverselle et elle déped de ombreux paramètres. Quelles sot les cotraites sur les doées (leur type, leur ombre, leur orgaisatio)? Est-il importat que l'algorithme 'utilise pas trop d'espace mémoire? Quels sot les périphériques de stockage utilisés? Nous allos aborder ces poits et voir e quoi ils ifluet sur la problématique du tri des doées. Après u rappel sur les otios permettat l'aalyse des algorithmes et de leurs performaces, ous ous itéresseros aux pricipaux algorithmes e présetat ue étude détaillée de leur comportemet. Nous évoqueros égalemet de maière plus brève d'autres algorithmes. La deuxième partie de ce mémoire sera cosacrée à l'expérimetatio avec la mise e pratique des algorithmes étudiés et la mesure de leurs performaces e situatio réelle d'ue part et l'étude d'implémetatios d'algorithmes de tri das des outils professioels d'autre part. Nous termieros par ue sythèse de ces résultats. Aggarwal et Vitter []

. Rappels sur l'aalyse des algorithmes. Qu'est-ce qu'u algorithme? O trouve de ombreuses défiitios de ce qu'est u algorithme. Par exemple, das le dictioaire de l'académie Fraçaise : ALGORITHME. m. XIII e siècle, augorisme. Altératio, sous l'ifluece du grec arithmos, «ombre», d'algorisme, qui, par l'espagol, remote à l'arabe Al-Khuwarizmi, surom d'u mathématicie. MATH. Méthode de calcul qui idique la démarche à suivre pour résoudre ue série de problèmes équivalets e appliquat das u ordre précis ue suite fiie de règles. U algorithme est doc u esemble d'opératios de calcul élémetaire, orgaisé selo des règles précises das le but de résoudre u problème doé. Pour chaque doée du problème, l'algorithme retoure ue répose correcte après u ombre fii d'opératios. O peut défiir u problème comme u esemble de cotraites qui existet sur des doées fouries e etrée, aisi que sur les doées attedues e sortie et sur les relatios etre elles. O parlera d'istace du problème pour ue etrée particulière. O défiira plus précisémet ce qu'o appelle opératio élémetaire par la suite. O peut distiguer deux types d'algorithmes : les algorithmes séquetiels : les opératios élémetaires sot exécutées de maière séquetielle, c'est à dire l'ue après l'autre, ue seule à la fois. les algorithmes parallèles : des opératios élémetaires peuvet être exécutées e même temps (c'est le cas sur les ordiateurs à plusieurs processeurs ou pour certaies architectures de processeurs) O e s'itéressera ici qu'aux algorithmes séquetiels. L'algorithmique (l'étude des algorithmes) a ue double problématique : trouver au mois u algorithme pour répodre à u problème, et prouver qu'il foctioe trouver u algorithme efficace Les algorithmes de tri auxquels ous allos ous itéresser existet pour la plupart depuis plusieurs dizaies d'aées. Ils ot tous fait l'objet de ombreuses études et o sait qu'ils foctioet correctemet. Nous ous itéresseros doc plutôt à l'efficacité de ces algorithmes afi de pouvoir les comparer etre eux. Ue fois qu'u algorithme est choisi, il faut écrire le programme correspodat pour pouvoir le faire foctioer. O dit qu'u programme est l'implémetatio d'u algorithme. Cette implémetatio se fait au moye d'u lagage de programmatio particulier, pour u eviroemet particulier. Il peut doc exister plusieurs programmes pour u même algorithme. Les difficultés techiques (allocatio mémoire, gestio des erreurs, gestio des etrées/sorties,...) sot prises e compte au iveau du programme et o au iveau de l'algorithme. Les algorithmes sot aisi cocis et plus simples à étudier. U algorithme est efficace pour toutes ses implémetatios idépedammet de la programmatio.

. Aalyse de l'efficacité d'u algorithme L'étude de l'efficacité d'u algorithme porte sur deux pricipaux facteurs : le temps d'exécutio et l'espace mémoire écessaire pour résoudre u problème doé. Ces deux facteurs serot mesurés e foctio de la taille du problème fouri e etrée. Bie que les performaces des ordiateurs e cesset de croître de maière expoetielle, il est toujours importat d'avoir des algorithmes performats, e serait-ce que parce que la quatité de doées que ces algorithmes doivet traiter est elle aussi e costate augmetatio. Nous allos voir que de mauvais algorithmes peuvet rapidemet deveir iutilisables sur des volumes de doées coséquets. Efi l'étude des algorithmes permet de mieux compredre leur comportemet et la maière dot ils réagisset e foctio des doées, et doc d'avoir d'avatage d'iformatios permettat de choisir u algorithme pour ue situatio précise. Afi d'aalyser les algorithmes e faisat au maximum abstractio de leurs implémetatios, il faut se doter d'u modèle pour les ressources systèmes et machies aisi que leurs coûts. O utilisera u modèle géérique basé sur ue machie à accès aléatoire (RAM). Ce modèle cotiet les istructios classiques e iformatique (opératio élémetaire) : arithmétique : additio, soustractio, multiplicatio, divisio, modulo, partie etière, partie etière supérieure trasfert de doées : lecture, stockage, copie istructios de cotrôle : brachemet coditioel et icoditioel, appel de sousroutie et sortie de sous-routie Il maipule des doées du type etier et réel à virgule flottate. Nous allos ous itéresser pricipalemet aux performaces e temps des différets algorithmes, o parle aussi de complexité e temps. Afi de pouvoir comparer les algorithmes ous allos, après ue étude théorique de chacu d'etre eux, exprimer cette complexité temporelle e foctio de la taille du problème. Mais pour des problèmes de taille idetique, o peut avoir pour u même algorithme des performaces fodametalemet différetes e foctio d'autres paramètres sur les doées (typiquemet leur répartitio pour les algorithmes de tri). Pour essayer de cerer au mieux ces comportemets, o aalyse la complexité des algorithmes das le cas le plus favorable, le cas le plus défavorable et le cas moye. Cette aalyse théorique devat être au maximum idépedate de l'implémetatio qui sera faite de l'algorithme, la complexité temporelle e fourira pas u temps d'exécutio e foctio de la taille du problème. Pour chaque algorithme il faut trouver les opératios élémetaires les plus sigificatives (les plus coûteuses e temps) et exprimer la complexité temporelle e foctio de ces gradeurs. Esuite, si o souhaite avoir ue estimatio du temps d'exécutio pour ue implémetatio précise, sur ue machie précise, il e reste qu'à obteir le temps de traitemet de chacue de ces opératios élémetaires. Das cette étude des algorithmes de tri ous regarderos pricipalemet le ombre de comparaisos et le ombre d'affectatios écessaires pour trier u esemble de clés. L'étude mathématique de la complexité d'u algorithme est souvet délicate. Or o 'a pas toujours besoi d'avoir ue mesure exacte de cette complexité. Dès que la taille du problème deviet suffisammet grade, seul l'ordre de gradeur de la complexité est importat. O parle alors d'étude asymptotique. O utilise alors les otatios mathématiques suivates : Sedgewick et Flajolet [7]

Etat doé ue foctio f(), Ο ( f( )) est l'esemble de tous les g () tels que g ( ) f( ) est boré supérieuremet quad Ω ( f( )) est l'esemble de tous les g () tels que g ( ) f( ) est boré iférieuremet par u ombre strictemet positif quad Θ ( f( )) est l'esemble de tous les g () tels que g ( ) f( ) est boré iférieuremet et supérieuremet quad La otatio Ο exprime ue bore supérieure, Ω ue bore iférieure et Θ sigifie que la bore supérieure cocorde avec la bore iférieure. Rappel : Ο : omicro (o dit égalemet "grad O") Θ : thêta Ω : oméga γ : gamma lg : logarithme base de l : logarithme épérie de log b : logarithme base b de O peut maiteat distiguer différets ordres de gradeur de complexité, qui vot défiir différetes familles d'algorithmes : : temps d'exécutio costat lg: temps d'exécutio logarithmique : temps d'exécutio liéaire lg: temps d'exécutio e lg ²: temps d'exécutio quadratique : temps d'exécutio cubique : temps d'exécutio expoetiel A titre d'illustratio voici ue comparaiso des temps d'exécutio pour les pricipales complexités que ous allos recotrer (sur la base arbitraire d'ue millisecode pour ue opératio élémetaire): lg lg ² ms ms ms ms 7 ms ms ms s ms s s m s ms s m s j h m 7 ms m s 7 m s j 7 h ms m s h m as 9 j O voit doc bie que même sur u ordiateur très puissat, la complexité de l'algorithme reste primordiale das la détermiatio du temps d'exécutio.

. Les pricipaux algorithmes de tri. Le problème du tri Nous ous itéresseros ici au problème du tri des doées. O cosidère u esemble de clés sur lequel ue relatio d'ordre totale est défiie. O fourit à l'algorithme ue suite de clés d, d,..., d issues de cet esemble. O doit alors obteir e sortie ue permutatio de cette suite de sorte que d' d'... d'. Rappel : Ue relatio d'ordre est ue relatio biaire réflexive, atisymétrique et trasitive. U esemble mui d'ue relatio d'ordre est u esemble ordoé. est ue relatio d'ordre et (E, ) est u esemble ordoé si : réflexive : pour tout x das E, x x atisymétrique : pour tout x, y das E, si x y et y x alors x = y trasitive : pour tout x, y, z das E, si x y et y z alors x z Si pour tout x, y das E, o a soit x y, soit y x, alors la relatio d'ordre est totale et E est totalemet ordoé; sio la relatio d'ordre est partielle et E est partiellemet ordoé. Pour l'aalyse des algorithmes de tri, ous predros aturellemet comme taille du problème le ombre de clés à trier. Ce problème est relativemet simple à appréheder et il existe de très ombreux algorithmes permettat de le résoudre. Ceci s'explique d'ue part parce que ce problème est l'u des plus acies de l'iformatique, mais égalemet parce qu'il 'existe pas d'algorithme uiversel, performat das tous les cas. Nous allos voir que les hypothèses faites sur la ature des doées à trier, aisi que sur les cotraites matérielles (espace mémoire dispoible, type de mémoire secodaire) ifluet sur les performaces des algorithmes présetés. R. Sedgewick explique que l'o a costammet besoi d'algorithmes de tri plus performats. Selo la loi de Moore, la puissace des processeurs et la capacité mémoire des ordiateurs doublet tous les 8 mois. Mais la taille des problèmes suit l'évolutio de la mémoire. Si u algorithme permet de trier clés e u temps de lg sur u certai ordiateur, alors quel temps faut-il pour trier clés sur u ordiateur fois plus puissat? La répose est (lg)/ = lg +. C'est à dire plus de temps! L'objectif est ici de préseter ue étude théorique de ces algorithmes et de leur complexité puis de valider cette étude par l'expériece. L'aalyse asymptotique de la complexité doe u ordre de gradeur. Mais cette étude masque u certai ombre de facteurs costats qu'il peut être itéressat de coaître pour comparer plus fiemet des algorithmes dot la complexité asymptotique est similaire. Nous essaieros de détermier ces facteurs costats par le déroulemet de simulatios sur ordiateur. Ue des pricipales cotraites cocere l'espace mémoire dispoible. Est-o capable de trier l'esemble des doées e mémoire cetrale? Le volume de doées est-il plus importat que la taille mémoire? Das ce cas il faudra avoir recours aux mémoires secodaires (disque dur ou bade magétique). Cette cotraite est fortemet structurate pour l'étude d'u algorithme Sedgewick [9] 7

de tri, et plus particulièremet pour l'étude de ses performaces. O distigue doc deux types de tri : les tris iteres : l'esemble des doées à trier peut être coteu e mémoire cetrale. Das ce cas, l'étude de la complexité temporelle de l'algorithme se basera sur les opératios élémetaires les plus coûteuses que sot les comparaisos etre deux doées et évetuellemet l'échage de deux doées das la suite à trier. les tris exteres : l'esemble des doées à trier e peut pas être coteu e mémoire cetrale. Das ce cas, les temps d'accès aux doées sur la mémoire secodaire sot beaucoup plus coûteux que leur traitemet e mémoire cetrale. L'étude de la complexité temporelle se basera doc sur le ombre d'etrées / sorties écessaires pour le tri. Pour l'étude des algorithmes de tri, o s'itéressera aux tableaux d'etiers. Par covetio, ous cosidéreros que l'idice d'u tableau de taille va de à (et o de à - comme c'est le cas das certais lagages de programmatio). Nous verros das la partie l'ifluece du type des doées et de leur distributio sur les performaces des algorithmes. Outre les performaces, les algorithmes de tri ot d'autres caractéristiques qui les distiguet et qui peuvet être importates : la stabilité : u algorithme stable apporte la garatie de e pas modifier l'ordre iitial des clés idetiques tri sur place : l'algorithme e écessite pas (ou peu) de mémoire supplémetaire pour trier, il réarrage directemet les clés das le tableau fouri e paramètre. Les tris par comparaiso La plupart des algorithmes de tri que ous allos étudier est basé sur la comparaiso deux à deux des clés qui doivet être ordoées. Or o peut trouver u miorat du ombre de comparaisos que doit effectuer ce type d'algorithmes de tri. O représete par u arbre de décisio (arbre biaire plei) le déroulemet d'u tri de clés, avec chaque œud itere représetat la comparaiso etre deux clés du tableau et chaque feuille représetat les permutatios devat être effectuées pour avoir le tableau trié. Ne coaissat pas à l'avace l'ordre des clés au départ, tout algorithme de tri doit pouvoir effectuer les! permutatios potetielles. L'arbre de décisio a doc! feuilles. Si o pose h la hauteur de l'arbre (la logueur du plus log chemi partat de la racie), alors o sait que le ombre maximum de feuilles est h. Cette hauteur h est le ombre maximum de comparaisos effectuées pour trier le tableau (cas défavorable). O a doc :! h lg(!) lg( h ) h = Ω (lg) (car lg(!) = Θ (lg)) Tout algorithme de tri par comparaiso exige Ω (lg) comparaisos das le cas le plus défavorable. Voir [, pages et ] pour plus de détails 8

. Tri par isertio Nom aglais : isertio sort - Propriétés : tri itere, sur place, stable Cet algorithme de tri est u des plus simples qui existet. So implémetatio est facile à réaliser. Il 'est toutefois pas performat dès que le ombre de clés à trier deviet coséquet. So étude est doc ue boe itroductio à l'étude des algorithmes de tri, même s'il a peu de chaces d'être utilisé e dehors d'u but pédagogique. L'algorithme du tri par isertio est souvet assimilé au joueur qui trie ses cartes. Au début, le joueur a ses cartes placées e tas devat lui. Il les pred ue par ue de sa mai droite pour les placer das sa mai gauche au bo edroit (c'est à dire e isérat systématiquemet la derière carte saisie à sa place). La procédure suivate pred e paramètre u tableau A [..] coteat ue suite de clés à trier. Les clés état triées sur place, ce même tableau A cotiet les clés triées à la sortie de la procédure. Algorithme issu de [, page ] TRI-INSERTION(A) pour j à faire clé A[j] i j - tat que i > et A[i] > clé faire A[i + ] A[i] i i - 7 fi tat que 8 A[i + ] clé 9 fi pour Exemple d'applicatio sur la suite d'etiers,,,,, 9 : (a) 9 (b) 9 (c) 9 (d) 9 (e) 9 (f) 9 (g) 9 Sur ce schéma o représete e oir la case qui est aalysée (idice j de la boucle pour, lige ). Les cases grises correspodet aux valeurs comparées à A[j] (coditio de la boucle tat que, lige ). Les flèches grises représetet les clés déplacées (lige ) et les flèches oires l'isertio de A[j] à sa place (lige 8). 9

Etude de la complexité : Cas favorable : Le cas favorable se présete quad le tableau est déjà trié. Aisi o 'etre pas das la boucle tat que (liges à 7). O a alors ue seule comparaiso pour chaque passage das la boucle pour pricipale. Le ombre total de comparaiso est : j= = De la même maière, o a affectatios par passage das la boucle pour. Le ombre total d'affectatios est : j= = ( ) La complexité temporelle du tri par isertio das le cas favorable est ( ) Θ. Cas défavorable : A l'opposé du cas favorable, le cas défavorable arrive lorsque le tableau est trié à l'evers. Das ce cas, chaque ouvelle clé examiée das la boucle pour pricipale doit être rameée à l'idice du tableau et il faut décaler l'esemble des clés précédemmet triées. Le ombre total de comparaisos est alors : ( ) = ( j ) = j= i= j j= Le ombre total d'affectatios est quat-à lui : + = + ( j ) = ( )( + ) j= i= j j= j= La complexité temporelle du tri par isertio das le cas défavorable est Θ ². Cas moye : O cosidère que les clés sot réparties de maière uiforme. Pour u idice doé j de la boucle pour, la place de la clé située e A[j] peut être A[], A[]... A[j]. Ces placemets sot équiprobables. Le ombre de fois que l'o parcourt la boucle tat que est alors : + +... + j = j j j j j j = j+ i= O a alors le ombre total de comparaisos : j+ = j+ j= = ( + ) + = ( + ) j= j= Et le ombre total d'affectatios : j+ j+ ( ) + = + = ( + ) j= j= La complexité temporelle du tri par isertio das le cas moye est ( ² ) j= Θ. ( )

. Diviser pour réger Nom aglais : divide ad coquer Les algorithmes utilisat la stratégie diviser pour réger sot décomposés e phases : diviser : si le ombre de clés est trop importat pour être traité, alors diviser l'esemble e sous-esembles disjoits. réger : appliquer l'algorithme de maière récursive à chacu des sous-esembles combier : fusioer les solutios des sous-esembles pour obteir la solutio fiale L'étude de la complexité de ce type d'algorithmes récursifs peut se rameer à ue récurrece au ses mathématique. Soit u algorithme qui pour traiter u problème de taille le divise e a sous-problèmes de taille /b (a, b > ). Si le problème est suffisammet petit ( = ) il est résolu e u temps costat. Le temps écessaire pour diviser le problème et pour combier les solutios des sous-problèmes sot foctio de (respectivemet D() et C()). O a alors la récurrece suivate : Θ () si = T () = { at ( / b) + D( ) + C( ) sio Il existe plusieurs méthodes pour résoudre ces récurreces. Nous utiliseros la méthode géérale. Présetatio de la méthode géérale La méthode géérale permet de résoudre les récurreces de la forme T () = at ( / b) + f( ) avec a, b> et > Le terme /b peut e pas être etier. O peut toutefois démotrer que le comportemet asymptotique de cette récurrece 'est pas modifié si o le remplace par / b ou / b. Pour des raisos de lisibilité, cette otatio cocerat les parties etières sera omise. Le théorème gééral ous idique alors que pour résoudre cette récurrece o doit étudier les cas suivats : ) si f() = Ο log pour ue certaie costate a ε b ε >, alors T() = Θ log a b ) si f() = Θ log, alors = a b T() Θ log a b ) si f() = Ω log pour ue certaie costate a+ ε b ε >, et si af( / b) cf( ) pour ue certaie costate c< et pour tout suffisammet grad, alors () = Θ f() T ( ) De maière géérale, tout algorithme récursif cosomme de l'espace mémoire pour la pile d'appel. Cette taille supplémetaire est masquée das l'algorithme. Elle peut deveir coséquete dès lors qu'u grad ombre de paramètres passés par valeur etre e jeu. Il est possible de supprimer la récurrece de ces algorithmes e utilisat explicitemet ue pile. Nous e préseteros pas les versios de ces algorithmes, mais o peut se référer à [8, page 8] pour les trouver.

. Tri rapide Nom aglais : quick sort - Propriétés : tri itere, sur place, o stable Le tri rapide fait partie des algorithmes de tri du type "diviser pour réger". Bie que sa complexité temporelle das le pire des cas soit Θ ( ² ), c'est u des algorithmes les plus utilisés et égalemet celui qui présete certaiemet le plus grad ombre de variates. Le tri rapide choisit u élémet particulier de la liste de clés, appelé pivot. Il costruit esuite deux sous-listes gauche et droite coteat respectivemet les clés iférieures et supérieures au pivot. Aisi pour trier u sous-tableau A[p..r] du tableau iitial A[..] o retrouve les phases suivates : diviser : choisir le pivot d'idice q das le tableau A[p..r]. Partitioer e ce soustableau : o A[p..q-] cotiet les clés iférieures à A[q], o A[q] le pivot o A[q+..r] cotiet les clés supérieures à A[q]. Les deux sous-tableaux gauche et droite peuvet évetuellemet être vides. réger : les sous-tableaux A[p..q-] et A[q+..r] sot traités e appelat récursivemet le tri rapide. combier : cette phase est istataée. Puisque les sous-tableaux sot triés sur place, aucu travail 'est écessaire pour les combier... Versio stadard Algorithme issu de [, page ] PARTITION(A, p, r) x A[r] i p - pour j p à r - faire si A[j] x alors i i + PERMUTER(A, i, j) 7 fi si 8 fi pour 9 PERMUTER(A, i +, r) retourer i + TRI-RAPIDE(A, p, r) si p < r alors q PARTITION(A, p, r) TRI-RAPIDE(A, p, q - ) TRI-RAPIDE(A, q +, r) fi si PERMUTER(A, i, j) tmp A[i] A[i] A[j] A[j] tmp O démarre l'algorithme par u appel à TRI-RAPIDE(A,, ). Cette versio de l'algorithme pred la derière clé du sous-esemble comme pivot. Exemple d'applicatio sur la suite d'etiers,,,,, 9 :

(a) 9 PARTITION(A,, ) (b) 9 TRI-RAPIDE(A,,) TRI-RAPIDE(A,,) (c) (i) PARTITION(A,, ) FIN (d) TRI-RAPIDE(A,,) TRI-RAPIDE(A,,) FIN (e) PARTITION(A,, ) (f) TRI-RAPIDE(A,,) TRI-RAPIDE(A,,) (g) FIN PARTITION(A,, ) (h) TRI-RAPIDE(A,,) FIN TRI-RAPIDE(A,,) FIN (j) 9

Sur ce schéma o représete les appels récursifs aux deux procédures PARTITION et TRI- RAPIDE. Sur le tableau issu de la partitio, o représete e blac le pivot, e gris le soustableau gauche et e oir le sous-tableau droit. L'étape (j) est le tableau trié obteu à la fi du déroulemet de l'algorithme. Etude de la complexité : Les performaces du tri rapide dépedet de la maière dot la procédure PARTITION parviet à créer deux sous-tableaux équilibrés ou o. La complexité temporelle de la procédure PARTITION pour u tableau A[p..r] est r p+, doc pour u tableau A[..] o a. O a déjà vu que la combiaiso des solutios des sous-problèmes das la récursio e coûte rie. O se ramèe doc au théorème gééral avec f() =. Cas favorable : Le partitioemet fourit deux sous-tableaux de tailles / et / à chaque appel récursif. Ce partitioemet équilibré ous doe la récurrece suivate : T () T( /) + Θ( ) avec a = et b = O est das le cas ) du théorème gééral (puisque = log ) doc T () = Θ( lg) La complexité temporelle du tri rapide das le cas favorable est Θ ( lg). Cas défavorable : Le partitioemet fourit deux sous-tableaux de tailles et à chaque appel récursif. Ce partitioemet est complètemet déséquilibré, il doe la récurrece suivate : T () = T ( ) + doc ( ) T() = i = i= doc T () = Θ(²) La complexité temporelle du tri rapide das le cas défavorable est Θ (²). Pour simplifier l'étude du cas moye, ous allos itroduire ue première versio améliorée du tri rapide... Versio aléatoire Cette versio red le cas défavorable très improbable. E effet, au lieu de predre la derière clé du sous-tableau comme pivot, elle pred ue clé au hasard. La probabilité d'être das le cas défavorable (c'est à dire de choisir aléatoiremet ue clé qui à chaque étape produirait u partitioemet complètemet déséquilibré) est très faible. Algorithme issu de [, page 8] PARTITION-RANDOMISE(A, p, r) i RANDOM(p, r) PERMUTER(A, r, i) retourer PARTITION(A, p, r)

TRI-RAPIDE-RANDOMISE(A, p, r) si p < r alors q PARTITION-RANDOMISE(A, p, r) TRI-RAPIDE-RANDOMISE(A, p, q - ) TRI-RAPIDE-RANDOMISE(A, q +, r) fi si Etude du cas moye : O cosidère que les clés sot uiques das la suite de doées. Soit C la suite doat le ombre de comparaisos écessaires pour trier u tableau de clés. O a déjà vu que le ombre de comparaisos écessaires au partitioemet pour u tableau de taille est -. Avec q idice de la clé choisie comme pivot par PARTITION, o a doc : + C = C + q C q L'idice q du pivot peut predre les valeurs de à de maière équiprobable. O a doc : Or o a : Doc () deviet : Pour - o a alors : C = Ci i= C = = C ( + ) Ci C i i= + () C i C + C + C +... + C i= = = + Ci i= ( ) + Ci i= = ) + () C ( ) C ( C + i C i= = ( )( ) + = i= Ci i C = ( ) ( )( ) () i C E itégrat () das () o obtiet : = ) + ( ) C C ( )( ) + C = ( + ) + ( ) C C C = + E posat F = C o obtiet das (): + F = ( ) F + ( + ) F = F + ( + + ) ( C ( ) + () ( + )

Or o sait que : Doc o a : F i= i+ i= i( i + ) F = + F + F + F = + + + + F F F i= i i= i i= i+ F i= i+ i= F = + F + F + + F i= i i= F = + F + F + H = i= i i = l+γ + Ο( ) i avec γ, 77 F = ( ) ( ) F + F + F + H H H + H F + F + + + + F H H H F = + F = F + F + + + F H + F = (l ) ( ) F + F + F + + γ + Ο () E reveat à o obtiet : C C Or o a =, C = et C = C Or o a l = = C C C = + + + l+ γ + Ο( ) + ( + )l+ ( + )(γ ) + Ο() C ~ l, 88 C lg ~,9lg lge ~ C,89lg, 88 Par u calcul similaire, o trouve le ombre moye d'échages effectués : S = ( + )( ) + Ο () H + ~,9lg, 79 S La complexité temporelle du tri rapide aléatoire das le cas moye est Θ ( lg)... Versios améliorées Il existe de ombreuses versios "améliorées" du tri rapide. Elles diffèret e foctio du poit faible de l'algorithme stadard qu'elles souhaitet corriger. Bie que les performaces asymptotiques du tri rapide soiet largemet meilleures que celles du tri par isertio, il 'e est pas de même sur les petits esembles. L'ordre de gradeur asymptotique e fait pas apparaître u certai ombre de costates qui sot égligeables devat lorsque est grad mais qui devieet importates pour petit. Or u algorithme Voir chapitre.

récursif comme le tri rapide traite beaucoup de petits esembles puisqu'il partitioe le problème jusqu'à obteir des esembles de cardialité. Ue optimisatio possible est de déléguer à u tri par isertio les esembles dot la cardialité est iférieure à ue costate M. O peut trouver la valeur optimale de M e étudiat la récurrece suivate sur le ombre de comparaisos das le cas moye : { + si > M Ci = i= C ( + ) sio O étudie alors : = ( ) M i i+ + C + C ( ) i i= M + i= Par ue démarche similaire à celle employée précédemmet, o obtiet pour > M: F = ( ) ( ) F + H H M + M + H H M [...] Voici le graphe de la foctio f : ~ l+ f( M) avec f(m) = C M( M + ) l M + M Le miimum est atteit pour M ~, (seule racie de la dérivée). O predra M = 7 pour implémeter cette solutio optimisée. Ue autre optio est de e pas trier les tableaux dot la taille est iférieure à M. Lorsque le tri rapide se termie, il e reste plus qu'à exécuter u tri par isertio sur l'esemble du tableau. Globalemet il faut voir que le tri rapide rapproche beaucoup plus vite que le tri par isertio les clés de leur emplacemet fial. O a vu que le problème pricipal du tri rapide est de réussir à partitioer correctemet (de maière équilibrée) l'esemble à trier. La versio aléatoire e permet pas d'optimiser ce problème, elle évite juste le cas de la dégéérescece quadratique sur les tableaux déjà triés. U moye d'optimiser le tri rapide est doc de faire e sorte de mieux choisir le pivot. Au lieu de choisir ue clé (choisie au hasard ou o), o va e choisir plusieurs que l'o va aalyser pour savoir laquelle est la meilleure. Ue possibilité est de choisir clés et de predre comme pivot celle qui a la valeur médiae des. O appelle alors cette variate le tri rapide médiaede-trois. O peut évetuellemet choisir parmi plus de élémets. Ue autre variate, dite pseudo-médiae-de-euf cosiste à choisir comme pivot la clé médiae de valeurs médiae de esembles de clés (médiae de médiaes). Comme pour la versio icluat le tri par 7

isertio il est possible de mélager les versios du tri rapide e foctio des cas pour avoir ue versio améliorée. Il existe de ombreuses études sur l'amélioratio du tri rapide. Nous e avos choisi. E 99 J. Betley et D. McIlroy implémetet ue versio de tri rapide améliorée pour la librairie stadard C. Il s'agit d'u mélage du tri rapide stadard, de la versio médiae-detrois et de la versio pseudo-médiae-de-euf. E, M. Durad [] motre que la complexité asymptotique (e cosidérat le ombre de comparaisos) est : =,97l -, +,97l-7, + o() C'est à dire : C C ~,88lg -, Ceci est obteu avec la règle suivate : < tri rapide stadard < 8 tri rapide médiae-de-trois 8 tri rapide pseudo-médiae-de-euf S. Bhutoria et G. Kojevod [] proposet ue versio qui profite de la phase de partitioemet pour choisir les deux pivots de l'étape suivate. Puisqu'u parcours des clés doit être effectué pour ce partitioemet, o essaye d'obteir la valeur médiae de chacu des deux sous-esembles qui vot être géérés. J. Betley et R. Sedgewick [9] proposet e ue versio de tri rapide aléatoire basée sur u partitioemet e permettat de mieux gérer les cas d'égalité de clés. Ils aocet que cette versio est optimale et qu'aucu algorithme de tri basé sur des comparaisos e peut mieux faire. 8

. Tri fusio Nom aglais : merge sort - Propriétés : tri itere et extere, stable, e trie pas sur place.. Versio itere Le tri fusio fait égalemet partie des algorithmes de tri du type "diviser pour réger". Cet algorithme partage le tableau e deux sous-tableaux de taille / qu'il trie. Il fusioe esuite les résultats des deux sous-tableaux. O retrouve alors les phases suivates : diviser : partager le tableau e deux sous-tableaux de taille /. Cette phase est istataée puisqu'il suffit de calculer l'idice /. réger : les sous-tableaux sot traités e appelat récursivemet le tri fusio. combier : c'est cette phase qui cotiet toute la logique de l'algorithme. La fusio de deux sous-tableaux déjà triés se fait e les parcourat e parallèle et e plaçat systématiquemet la plus petite clé das le tableau résultat. Pour cela la procédure FUSION crée deux tableaux temporaires pour stocker les deux sous-tableaux à fusioer. O utilise ue setielle à la fi de chacu de ces tableaux temporaires pour éviter d'ajouter des tests supplémetaires pour détecter la fi de l'u d'etre eux das la procédure de fusio. Algorithme issu de [, page 7] FUSION(A, p, q, r) q - p + r - q créer tableaux L[.. + ] et R[.. + ] pour i à faire L[i] A[p + i - ] fi pour 7 pour j à faire 8 R[j] A[q + j] 9 fi pour L[ + ] R[ + ] i j pour k p à r faire si L[i] R[j] alors A[k] L[i] 7 i i + 8 sio 9 A[k] R[j] j j + fi si fi pour TRI-FUSION(A, p, r) si p < r alors q (p + r) / TRI-FUSION(A, p, q) TRI-FUSION(A, q +, r) FUSION(A, p, q, r) fi si 9

Exemple d'applicatio sur la suite d'etiers,,,,, 9 : (a) 9 TRI-FUSION(A,,) (b) 9 TRI-FUSION(A,,) TRI-FUSION(A,,) (c) 9 TRI-FUSION(A,,) TRI-FUSION(A,,) TRI-FUSION(A,,) TRI-FUSION(A,,) (d) 9 FUSION(A,,,) FUSION(A,,,) (e) FUSION(A,,,) FUSION(A,,,) (f) 9 FUSION(A,,,) (g) 9 Sur ce schéma, o représete le déroulemet du tri par fusio. Les étapes b, c et d correspodet aux appels récursifs à la procédure TRI-FUSION. Esuite les étapes e, f et g correspodet à la termiaiso de la récursio par l'appel à la procédure FUSION. Etude de la complexité : Le tri par fusio est isesible aux doées qu'il trie. E effet si o regarde de plus près l'algorithme, o se red compte que la boucle pricipale (liges à ) effectue systématiquemet le même ombre d'opératios, quel que soit l'ordre relatif des clés des tableaux L et R. O e déduit doc qu'il 'y a pas de cas favorable ou défavorable. Toutes les etrées de taille serot traitées avec u temps idetique. La procédure FUSION appliquée à u tableau de taille effectue + affectatios et comparaisos. Elle est doc e Θ(). O a vu que la partitio du problème das TRI- FUSION est e Θ().

O se ramèe doc à la récurrece suivate : Θ () si = T () = { T( /) + Θ( ) sio O a déjà vu das l'étude du cas favorable du tri rapide que cette récurrece, d'après le théorème gééral, ous doe le résultat suivat : T () = Θ( lg) La complexité temporelle du tri fusio est doc Θ ( lg) das tous les cas. Cotrairemet au tri rapide, le tri fusio commece par partitioer le problème e deux sousproblèmes de tailles égales avat d'appliquer ue procédure e Θ (). O est doc toujours das le cas du partitioemet favorable du tri rapide. Ceci ous assure que le ombre d'étapes de partitioemet sera miimum. Toutefois, cet algorithme e trie pas sur place. Il écessite u espace mémoire supplémetaire e Θ(). Pour s'e covaicre, il suffit d'evisager la derière fusio qui doit être faite. Elle correspod à la partitio du tableau iitial. O a doc sous-tableaux temporaires de taille /. Comme pour le tri rapide, il est possible d'optimiser le tri fusio e lui substituat u tri par isertio pour les petits tableaux... Versio extere Pour de très ombreuses applicatios, la quatité de doées à trier est bie supérieure à la capacité mémoire de l'ordiateur. Il faut das ce cas u algorithme particulier qui va s'appuyer sur les mémoires secodaires (disques durs ou bades magétiques) pour trier. La première cotraite est que les temps d'accès de ces mémoires secodaires est tellemet grad, qu'il 'est pas comparable avec les temps d'accès et de traitemet e mémoire cetrale. La complexité de ces algorithmes est doc étudiée e foctio du ombre d'etrées/sorties plutôt que du ombre d'échages ou de comparaisos. La secode cotraite est lié au type et au ombre de mémoires secodaires. E effet, cotrairemet à u disque dur, ue bade magétique e peut être accéder que séquetiellemet. Nous ous itéresseros ici à ue versio du tri par fusio utilisée avec des disques durs au sei des bases de doées. Pour ue versio sur bades magétiques, se reporter à [8, chapitre ] ou [, chapitre ]. O suppose qu'o a clés à trier et qu'o dispose d'u espace e mémoire cetrale permettat de stocker uiquemet M clés. La première étape est de créer des partitios de l'esemble des clés qui puisset teir e mémoire cetrale. O lit doc les clés par blocs de taille M. Chaque bloc est trié e mémoire cetrale à l'aide d'u des algorithmes vu précédemmet. Il est esuite réécrit sur le disque pour libérer l'espace mémoire pour trier les blocs suivats. A la fi de cette première étape, o a doc / M partitios triées de taille M. Le coût de cette phase est de lectures et écritures. La secode étape, comme pour le tri fusio classique, cosiste à iterclasser les partitios triées. Pour cela, o lit e parallèle les clés de M- partitios et o stocke la clé miimum das le derier espace mémoire afi de l'écrire sur le disque das la ouvelle partitio résultat de cette fusio. A la fi de cette étape, o a doc / M( M ) partitios de taille M(M-) chacue (sauf évetuellemet la derière). O recommece cette secode étape

jusqu'à obteir ue partitio uique qui sera le résultat fial. Le coût de cette étape est égalemet de lectures et écritures. Cette étape est répétée eviro fois. log M Le coût total e etrées/sorties est e ( ) Ο. logm Les pistes d'optimisatio pour ce tri sot pricipalemet liées à l'utilisatio e parallèle de plusieurs disques / bades. O 'écoomise pas forcémet e ombre d'etrées / sorties mais e temps..7 Tri par tas Nom aglais : heap sort - Propriétés : tri itere, o stable, sur place Le tri par tas est u tri qui se base sur ue structure de doées particulière : le tas. Il s'agit d'ue représetatio d'u arbre biaire sous forme de tableau. L'arbre est presque complet : il est complètemet rempli à tous les iveaux, sauf potetiellemet le derier. Le parcours de l'arbre (trouver le père ou les fils droit et gauche d'u œud) se fait par u calcul d'idice sur le tableau. Pour u œud d'idice i, o a le père à l'idice i /, le fils gauche à l'idice i et le fils droit à l'idice i +. O distigue la logueur du tableau, qui est le ombre d'élémets présets das le tableau, de la taille du tableau, qui est le ombre d'élémets du tas. Il se peut que les deriers élémets du tableau e fasset doc pas partie du tas. Cette petite distictio permet d'effectuer le tri sur place e coservat le tas et les clés déjà triées das le même tableau et e les distiguat à l'aide de ces deux idices. Das l'exemple suivat, la logueur du tableau est 8, alors que sa taille est. Aisi les deux derières cases e fot pas partie du tas : 9 7 7 8 g d g d g d g g d g 9 Il existe deux types de tas : les tas max et les tas mi. Ils correspodet à la maière dot les œuds sot orgaisés. Das u tas max, le père a toujours ue valeur supérieure ou égale à celles de ses fils. L'élémet racie est doc l'élémet maximum du tas. C'est le cotraire das u tas mi. Le tri par tas se base doc sur u tas max pour trier le tableau sous-jacet.

Algorithme issu de [, page ] PARENT(i) retourer i/ GAUCHE(i) retourer i DROITE(i) retourer i + ENTASSER-MAX(A, i) l GAUCHE(i) r DROITE(i) si l taille[a] et A[l] > A[i] alors max l sio max i 7 fi si 8 si r taille[a] et A[r] > A[max] alors 9 max r fi si si max i alors PERMUTER(A, i, max) ENTASSER-MAx(A, max) fi si CONSTRUIRE-TAS-MAX(A) taille[a] logueur[a] pour i logueur[a]/ à faire ENTASSER-MAX(A, i) fi pour TRI-PAR-TAS(A) CONSTRUIRE-TAS-MAX(A) pour i logueur[a] à faire PERMUTER(A,, i) taille[a] taille[a] - ENTASSER-MAX(A,) fi pour La procédure ENTASSER-MAX(A, i) est chargée de faire descedre la valeur du œud i das le tas afi de coserver la propriété du tas qui est qu'u père est toujours supérieur ou égal à ses fils. La procédure CONSTRUIRE-TAS-MAX(A) permet de réarrager u tableau pour le trasformer e tas max. Efi la procédure TRI-PAR-TAS(A) utilise les propriétés du tas pour trier u tableau. Elle commece par créer u tas max à partir du tableau. L'élémet racie du tas est alors le maximum. C'est doc e théorie l'élémet qui doit se trouver e derière positio du tableau trié. O échage doc cet élémet avec le derier du tableau, et o décrémete la taille du tas. Aisi o a u tas qui va de à - et e positio o a l'élémet maximum du tableau qui est à sa place. L'élémet qui se retrouve maiteat à la racie du tas 'est potetiellemet plus le maximum. U appel à ENTASSER-MAX sur cet élémet va permettre de le replacer au bo edroit das le tas. O a maiteat u tas max correct de taille -. O peut recommecer jusqu'à épuisemet du tas pour obteir le tableau correctemet trié.

Exemple d'applicatio sur la suite d'etiers,,,,, 9 : (a) CONSTRUIRE-TAS-MAX (b) TRI-PAR-TAS (c) ENTASSER-MAX (c) 9 9 9 9 (d) ENTASSER-MAX (d) (e) ENTASSER-MAX (e) 9 9 9 9 (f) ENTASSER-MAX (f) (g) 9 9 9 Sur ce schéma o représete e gris les élémets déjà triés. Pour chaque idice i de la boucle pour de la procédure TRI-PAR-TAS o a représeté les deux étapes du placemet du maximum à sa positio fiale puis de l'appel à ENTASSER-MAX pour réorgaiser le tas. Etude de la complexité : ENTASSER-MAX : O étudiera, sas uire à la gééralité, uiquemet les tas complets, c'est à dire les tas dot la taille vérifie : k i i= taille[a] = (k ) La procédure ENTASSER-MAX appelée sur u tas de taille utilise u temps costat pour comparer le père et ses deux fils. Il y a esuite u évetuel appel récursif sur u des sousarbres pour le cas où u échage a eu lieu. La taille de ce sous-arbre est /. O a alors la récurrece suivate : T() T(/) + Θ () E utilisat le cas ) du théorème gééral avec a = et b = o obtiet alors :

T() Θ(lg) T() = Ο(lg) O peut égalemet borer le temps d'exécutio de cette procédure sur u œud de hauteur h par O(h). La complexité de la procédure ENTASSER-MAX est e Ο (lg). CONSTRUIRE-TAS-MAX : O peut facilemet voir que la procédure CONSTRUIRE-TAS-MAX appelle / fois ENTASSER-MAX. Doc o peut borer sa complexité par O(lg). Il est possible d'obteir u majorat plus précis. O costate que la hauteur d'u tas est lg et que le ombre d'élémets présets à la hauteur h est / h+. La complexité de la procédure est alors : lg h+ h= O(h) = lg Ο h h () h= Or o sait que : Doc : Doc () deviet : = k k x k = h h = h= Ο Ο lg x x ( ) / ( / ) = h h Ο h h = h h = = O() h= h lg h La complexité de la procédure CONSTRUIRE-TAS-MAX est e Ο ( ). TRI-PAR-TAS : Cette procédure appelle ue fois CONSTRUIRE-TAS-MAX et - fois ENTASSER-MAX. O peut doc borer sa complexité par O() + ( - ) O(lg). La complexité de la procédure TRI-PAR-TAS est e Ο ( lg).

.8 Tri par déombremet Propriétés : tri itere, stable, e trie pas sur place O a vu jusqu'à préset des algorithmes de tri par comparaiso. O sait que pour les meilleurs d'etre eux la complexité est e Θ( lg). E faisat quelques hypothèses sur les clés à trier, o peut utiliser des algorithmes e faisat pas appel à la comparaiso, et aisi obteir des complexités temporelles meilleures. Aisi le tri par déombremet pred comme hypothèse que l'o trie des etiers et que l'o coaît l'itervalle..k das lequel sot choisies les clés à trier. Le tri par déombremet détermie pour chaque clé le ombre de clés qui lui sot iférieures. Avec cette iformatio, la clé peut être placée au bo edroit das le tableau trié par u simple calcul d'adresse. Commet faire pour détermier le ombre de clés iférieures à ue clé doée sas utiliser de comparaiso? C'est là le rôle des hypothèses réductrices faites sur les clés. Comme o e trie que des etiers et que les tableaux sot idicés par des etiers, la valeur d'ue clé sert égalemet d'idice de tableau. Algorithme issu de [, page ] TRI-DENOMBREMENT(A, B, k) pour i à k faire C[i] fi pour pour j à faire C[A[j]] C[A[j]] + fi pour 7 pour i à k faire 8 C[i] C[i] + C[i - ] 9 fi pour pour j à faire B[C[A[j]]] A[j] C[A[j]] C[A[j]] - fi pour Le tri a besoi de deux tableaux supplémetaires pour trier. Le tableau A[..] est le tableau iitial coteat les clés à trier. Le tableau B[..] cotiet le résultat fial. Le tableau C[..k] sert à déombrer le ombre de clés iférieures à ue clé doée. La première phase (boucle des liges à ) place das chaque case C[i] le ombre de clés égales à i das le tableau A. Esuite, la secode phase (boucle des liges 7 à 9) fait la somme des valeurs obteues afi d'avoir das chaque case C[i] le ombre de clés iférieures ou égales à i. Il e reste alors qu'à lire das C l'idice fial de chacu des élémets du tableau A pour les placer das le tableau B (boucle des liges à ).

Exemple d'applicatio sur la suite d'etiers,,,,, 9 : tableau iitial A 9 iitialisatio de C C 7 8 9 7 8 9 7 8 9 phase C 7 8 9 7 8 9 7 8 9 phase C 7 8 9 7 8 9 7 8 9 tableau trié B 9 Etude de la complexité : Cet algorithme est isesible à la distributio des doées aisi qu'à la présece ou o de clés e plusieurs exemplaires. O 'a doc pas de cas favorable ou défavorable. La première boucle (iitialisatio de C) est e Θ (k). La secode boucle (phase ) est e Θ(). La troisième boucle (phase ) est e Θ (k). La derière boucle (remplissage de B) est e Θ (). Au total, la complexité de ce tri est doc Θ ( + k). L'espace mémoire supplémetaire écessaire pour effectuer le tri est e Θ ( + k). 7

. D'autres algorithmes. Tri à bulles Nom aglais : bubble sort - Propriétés : tri itere, o stable, sur place Complexité das tous les cas e Θ (²) Le pricipe de cet algorithme est d'échager les clés cotiguës qui e sot pas correctemet triées. So om viet du fait que les clés se déplacet comme des bulles das ue flûte de champage. Elles remotet d'ailleurs si letemet que cela explique la complexité quadratique. Algorithme issu de [, page ] TRI-BULLES(A) pour i à faire pour j à i + faire si A[j] < A[j - ] alors PERMUTER(A, j, j - ) fi si fi pour 7 fi pour. Tri par sélectio Nom aglais : selectio sort - Propriétés : tri itere, stable, sur place Complexité das tous les cas e Θ (²) Le pricipe de cet algorithme est de choisir l'élémet miimum et de le placer e première positio, puis le secod placé e secode positio,... TRI-SELECTION(A) pour i à faire mi i pour j i + à faire si A[mi] > A[j] alors mi j fi si 7 fi pour 8 si mi > i alors 9 PERMUTER(A, i, mi) fi si fi pour. Tri par base Nom aglais : radix sort - Propriétés : tri itere, stable, e trie pas sur place Ce tri 'utilise pas de comparaiso etre les clés. Il se base sur la représetatio itere de la clé. Aisi, pour trier des etiers de c chiffres, l'algorithme utilise u tri stable pour trier les clés selo chacu de ces chiffres e commeçat par le chiffre des uités. Pour le tri d'etiers, o va choisir le tri par déombremets comme sous-tri. 8

Algorithme issu de [, page ] TRI-BASE(A, c) pour i à c faire utiliser u tri stable pour trier A selo le chiffre i fi pour La complexité de ce tri pour trier etiers de c chiffres (compris das l'itervalle..k-) est Θ( c ( + k)). C'est à dire que la complexité est liéaire.. Tri par paquets Nom aglais : bucket sort - Propriétés : tri itere, stable, e trie pas sur place Ce tri 'utilise pas de comparaiso etre les clés. Comme le tri par déombremet il se sert de la valeur des clés pour calculer u idice de tableau. L'hypothèse faite sur les doées e etrée du tri est qu'elles sot réparties de maière uiforme sur l'itervalle [, [ (e pratique, o peut toujours ormaliser les doées pour les rameer das cet itervalle. L'hypothèse importate est doc la distributio uiforme). L'idée est de partager cet itervalle [, [ e paquets de même taille, puis de placer les doées das ces paquets. Das u deuxième temps, chacu des paquets est trié à l'aide d'u tri auxiliaire puis les doées sot réassemblées e parcourat les paquets das l'ordre. O utilise des listes chaîées pour stocker les clés das les paquets. Algorithme issu de [, page 8] TRI-PAQUETS(A) pour i à faire isérer A[i] das la liste B[ [i] A ] fi pour pour i à - faire trier la liste B[i] via u tri par isertio fi pour 7 cocatéer les listes B[], B[],..., B[ - ] das l'ordre La complexité de ce tri pour ue distributio uiforme est liéaire.. Tri de Shell Nom aglais : Shell sort - Propriétés : tri itere, stable, sur place Le tri de Shell est ue variate du tri par isertio. O sait que le tri par isertio foctioe bie sur des tableaux presque triés. Le tri de Shell utilise u séquece d'etiers, appelée séquece-h. Il effectue pour chaque etier de cette séquece u tri par isertio sur les élémets d'idice i, i+h, i+h,... Partat d'ue valeur de h très grade pour arriver à, l'algorithme orgaise petit à petit le tableau pour le redre plus facile à trier lorsque h = (tri par isertio classique). 9

Algorithme issu de http://e.wikipedia.org/wiki/shell_sort TRI-SHELL(A, ) h-seq[] = {97, 79, 9878, 89, 9, 77, 9,98, 8,,, 8,, 7,, } pour k à faire h h-seq[k] pour i h à - faire v = A[i] j = i 7 tat que (j h) et (A[j - h] > v) faire 8 A[j] A[j - h] 9 j j - h fi tat que A[j] v fi pour fi pour Tout l'ejeu est de trouver la boe séquece-h. Complexité Séquece-h Pratt, 97 Θ ( log) 9 8 8 7 8... Paperov-Stasevich, 9 Θ / 7 7... ( ) Pratt, 97 Sedgewick, 98 ( ) / Ο 8 77 8 7 9 77...

. Quelques exemples d'implémetatio et d'utilisatio de tris. Librairie stadard Java Il existe deux pricipaux algorithmes de tri das la librairie Java stadard (JDK.). Ils se trouvet das la classe utilitaire java.util.arrays. public static void sort(object[] a) Ce premier algorithme est utilisé pour trier les tableaux d'istaces quelcoques. Il suffit que les élémets implémetet la méthode compareto de l'iterface Comparable et qu'ils soiet comparables etre eux. Das ce cas, l'algorithme est u tri fusio amélioré. La documetatio explique que ce tri est stable et que les performaces e lg sot garaties. E regardat le code source o s'aperçoit qu'u tri par isertio est utilisé pour les tableaux de taille iférieure à 7. De plus si le tableau est déjà trié, l'algorithme e le re-trie pas. public static void sort(log[] a) Ce deuxième algorithme est utilisé pour trier les tableaux de types primitifs. O regardera la versio permettat de trier les etiers de type log. Les implémetatios pour les autres types primitifs sot très similaires. Il s'agit d'ue versio améliorée du tri rapide, adaptée d'u algorithme de J. Betley et D. McIlroy de 99. Si la taille du tableau est iférieure à 7, u tri par isertio est utilisé. Etre 8 et u tri rapide médiae-de-trois est utilisé, et au delà il s'agit d'u tri rapide pseudo-médiae-de-euf. Il s'agit de la versio vue das [] e remplaçat le tri rapide stadard par le tri par isertio pour les plus petits esembles.. Microsoft Word et Excel Howard Kaikow propose sur so site web u utilitaire permettat de comparer différetes implémetatios d'algorithmes de tri sur des jeux de doées aléatoires. Il itègre otammet des appels aux tris de Microsoft Word et Excel. Les doées sot placées das u documet Word ou bie das ue feuille de calcul Excel puis sot triées par les différets algorithmes. O obtiet le temps e millisecodes écessaire aux tris. Les résultats se passet de commetaires. Doées Tris Coteat Type Nombre Quick Sort Excel Sort Word Sort Worksheet Etiers 8 88 Worksheet Etiers 9 Worksheet Etiers Worksheet Etiers 8 Worksheet Chaîes 9 98 Worksheet Chaîes Worksheet Chaîes 79 9 Worksheet Chaîes 97 79 Documet Etiers 8 Documet Etiers 89 9 Documet Etiers 9 7 Documet Chaîes 8 Documet Chaîes 7 Documet Chaîes 7 http://www.mv.com/ipusers/stadards/

. Oracle O a vu la méthode utilisée par les bases de doées pour effectuer u tri sur u grad esemble de doées (voir chapitre..). O va mettre e évidece ce comportemet sur ue istace Oracle 8..7. La taille des doées est exprimée e ombre de blocs. Sur cette istace les blocs fot 9 octets. Deux paramètres sot importats pour ce test : db_block_buffer : espace mémoire cache pour la lecture des blocs de tables sort_area_size : espace mémoire pour les tris O va utiliser ue table role coteat eregistremets, et plus particulièremet la coloe idacteur qui cotiet clés différetes réparties aléatoiremet. La table complète occupe blocs sur le disque. O fixe db_block_buffer à blocs. Aisi la première fois que la table est parcourue elle est etièremet stockée e mémoire cache. Nous allos faire varier sort_area_size et voir commet évolue le temps et le ombre de lectures de blocs écessaire pour trier l'esemble des clés idacteur de la table role. La requête utilisée est : select /*+ full(role) */ idacteur from role order by idacteur asc; Cette requête est systématiquemet exécutée deux fois pour avoir les résultats avec et sas le rapatriemet des blocs de la table. O pourra aisi isoler les lectures liées au tri. O obtiet les résultats suivat (le temps est e ms): Exécutio Exécutio sort_area_size lectures temps lectures temps 9 9 9 7 97 8 9 8 9 8 8 9 8 8 7 9,9 9 89 8,9 Le ombre de lectures de blocs de la secode exécutio correspod bie uiquemet aux opératios de tri (l'écart avec le ombre de lectures de la première exécutio cocorde avec la Ο. log taille de la table). Ce ombre de lectures est e théorie e ( ) sort_ area_ size Ceci est vérifié sur le graphe suivat (sort_area_size compris etre et ), pour lequel o a égalemet fait apparaître la droite issue de la régressio liéaire sur ce jeu de test :

y =,897x -, 8 Lectures 8 N LOGsort_area_size(N)

. Simulatios sur ordiateur Le but de ces simulatios est de vérifier sur des jeux de test le comportemet des algorithmes étudiés. Ces algorithmes ot été implémetés e Java et ot été exécutés sur des tableaux de doées géérées aléatoiremet. Tous les tests ot été fait sur u ordiateur portable équipé d'u processeur Petium GHz, de Mo de mémoire avec u JDK.. sous Widows XP.. Détails sur l'implémetatio La mesure du temps e Java 'est pas très précise (~ ms). Les mesures ot doc systématiquemet été faites sur des jeux de doées suffisammet grads ou bie répétés suffisammet de fois pour palier à ce problème. Afi de pouvoir facilemet chager le type de doées à trier, ous avos utilisé ue iterface MoitoredData héritat de l'iterface Java classique Comparable. E Java la comparaiso de deux istaces d'ue même classe implémetat l'iterface Comparable se fait grâce à la méthode compareto qui retoure u etier (égatif si la première istace est strictemet iférieure à la secode, positif si elle est strictemet supérieure et ul si les deux istaces sot égales). A titre d'exemple voici l'implémetatio du tri par isertio : public MoitoredData[] isertiosort(moitoreddata[] tab, it l, it r) { MoitoredData key = ull; it i = ; for (it j = l+; j <= r; j++) { key = tab[j]; i = j - ; while ((i >= l) && (tab[i].compareto(key) > )) { tab[i + ] = tab[i]; i = i - ; } tab[i + ] = key; } retur tab; } Il e reste plus qu'à défiir ue classe héritat de MoitoredData représetat les doées que l'o souhaite trier. O remarquera que tous les déplacemets de doées sot e fait des déplacemets de référeces (poiteurs) et e sot doc pas coûteux e temps. La plupart des tests qui suivet ot été déroulés sur des etiers à l'aide de la classe SimpleIteger. O a mesuré le temps écessaire pour effectuer u échage et ue comparaiso das u tableau : temps pour échages de log : 7 ms temps pour comparaisos de log : ms temps pour échages de SimpleIteger : 8 ms temps pour comparaisos de SimpleIteger : 98 ms Das le cas des istaces de SimpleIteger, le temps d'ue comparaiso est supérieur au temps d'u échage d'eviro % alors que das le cas du type primitif log il est iférieur de % Les écarts etre les deux types de doées s'expliquet par les couches objets et les appels de méthodes.. Les types de distributios d'etiers Afi de modéliser les différetes orgaisatios de doées que l'o est susceptible de recotrer, ous avos défii 9 distributios possibles. Pour chacue d'etre elles o peut doc géérer u jeu de test e fourissat paramètres : le ombre d'etiers das le jeu

u etier miimum u etier maximum Les jeux de doées sot sauvegardés sur fichiers afi d'effectuer les tests sur les différets algorithmes avec les mêmes doées. Les illustratios suivates ot été géérées pour etiers compris etre et. Distributio croissate et décroissate: Ce type de distributios fourit des doées triées allat du miimum au maximum (ou l'iverse). S'il y a plus d'etiers à géérer que e le permet l'écart etre le miimum et le maximum, des doublos serot ajoutés. 9 8 9 8 7 7 Distributio siusoïde : Les doées sot géérées sous forme de siusoïde. Il y a doc quelques doublos. 9 8 7 Distributios presque croissate, presque décroissate, presque siusoïde : Pour les trois distributios précédetes il y a ue variate permettat u écart de x % des valeurs. Il peut doc y avoir des doublos. Les distributios suivates ot été géérées avec u écart de %. 9 8 9 8 7 7

Distributio gaussiee : Les doées sot géérées de maière aléatoire, mais selo ue distributio gaussiee, c'est à dire qu'elles sot plutôt regroupées autour de la valeur médiae. 9 8 7 Distributio aléatoire et mélagée: Ces deux distributios sot de type aléatoire. Toutefois, la distributio mélagée assure qu'il 'y a pas de doublo (les etiers etre le miimum et (le miimum + le ombre de doées) sot placés das le tableau puis mélagés de maière aléatoire). 9 8 7. Résultats gééraux Les tableaux ci-dessous présetet les temps d'exécutio et le ombre de comparaisos obteus e faisat la moyee sur jeux de doées (miimum:, maximum: ), chacu état exécuté fois. Il maque certaies valeurs pour le tri rapide sur les distributios croissates et décroissates. Ceci est dû à u débordemet de la pile créé par la trop grade profodeur des appels récursifs liée à u partitioemet déséquilibré (voir chapitre.). Les résultats théoriques sot vérifiés : - le tri par isertio foctioe bie sur les tableaux presque triés - le ombre de comparaisos du tri par isertio correspod aux valeurs théoriques à 99 % - le ombre de comparaisos du tri rapide correspod aux valeurs théoriques à 99 % - le tri rapide aléatoire permet de lisser les comportemets selo les distributios par rapport à la versio stadard - la versio améliorée du tri rapide avec coupure pour M=7 permet u gai de temps de % - le tri fusio est isesible à la distributio des doées O remarque que le tri par tas est globalemet % mois performat que le tri rapide. Le tri de Java est le plus performat.

Tri par isertio distributio croissate décroissate presque croissate presque décroissate siusoide presque siusoide aléatoire mélagée gauss ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp 999, 99,7 9 78 9,8 9 7, 7,7 7,7 8 77,,78 99,7 7,9 8, 88 8,7 8 7,8 8 778 8,88 7 8 7,9 8 8 7, 7 999 9, 97,9 97 8 99,7 9, 9 7 8 8,7 9,9 8 7, 9 88,7 8 9 999, 9 99,87 9 799, 99 7 89,8 7 99 9, 7 8 99 9, 7 8,7,9 97 Tri à bulles distributio croissate décroissate presque croissate presque décroissate siusoide presque siusoide aléatoire mélagée gauss ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp, 99,8 99 7,9 99, 99,8 99 8, 99 9,8 99,77 99 9,9 99 9, 7 9,8 7, 7 8,8 7 9, 7 7, 7,8 7, 7,8 7, 97 8, 97 97, 97 7, 97 9, 97 9,8 97 8, 97,7 97,8 97,88 9 99, 9 99, 9 99 7, 9 99 97,8 9 99 7, 9 99 779,7 9 99 8,9 9 99 7,9 9 99 Tri fusio distributio croissate décroissate presque croissate presque décroissate siusoide presque siusoide aléatoire mélagée gauss ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp, 9 97,8 9 97, 9 97, 9 97,7 9 97, 9 97,7 9 97,7 9 97, 9 97, 8, 8, 8, 8, 8, 8, 8, 8, 8, 88,7 88, 88, 88 7, 88, 88,9 88 7,8 88 7,7 88,,98,,,,,,, Tri Java (tri fusio modifié) distributio croissate décroissate presque croissate presque décroissate siusoide presque siusoide aléatoire mélagée gauss ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp, 999, 7, 8, 8 8, 78, 8, 8 997, 9,8 9, 99,7 79,7 7,7, 8,,98 87, 88, 899, 999, 979,8 7,9,,7 7,8 78, 7, 77, 9 999 9, 7 99,9,9, 9,9 7,9 9,, 7

Tri rapide stadard distributio croissate décroissate presque croissate presque décroissate siusoide presque siusoide aléatoire mélagée gauss ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp 7, 99 9,8 99,7 8,8 8,9 8, 9, 79,,9 88,7 7,7 7,8 999, 79,9 9 7,8 9,, 8, 9 8, 97,8 97 9, 89 89 9, 9, 99 78, 88,8 9 87,7 7 9, 7 8,7 8 7,9 9 87 8, 7 78 9, 89 7,7 87,, 9 88 Tri rapide aléatoire distributio croissate décroissate presque croissate presque décroissate siusoide presque siusoide aléatoire mélagée gauss ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp, 98, 98, 99,8 97,9 9, 7, 98, 7, 9, 98,8 897,, 9, 8, 7,, 7, 97, 7 77, 7 9, 7 8, 7 9, 7 78, 7 9, 7 8,9 7 9, 7 8,8 8,9, 8,,7,9 7 9, 7 Tri rapide stadard + tri isertio pour M=7 distributio croissate décroissate presque croissate presque décroissate siusoide presque siusoide aléatoire mélagée gauss ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp 7, 99 8,87 99 9,7 8 8, 8,7 8 8, 7, 8, 79,78,8 7,9 7,7,9 8 8, 9 8,7,, 9,97 77 87,9 97 8 8,9 97 9 9,9 89 97 9, 7 9,87 99, 78, 9 97, 7 9, 7 879, 8 7 7,7 9 79 8, 7 78 9 9, 88 9,88,89,7 7 9 Tri par tas distributio croissate décroissate presque croissate presque décroissate siusoide presque siusoide aléatoire mélagée gauss ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp ms comp,8 7 8, 9, 9,,,7 77,8 879,7 8, 8,8,9 9,8 9 8, 7 9,9 8 9, 8 7 8 89,9 8 8,8 8 8,9, 7,8 8 9,99 8 9,9, 7 9,9 7 78, 7 8,79 7 7 7,97 7, 8 8, 97 7, 8 7, 7,8 7, 7 7,97 97 7,97 8

. Résultats sur de petits tableaux Les temps ci-dessous correspodet à exécutios (moyee sur jeux différets de distributio mélagée) : isertio rapide,,9,7,,, 9, 7,, 99,8 7 79,9 9, 8 9,,9 9 8,9 8,, 7,7 8, 8,8,,, 8,,,,, 8,,,,, 7 8 9 isertio rapide O voit que pour de petits tableaux le tri par isertio est plus rapide que le tri rapide stadard. Ceci est vrai jusqu'à = eviro.. Sesibilité aux doublos du tri rapide Puisque toutes les études sur le tri rapide ot été faites e preat comme hypothèse que les clés étaiet uiques das la distributio, ous avos fait tourer quelques jeux sur lesquels ous faisat varier le ombre de fois qu'ue clés est présete. O a pris des distributio aléatoire de clés pour lesquelles o a fait varier le maximum. Le tri rapide stadard a été utilisé. Les performaces se dégradet dès que des doublos apparaisset. max / max ms comp,8 77,8 9,889 87,,79 7, 8,98 7, 7,8, 7,7 9,7 max / max ms comp 7,7 97,, 7,,, 7, 8,7, 7, 8,9, 7,9 9, / max 9

. Comparaiso des deux tris de Java Les temps ci-dessous correspodet à exécutios (moyee sur jeux différets de distributio mélagée) : log SimpleIteger 9,,9 87,, 9,9 8 8 log SimpleIteger Les différeces s'expliquet par l'écart etre le temps de comparaiso de deux SimpleIteger et le temps de comparaiso de deux log (voir.).

Coclusio A travers les différetes aalyses théoriques et les tests déroulés sur ordiateur, o peut se redre compte de la diversité des algorithmes de tri. Cette étude a permis de mettre e avat u certai ombre de paramètres qu'il faut bie predre e compte au momet de choisir u algorithme de tri. U poit importat est de bie défiir le modèle des doées à trier (type, distributio, bores), aisi que l'utilisatio exacte qui sera faite de l'algorithme (librairie géérique, utilisatio pour u problème très spécifique). Les deux pricipaux tris par comparaisos sot le tri fusio et le tri rapide. Le premier est sûr de partitioer de maière équilibré à chaque étape, mais il déplace les doées mois rapidemet vers leur positio fiale, à l'iverse du secod. Les optimisatios sur ces deux tris ot pour but de les redre optimaux au regard de la limite théorique sur ce type de tri. Globalemet les deux algorithmes de tri implémetés das la librairie Java sot performats état doé qu'ils sot géériques et 'ot pas d'hypothèses particulières sur les doées. Pour ue utilisatio plus poussée, il faut peser à regarder les versios optimisées das les rapports de recherche. Il e faut pas hésiter o plus à passer de la versio récursive à la versio itérative des algorithmes "diviser pour réger". Lorsque c'est possible, il e faut pas oublier les tris liéaires. U certai ombre de pistes 'ot pas été abordées mais pourraiet faire l'objet d'ue étude plus poussée : algorithmes de tri sur des listes chaîées plutôt que sur des tableaux les algorithmes spécifiques de tri de chaîes de caractères les tris exteres sur bades magétiques lie etre le tri et la recherche de clés les algorithmes de tri sur machies multi-processeurs Si o e juge par la fréquece des parutios des laboratoires iformatiques sur la thématique du tri, il semble que, malgré so acieeté, ce sujet soit ecore ameé à voir des optimisatios, et peut être de ouveaux algorithmes.

Bibliographie [] T. CORMEN, C. LEISERSON, R. RIVEST et C. STEIN, Itroductio à l'algorithmique ème éditio, Paris, éditios Duod,, chapitres à 8 [] D. BEAUQUIER, J. BERSTEL et P. CHRETIENNE, Elémets d'algorithmique, Paris, éditios Masso, 99, chapitres et [] R. FAURE, B. LEMAIRE, C. PICOULEAU, Précis de recherche opératioelle ème éditio, Paris, éditios Duod,, chapitre [] P. RIGAUX et M. SCHOLL, Cours de Bases de Doées Aspects Systèmes(draft), septembre [] S. SEIDEN, Theoretical Computer Sciece Cheat Sheet, 99, http://www.tug.org/texshowcase/cheat.pdf [] A. AGGARWAL et J. S. VITTER, The iput/output of sortig ad related problems, INRIA RR-7, septembre 987 [7] R. SEDGEWICK et P. FLAJOLET, Itroductio à l'aalyse des algorithmes, Paris, Iteratioal Thomso Publishig Frace, 99, chapitre [8] R. SEDGEWICK, Algorithmes e lagage C, Paris, éditios Duod,, chapitres, 9, et [9] R. SEDGEWICK et J. BENTLEY, Quicksort is optimal, Staford Uiversity,, http://www.cs.priceto.edu/~rs/talks/quicksortisoptimal.pdf [] M. DURAND, Asymptotic aalysis of a optimized quicksort algorithm, INRIA Rocuecourt,, http://algo.iria.fr/durad/ [] S. BHUTORIA et G. KONJEVOD, Quickeig quick-sort,, http://www.public.asu.edu/~sbhutori/docs/reas.pdf