Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parChrystelle Gravel Modifié depuis plus de 8 années
1
I21 Algorithmique et programmation II David Gross-Amblard, Joël Savelli IEM-uB 2009-2010 - GFDL 1.2 CM 6/8 v1.1
2
i21 IEM-UB 2008-2009 GFDL 1.2 2 Plan du cours I.Rappels sur Java - types, instructions, procédures, fonctions... II.Programmation par objet - classe, composition, héritage, initiation à la modélisation Bonus III.Types de données et algorithmes - listes, piles, files, arbres, algorithmes de tri, algorithmes récursifs
3
i21 IEM-UB 2008-2009 GFDL 1.2 3 Types de données et algorithmes 1.Récursivité 2.Algorithmes de tri 3.Types de données
4
i21 IEM-UB 2008-2009 GFDL 1.2 4 Types de données et algorithmes 1.Récursivité 2.Algorithmes de tri 2.1 Définitions 2.2 Tri par sélection 2.3 Tri par insertion 2.4 Tri par échange (tri à bulle, tri rapide) 2.5 Tri fusion 2.6 Comparaisons des méthodes 2.7 Défi à 1 000 000 $ 1.Types de données
5
i21 IEM-UB 2008-2009 GFDL 1.2 5 2.1Tri : définition ● Un tableau d'entier t est dit trié en ordre croissant si pour tout indice i<j, t[i]<=t[j] ● Un tableau d'entier t est dit trié en ordre décroissant si pour tout indice i =t[j] ● Ex. 1 5 2 4 3 1 : pas trié 1 1 2 3 4 5 : trié en ordre croissant 5 4 3 2 1 1 : ordre décroissant
6
i21 IEM-UB 2008-2009 GFDL 1.2 6 Tri : définition ● S'étend à n'importe quelle relation d'ordre ● Ex. tableau de chaînes, ordre alphabétique ''Spirou'' ''Zorglub'' ''Fantasio'' : pas trié ''Fantasio'' ''Spirou'' ''Zorglub'' : ordre croissant ''Zorglub'' ''Spirou'' ''Fantasio'' : ordre décroissant
7
i21 IEM-UB 2008-2009 GFDL 1.2 7 Tri : définition ● Plusieurs clés ● Ordre lexicographique : (a,b) < (c,d) ssi a<c ou (a=c et b<d) ● Ex. Ordre lexicographique sur nom puis prénom (Onyme,Jeanne) (Saisrien,Jean) (Onyme,Anne) : non trié (Onyme,Anne)(Onyme,Jeanne)(Saisrien,Jean) : ordre croissant (Saisrien,Jean)(Onyme,Jeanne)(Onyme,Anne): ordre décroissant
8
i21 IEM-UB 2008-2009 GFDL 1.2 8 Tri : définition ● Algorithme : description non-ambiguë des actions à effectuer pour réaliser une tâche donnée, indépendante du langage de programmation ● Programme (ou méthode) associé à un algorithme : sa traduction en un langage de programmation (ex. Java)
9
i21 IEM-UB 2008-2009 GFDL 1.2 9 Tri : définition ● Algorithmique : sciences des algorithmes ● Concevoir un algorithme : difficile ! Longue réflexion papier-crayon avant programmation ● (un) Algorithme de tri : (une) description des actions à effectuer pour trier une collection de données (ex. un tableau) ● Dans la suite, objectif : ordre croissant
10
i21 IEM-UB 2008-2009 GFDL 1.2 10 Types de données et algorithmes 1.Récursivité 2.Algorithmes de tri 2.1 Définitions 2.2 Tri par sélection 2.3 Tri par insertion 2.4 Tri par échange (tri à bulle, tri rapide) 2.5 Tri fusion 2.6 Comparaisons des méthodes 2.7 Défi à 1 000 000 $ 1.Types de données
11
i21 IEM-UB 2008-2009 GFDL 1.2 11 2.2 Tri par sélection ● Principe : – trouver le minimum du tableau – le placer en tête du tableau – recommencer avec le reste du tableau ● Tri par sélection directe : parcours séquentiel du tableau pour trouver le minimum
12
i21 IEM-UB 2008-2009 GFDL 1.2 12 Tri par sélection directe : exemple |12 11 10 9 5 8 3 6(2) 2|12 11 10 9 5 8 (3)6 2 3|12 11 10 9 (5) 8 6 2 3 5|12 11 10 9 8 6 etc. 2 3 5 6 8 9 10 11 12|fini ● |fin de la partie triée, () minimum
13
i21 IEM-UB 2008-2009 GFDL 1.2 13 Tri par sélection directe ● Algorithme : triSelectionDirecte(tableau t) pour i allant de 0 à taille(t)-2 entier indiceMin = i; pour j allant de i+1 à taille(t)-1 si (t[j]<t[indiceMin]) indiceMin=j; échanger les valeurs de t[i] et t[indiceMin]
14
i21 IEM-UB 2008-2009 GFDL 1.2 14 Types de données et algorithmes 1.Récursivité 2.Algorithmes de tri 2.1 Définitions 2.2 Tri par sélection 2.3 Tri par insertion 2.4 Tri par échange (tri à bulle, tri rapide) 2.5 Tri fusion 2.6 Comparaisons des méthodes 2.7 Défi à 1 000 000 $ 1.Types de données
15
i21 IEM-UB 2008-2009 GFDL 1.2 15 2.3 Tri par insertion ● Principe : – La partie gauche du tableau contient les données déjà triées – Pour tout nouvel élément, trouver sa position dans la partie gauche, et l'insérer ● Tri par insertion séquentielle : – parcourir séquentiellement le tableau pour trouver la position
16
i21 IEM-UB 2008-2009 GFDL 1.2 16 Tri par insertion séquentielle 2| (5) 1 6 3 10 7 2 5|(1) 6 3 10 7 1 2 5|(6) 3 10 7 1 2 5 6|(3)10 7 1 2 3 5 6|(10)7 1 2 3 5 6 10|(7) 1 2 3 5 6 7 10 | fini
17
i21 IEM-UB 2008-2009 GFDL 1.2 17 Tri par insertion séquentielle ● Algorithme: triSequentiel(t) pour i allant de 2 à longeur(t)-1 courant=t[i] j=i-1 courantEstSupérieur=vrai tant que j>0 et courantEstSupérieur si t[j]<courant alors courantEstSupérieur=faux sinon t[j+1]=t[j] j=j-1 t[j+1]=courant
18
i21 IEM-UB 2008-2009 GFDL 1.2 18 Types de données et algorithmes 1.Récursivité 2.Algorithmes de tri 2.1 Définitions 2.2 Tri par sélection 2.3 Tri par insertion 2.4 Tri par échange (tri à bulle, tri rapide) 2.5 Tri fusion 2.6 Comparaisons des méthodes 2.7 Défi à 1 000 000 $ 1.Types de données
19
i21 IEM-UB 2008-2009 GFDL 1.2 19 2.4 Tri par échange ● Principe : tableau t non trié ● indice 0 1 2345678 ● valeur 12 1110958362 ● Propriété (élémentaire) : si un tableau t n'est pas trié en ordre croissant, il existe i t[j] ● Par exemple : t[0]>t[1] ● Les échanger pour supprimer ce désordre local
20
i21 IEM-UB 2008-2009 GFDL 1.2 20 Tri à bulle (bubble sort) ● Principe : réorganiser localement le tableau de proche en proche jusqu'à ce qu'il ne subsiste plus aucun désordre ● Pour un indice i parcourant les indices du tableau – si t[i]>t[i+1], inverser t[i] et t[i+1] ● Si un désordre a été rencontré, recommencer ● Sinon, terminé
21
i21 IEM-UB 2008-2009 GFDL 1.2 21 Exemple ● 1er passage (12>11) 10 9 5 8 3 6 2 : échange 11 (12> 10)9 5 8 3 6 2 : échange 11 10 (12>9)5 8 3 6 2 : échange 11 10 9 (12>5)8 3 6 2 : échange 11 10 9 5 (12>8)3 6 2 : échange 11 10 9 5 8 (12>3)6 2 : échange 11 10 9 5 8 3 (12>6)2 : échange 11 10 9 5 8 3 6 (12>2): échange 11 10 9 5 8 3 6 2 12: on a rencontré des désordres, on recommence
22
i21 IEM-UB 2008-2009 GFDL 1.2 22 Exemple ● 2eme passage : (11>10) 9 5 8 3 6 2 12: échange... 10 9 5 8 3 6 2 (11<12):pas d'échange – on a rencontré un désordre, on recommence ● A chaque fois, les petites valeurs remontent le tableau (les petites bulles vont vers la surface)
23
i21 IEM-UB 2008-2009 GFDL 1.2 23 Algorithme du tri à bulle ● Algorithme TriBulle (tableau t) booléen désordre faire désordre=faux pour entier i de 0 à taille(t)-2 si (t[i] > t[i+1]) inverser(t,i,i+1); désordre=vrai; tant que désordre
24
i21 IEM-UB 2008-2009 GFDL 1.2 24 Tri rapide (quick sort) Principe:Tri par échange et partition Tableau de taille 1, fini Sinon, choisir une valeur pivot dans le tableau (ex. milieu) Partition en 3 parties (gauche,pivot,droite) – 2 11 3 9 (5) 8 4 6 10 – (gauche) (pivot) (droite)
25
i21 IEM-UB 2008-2009 GFDL 1.2 25 Tri rapide – 2 11 3 9 (5) 8 4 6 10 – (gauche) (pivot) (droite) ● Partie gauche : transférer les éléments [x] plus grands que le pivot à droite – 2 [11] 3 [9] (5) 8 4 6 10 – (gauche) (pivot) (droite) – 2 3 (5) 8 4 6 10 11 9
26
i21 IEM-UB 2008-2009 GFDL 1.2 26 Tri rapide ● Partie droite : transférer les éléments [x] plus petits que le pivot à gauche – 2 3 (5) 8 [4] 6 10 11 9 – (gauche) (pivot) (droite) – 4 2 3 5 8 6 10 11 9 ● Le pivot est alors à sa place définitive ● On recommence la même procédure sur la partie gauche, puis la partie droite ● Algorithme récursif !
27
i21 IEM-UB 2008-2009 GFDL 1.2 27 Tri rapide – 4 (2) 3 5 8 6 10 11 9 – (2) 3 4 5 8 6 10 11 9 – 2 (3) 4 5 8 6 10 11 9 – 2 3 4 5 8 6(10) 11 9 – 2 3 4 5 9 8 6 10 11 – 2 3 4 5 9(8) 6 10 11 – 2 3 4 5 6 8 9 10 11 ● (gras : positionné, () : pivot)
28
i21 IEM-UB 2008-2009 GFDL 1.2 28 Faire les partitions en place ● Tri en place : pas de nouveau tableau intermédiaire (contraire : tri par recopie) ● Astuce : deux curseurs dans la liste gauche et droite, partant des extrémités ● Sauter les valeurs bien placées ● Si on trouve une valeur mal placée de chaque côté, on les échange
29
i21 IEM-UB 2008-2009 GFDL 1.2 29 Partition en place (gauche) (pivot) (droite) : * curseurs 2 11 3 9 (5) 8 4 6 10 * * : 2,10 bien placées * * : 11,4 mal placées on permute 2 4 3 9 (5) 8 11 6 10 * * : 3,8 bien placées * * : 9,5 on permute 2 4 3 (5) 9 8 11 6 10 : fini
30
i21 IEM-UB 2008-2009 GFDL 1.2 30 Tri rapide ● Algorithme : triRapide(t,gauche,droite) i=gauche ; j=droite pivot=t[arrondi((i+j)/2)] répéter tant que t[i]<pivot faire i=i+1 tant que t[j]>pivot faire j=j-1 si (i<=j) alors échanger(t,i,j), i=i+1,j=j-1 tant que i<=j si (gauche<j) triRapide(1,gauche,j) si (droite>i) triRapide(1,i,droite)
31
i21 IEM-UB 2008-2009 GFDL 1.2 31 Tri rapide ● Pour tout trier : triRapide(t,0,taille(t)-1)
32
i21 IEM-UB 2008-2009 GFDL 1.2 32 Types de données et algorithmes 1.Récursivité 2.Algorithmes de tri 2.1 Définitions 2.2 Tri par sélection 2.3 Tri par insertion 2.4 Tri par échange (tri à bulle, tri rapide) 2.5 Tri fusion 2.6 Comparaisons des méthodes 2.7 Défi à 1 000 000 $ 1.Types de données
33
i21 IEM-UB 2008-2009 GFDL 1.2 33 Tri fusion ● Algorithme récursif ● Supposons savoir trier un tableau de taille n ● Pour tableau de taille n+1 : – le couper en 2 parties de taille <= n – trier (récursivement) chaque partie (on sait faire) – fusionner (interclasser) le résultat (plus facile)
34
i21 IEM-UB 2008-2009 GFDL 1.2 34 ● 2 6 3 8 5 9 10 11 12 ● (2 6 3 8 5)(9 10 11 12) ● (2 6 3) (8 5) (9 10) (11 12) ● (2 6)(3) (8)(5)(9)(10)(11)(12) ● (2)(6) ● taille 1 : tri évident Exemple : 1.dichotomie
35
i21 IEM-UB 2008-2009 GFDL 1.2 35 Exemple : 2.fusion (interclassement) ● 2 3 5 6 8 9 10 11 12 ● (2 3 5 6 8)(9 10 11 12) ● (2 3 6) (5 8) (9 10) (11 12) ● (2 6) (3)(8)(5)(9)(10)(11)(12) ● (2) (6)
36
i21 IEM-UB 2008-2009 GFDL 1.2 36 Algorithme TriFusion (tableau tab,int gauche, droite) si gauche ≠ droite int median = arrondi ( gauche+ droite)/2; triFusion(tab,gauche,median); triFusion(tab,median+1,droite); fusion(tab,gauche,median,droite)
37
i21 IEM-UB 2008-2009 GFDL 1.2 37 Algorithme ● Fusion : 1 curseur sur chaque tableau à fusionner et comparaison ● A B ● (1) 4 6 8 (2) 5 8 9 -> 1, avancer A ● 1 (4)6 8 (2) 5 8 9 -> 1 2, avancer B ● 1 (4)6 8 2 (5)8 9 -> 1 2 4, avancer A ● 1 4(6)8 2 (5)8 9 -> 1 2 4 5 av. B ● etc. ● Quand l'un à fini : copier la fin de l'autre
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.