160 likes | 262 Views
Structures de données et récursivité. Vous avez vu les ArrayList . suite ordonnée d'éléments de taille variable ArrayList <Integer> liste ; liste = new ArrayList <Integer>(); Ne peuvent contenir que des objets premier élément : liste.get (0)
E N D
Structures de données et récursivité IPA – Catherine FaronZucke et Anne Marie Deryr
Vousavez vu les ArrayList... • suite ordonnéed'éléments de taillevariable ArrayList<Integer> liste; liste = new ArrayList<Integer>(); • Ne peuventcontenirque des objets • premier élément : liste.get(0) • dernierélément : liste.get(liste.size()-1) • iièmeélément : liste.get(i-1) IPA – Catherine Faron Zucker
ArrayList • ajout d'un élt: liste.add(new Integer(3)); • modif d'un élt: liste.set(i,new Integer(4)); • suppression d'un élt: liste.remove(i); • mêmesalgosquesur les tableaux avec taille variable IPA – Catherine Faron Zucker
Piles et Files • Ordonnancementsparticuliers des élémentsd'une collection - implémentation à partir d’un tableau oud'uneliste • Pile : LIFO Last In First Out • empiler/dépiler des éléments • Peutêtreimplémentée par un tableau ouuneliste • File : FIFO First In Fist Out • enfiler /défiler des éléments • implémentation par liste plus simple IPA – Catherine Faron Zucker
Soit la Pile contenant les valeurs : 1, 2, 5 • Dessinezmoiune Pile • Ajoutons l’élément 12 • Dépilons un élément • Soit la File contenant les valeurs : 1, 2, 5 • Dessinezmoiune File • Ajoutonsl’élémént 12 • Sortons un élément de la file IPA – Catherine Faron Zucker
Exemplesd’utilisation Algorithmes d'évaluation d'expressions mathématiques Algorithmes pour mémoriser des données en attente de traitement. ? IPA – Catherine Faron Zucker
Piles avec tableau public class Pile{ private Object[] table; private int hauteur; public void empiler(Object o){table[hauteur]=o; hauteur++;} public Object depiler(){hauteur--; return table[hauteur];} public Object sommet(){} public boolean vide(){} public booleanpleine(){} } IPA – Catherine Faron Zucker
Files avec ArrayList public class File{ private ArrayList<Object> liste; private intlongueur; public void enfiler(Object o){liste.add(o); longueur++;} public Object defiler(){longueur--; return liste.remove(0);} public Object tete(){} public Object queue(){} public boolean vide(){} } IPA – Catherine Faron Zucker
Conception d'un algorithme • Stratégie de résolution d'un problème • Approche incrémentale • itérer jusqu'à obtention du résultat souhaité • Approche récursive • diviser pour régner: • diviser en sous-problèmes • régner sur les sous-problèmes • combiner les solutions des sous-problèmes IPA – Catherine Faron Zucker
PGCD(a, b) récursif • diviser: pgcd(a,b) = pgcd(b, a mod b) semblable au problème initial de taille moindre • régner: pgcd(a,0) = a • combiner: pgcd(a,b)= pgcd(b,a mod b)=... IPA – Catherine Faron Zucker
PGCD(a, b) récursif Si b=0 Alorsretourner a //terminaison Sinonretournerpgcd(a, a mod b) finSi IPA – Catherine Faron Zucker
PGCD(a, b) itératif n <- a; m <- b; TantQue m != 0 Faire r <- n mod m n <- m m <- r FinTantQue retourner n IPA – Catherine Faron Zucker
Fac(n) • Relation de récurence fac(n) = n * fac(n-1), n>0 fac(0) = 1 • Algorithme Si n = 0 Alorsretourner 1 Sinonretourner n * fac(n-1) FinSi IPA – Catherine Faron Zucker
Fac(n) Complexité • opération élémentaire : * • nbre de fois où elle est effectuée • fonction de n: M(n) • relation de récurence: M(n) = 1 + M(n-1) pour n>0 et M(0) = 0 en développant, on a M(n) = M(n-i) + i pour tout i pour i=n, on obtient M(n) = M(O) + n = n cf. module Maths discrètes IPA – Catherine Faron Zucker
Manipulation d’une structure recursive ! • Ajout d’un élément en position i • Suppresssion d’un élément en position i • Recherche d’un élément de valeur z • Calcul de la somme des éléments ? IPA – Catherine Faron Zucker
A suivre...Structures de données • Maps et Sets • listeschaînées : cf. td • simplement, doublement • arbres • arbresbinaires • arbresbinaires de recherche • graphes IPA – Catherine Faron Zucker