INF220 Algorithme de tri. Jean-François Berdjugin IUT1, Département SRC, Grenoble

Documents pareils
Les arbres binaires de recherche

Algorithmique I. Algorithmique I p.1/??

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)

1 Recherche en table par balayage

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

Quelques Algorithmes simples

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

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

GUIDE PRATIQUE déplacements professionnels temporaires en France et à l étranger

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

Algorithmique, Structures de données et langage C

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Threads. Threads. USTL routier 1

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

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

Bases de données documentaires et distribuées Cours NFE04

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

Chapitre 10. Les interfaces Comparable et Comparator 1

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

Solutions du chapitre 4

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Recherche dans un tableau

4. Les structures de données statiques

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

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Java Licence Professionnelle CISII,

Chapitre 7. Récurrences

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

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

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

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Cours 1 : Qu est-ce que la programmation?


Structure d un programme et Compilation Notions de classe et d objet Syntaxe

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

Les structures de données. Rajae El Ouazzani

Package Java.util Classe générique

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Algorithmique et Programmation

ACTIVITÉ DE PROGRAMMATION

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Corrigés des premiers exercices sur les classes

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

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

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

Projet de programmation (IK3) : TP n 1 Correction

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

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

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

as Architecture des Systèmes d Information

Cours d Algorithmique et de Langage C v 3.0

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

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

MIS 102 Initiation à l Informatique

Généralités sur le Langage Java et éléments syntaxiques.

Algorithmique et Programmation, IMA

Derrière toi Une machine virtuelle!

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

UML Diagramme de communication (communication diagram) Emmanuel Pichon 2013

Chapitre 5 : Flot maximal dans un graphe

Analyse Combinatoire

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Chapitre VI- La validation de la composition.

Conception des systèmes répartis

Programme Compte bancaire (code)

Programmer en JAVA. par Tama

1.6- Génération de nombres aléatoires

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

Chapitre 10 Arithmétique réelle

Machines Virtuelles. et bazard autour. Rémi Forax

Programmation linéaire

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

Corrigé des TD 1 à 5

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

SUPPORT DE COURS. Langage C

Adama MBODJI MBODJ.SYSTEM

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

Conventions d écriture et outils de mise au point

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Programmation Par Objets

Évaluation et optimisation de requêtes

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

Corrigé des exercices sur les références

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Langage Java. Classe de première SI

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

CHAPITRE V. Recherche et tri

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

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

Utilisation d objets : String et ArrayList

5 Sur la station d exploitation de la documentaliste, se connecter sous Altair, comme documentaliste et tester toutes les sauvegardes...

Un ordonnanceur stupide

Quelques algorithmes simples dont l analyse n est pas si simple

Calculabilité Cours 3 : Problèmes non-calculables.

Map-Reduce : un cadre de programmation parallèlle pour l analyse de grandes données. Stéphane Genaud ENSIIE

Transcription:

INF220 Algorithme de tri Jean-François Berdjugin IUT1, Département SRC, Grenoble

Tri Nous passons notre vie à organiser, trier des données par ordre de mérite, par ordre alphabétique, par distance (Z-sorting), Un ordinateur si il calcul mal, trie bien. Un algorithme juste est-il performant, suivant quels critères (mémoire, temps d éxecution, accès disques, )? Un problème important qui à donné naissance aux méthodes formelle (C.A.R.Hoare)

Tri Algorithme séquentiel parallèle Algorithme itératifs Récursifs Tri : Interne externe Performance en temps (fonction des données) Meilleur cas Plus mauvais cas

Temps d éxecution Temps d exécution en log 2 n, n, n log 2 n, n 2 => N=15 min = 900 s = 900 000 ms Log 2 900 000 =19 ms n log 2 900 000 =17 801 609 ms = 17 801 s = 296 s = 5 min 900 000 2 = 8,1 10 11 ms = 9 jours => Ça vaut le coup d étudier des algorithme de tri. 12000 10000 8000 6000 4000 2000 0 0 20 40 60 80 100 120 log(n,2) n n log(n,2) n2

Trier Trier c est ordonner suivant une relation d ordre (relation binaire, réflexive, antisymétrique, transitive) Exemples :, ordre alphabétique, grade,

Algorithme lents Les algorithmes que nous allons étudier sont dit lents, leur plus mauvais cas d exécution a une complexité asymptotique en O(n 2 ). Pour aller plus vite (O(n ln n)), il nous faut soit des arbres et la récurrence, soit des tris externes soit du parallélisme

Tri par insertion Idée : on prend les éléments les uns après les autres et on les insère parmi les éléments déjà triés => Une boucle pour parcourir le tableau Une boucle pour insérer à la bonne place

public static void triinsertion(int tableau[]) { int i,j, m; int l = tableau.length -1; for (i=1; i <= l; i++) { m = tableau[i]; j=i; while (j>0 && tableau[j-1]>m) { tableau[j]=tableau[j-1]; j=j-1; } tableau[j]=m; } } Tri par insertion

Tri par insertion 10 8 12 6 8 0 11

Tri par insertion 10 8 12 6 8 0 11 8 10 12 6 8 0 11 8 10 12 6 8 0 11 6 8 10 12 8 0 11 6 8 8 10 12 0 11 0 6 8 8 10 12 11 0 6 8 8 10 11 12

Tri par sélection Idée : trouver le plus petit et le placer en premier puis trouver le plus petit parmi les éléments non placés et le placer en second, etc. => Une boucle de parcourt du tableau Une boucle pour trouver le min

Tri par sélection public static void triselection(int tableau[]) { int i,j,m, min; int l = tableau.length - 1; for (i=0; i< l; i++) { min = i; for (j=i+1; j<=l; j++ ) { if (tableau[j]< tableau[min]) min=j; } m=tableau[i]; tableau[i] = tableau[min]; tableau[min] = m; } }

Tri par selection 10 8 12 6 8 0 11

Tri par selection 10 8 12 6 8 0 11 0 8 12 6 8 10 11 0 6 12 8 8 10 11 0 6 8 12 8 10 11 0 6 8 8 12 10 11 0 6 8 8 10 12 11 0 6 8 8 10 11 12

Tri a bulle Idée : permuter les éléments adjacents mal placés et parcourt autant de fois que nécessaire du tableau => Une boucle pour sélectionner les éléments Une boucle pour les permutations

Tri à bulles public static void tribulle(int tableau[]) { int i,j,m; int l = tableau.length -1; for ( i=l; i>=0; i--) for (j=1; j<=i; j++) if (tableau[j-1] > tableau[j]) { m = tableau[j-1]; tableau[j-1] = tableau[j]; tableau[j]=m; } }

Tri à bulle 10 8 12 6 8 0 11

Tri à bulle 10 8 12 6 8 0 11 8 10 12 6 8 0 11 8 10 12 6 8 0 11 8 10 6 12 8 0 11 8 10 6 8 12 0 11 8 10 6 8 0 12 11 8 10 6 8 0 11 12

Tri à bulle 8 10 6 8 0 11 12 8 10 6 8 0 11 12 8 6 10 8 0 11 12 8 6 8 10 0 11 12 8 6 8 0 10 11 12 8 6 8 0 10 11 12

Tri à bulle 8 6 8 0 10 11 12 6 8 8 0 10 11 12 6 8 8 0 10 11 12 6 8 0 8 10 11 12 6 8 0 8 10 11 12 6 8 0 8 10 11 12 6 0 8 8 10 11 12 6 0 8 8 10 11 12

Tri à bulle 6 0 8 8 10 11 12 0 6 8 8 10 11 12 0 6 8 8 10 11 12 0 6 8 8 10 11 12.. 0 6 8 8 10 11 12

Comparaison Complexité : Tri par insertion : en n² (double imbriquées) Tri par sélection : en n² Tri a bulle : en n² Mais d autres algorithme donc beaucoup reposent sur le principe de diviser pour régner existent : Tri par casier : en N, c est un algorithme de tri externe Tri par tas (tri par comparaison) : en N Log N

Tri par comparaison Principe comparer deux cases Si l on doit trier n éléments alors ces n éléments peuvent former n! combinaisons. Si l on utilise un arbre de résolution (représentant l ensemble des comparaisons) de hauteur h (chemin de la racine vers la feuille) alors le nombre maximal de feuille est de 2 h On a donc n! 2 h

Tri par comparaison A B C B B C A C A C A B A C B A B C B C A B A C B C A B A C C A B C B A

Tri par comparaison On a donc n! 2 h (6 8) <=> Log 2 (n!) log 2 (2 h ) Or la limite de n log 2 n = log 2 n! h est la limite inférieure de n log 2 n Il faudra au moins n log 2 n comparaison Bref dans le pire des cas on ne pas dépasser un certain niveau de performance Les algorithmes sont adaptés à des circonstances (des cas, des sous-problèmes).

Tri par casier La plage des données est limitée : On créer un tableau temporaire (les casiers) dont la taille est celle de la plage des données On range dans les casiers le nombre d occurrence des valeurs du tableau initial On parcours les casiers dans l ordre pour créer le tableau trié.

Tri casier public static void tricasier(int tableau[]){ int longueur=tableau.length; int mini=tableau[0]; int maxi=tableau[0]; for(int i=1;i<longueur;i++){ if(mini>tableau[i]) {mini=tableau[i];} if(maxi<tableau[i]) {maxi=tableau[i];}} int tmplong=maxi-mini+1; int tmptableau[]=new int[tmplong]; for(int i=0;i<tmplong;i++){ tmptableau[i]=0; } for(int i=0;i<longueur;i++) {tmptableau[tableau[i]-mini]++; } int compt=0; for(int i=0;i<tmplong;i++) { while(tmptableau[i]>0) { tableau[compt]=mini+i; tmptableau[i]--; compt++; }} }

Tri casier tableau 4 3 10 4 3 2 mini : 2 maxi : 10 tmplong: 9 1 2 2 0 0 0 0 1 2 3 4 5 0 0 1 6 7 8 casiers 2 3 4 5 6 7 8 9 10 tableau 2 3 3 4 4 10

La suite Les objets : un moyen de lier les données (les variables d instance) et les mécanismes portant sur ces données (les méthodes).