La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

I21 Algorithmique et programmation II David Gross-Amblard, Joël Savelli IEM-uB 2009-2010 - GFDL 1.2 CM 6/8 v1.1.

Présentations similaires


Présentation au sujet: "I21 Algorithmique et programmation II David Gross-Amblard, Joël Savelli IEM-uB 2009-2010 - GFDL 1.2 CM 6/8 v1.1."— Transcription de la présentation:

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


Télécharger ppt "I21 Algorithmique et programmation II David Gross-Amblard, Joël Savelli IEM-uB 2009-2010 - GFDL 1.2 CM 6/8 v1.1."

Présentations similaires


Annonces Google