Académique Documents
Professionnel Documents
Culture Documents
1.2
Itrations
Jean-Charles Rgin
Itration : dfinition
3
En informatique, litration est la rptition dun processus par un programme. Litration peut tre utilise
comme un terme gnral synonyme de rptition pour dcrire une forme spcifique de rptition qui modifie ltat courant.
Dans le sens premier, la rcursion est une forme particulire ditration. Cependant la notation rcursive est bien diffrente de la notion itrative. En mathmatiques, litration est trs couramment utilise : pour la somme, pour le produit
JC Rgin - ASD - L2I - 2010
Itrations : plan
4
Une boucle simple : recherche du min, accs direct avec indice Cas particulier pour le dbut / la fin Pas seulement une opration Une boucle et deux indices Boucles imbriques : calcul de matrice Indirections : tri par comptage Itrateurs (itration et structures de donnes)
JC Rgin - ASD - L2I - 2010
On recherche lindice du plus petit lment dun tableau A partir de lindice i, on retrouve facilement la valeur de i puisque cest T[i] On balaie simplement tous les lments du tableau et on mmorise le plus petit
entier indicePlusPetit(T[],n) j 1 Pour i de 1 n { si (T[i] < T[j]){ j i } } retourner j entier indicePlusPetit(T[],n) j 1; i 1 Tant que (i n){ si (T[i] < T[j]){ j i } i i + 1 } retourner j
Itrations : plan
7
Une boucle simple : recherche du min, accs direct avec indice Cas particulier pour le dbut / la fin Pas seulement une opration Une boucle et deux indices Boucles imbriques : calcul de matrice Indirections : tri par comptage Itrateurs (itration et structures de donnes)
JC Rgin - ASD - L2I - 2010
Au lieu de parcourir tous les lments du tableau, on veut limiter la portion du tableau considr. Cela revient dire que lon considre un sous-tableau. On ne balaie plus tous les lments mais ceux entre lindice d (dbut) et lindice f (fin) (les deux indices inclus)
entier indicePlusPetit(T[],n,d,f) j d Pour i de d f { si (T[i] < T[j]){ j i } } retourner j entier indicePlusPetit(T[],n,d,f) j d; i d Tant que (i f){ si (T[i] < T[j]){ j i } i i + 1 } retourner j
Par exemple T[i] vaut -1 Cette valeur ne doit pas tre prise en compte Elle nest pas forcment dans le tableau
entier indicePlusPetit(T[],n,d,val) j d Pour i de d ???? { // Cest compliqu !!! entier indicePlusPetit(T[],n,d,val) j d; i d Tant que (i n ET T[i] val ){ si (T[i] < T[j]){ j i } i i + 1 } retourner j Attention i n ET T[i] val et non pas
entier indicePlusPetit(T[],n,d,val) si (T[d] = val){ retourner -1 } j d; i d Tant que (i n ET T[i] val ){ si (T[i] < T[j]){ j i } i i + 1 } retourner j
Avec un rpter{ }jusqu (condition) entier indicePlusPetit(T[],n,d,val) si (T[d] = -1){ retourner -1 } j d; i d Rpter{ si (T[i] < T[j]){ j i } i i + 1 } jusqu (i > n ou T[i] = -1) retourner j
Assez souvent il est quasiment obligatoire de faire un traitement avant ou aprs la boucle, autrement dit pour le premier ou le dernier lment. Exemple :
On
crit son nom avec un espace entre les lettres conscutives : DUPONT donne D U P O N T Il ny a pas despace aprs la dernire lettre
afficherAvecEspaces(T[],n) pour i de 1 n-1 afficher(T[i]) afficher ( ) } afficher(T[n]) afficherAvecEspaces(T[],n) afficher(T[1]) pour i de 2 n afficher ( ) afficher(T[i]) }
Itrations : plan
16
Une boucle simple : recherche du min, accs direct avec indice Cas particulier pour le dbut / la fin Pas seulement une opration Une boucle et deux indices Boucles imbriques : calcul de matrice Indirections : tri par comptage Itrateurs (itration et structures de donnes)
JC Rgin - ASD - L2I - 2010
Ce qui est fait dans la boucle peut tre complexe et dpendre des itrations prcdentes Exemple :
Un
tableau reprsente un nombre en binaire On veut faire la somme de 2 tableaux (mme taille) en tenant compte de la retenue
T1 : [0 0 1 1 0 1 1 1] T2 : [1 0 1 0 0 0 1 1] + : [1 1 0 1 1 0 1 0]
somme(T1[],T2[],R[],n) retenue 0 pour i de 1 n { s = T1[i] + T2[i] + retenue si (s = 0){ R[i] 0 retenue 0 } si (s = 1){ R[i] 1 retenue 0 } si (s = 2){ R[i] 0 retenue 1 } si (s = 3){ R[i] 1 retenue 1 } }
Itrations : plan
20
Une boucle simple : recherche du min, accs direct avec indice Cas particulier pour le dbut / la fin Pas seulement une opration Une boucle et deux indices Boucles imbriques : calcul de matrice Indirections : tri par comptage Itrateurs (itration et structures de donnes)
JC Rgin - ASD - L2I - 2010
Deux mots m et r
Dterminer si les lettres de m se trouvent dans le mot r dans le mme ordre. m = arme et r = algorithme : ca marche m = rame et r = algorithme : ca ne marche pas
Boolen memeOrdre(m[],p,r[],n) i 1; k 1 // i dans m et k dans r tant que (i p ET k n){ si (m[i] = r[k]){ i i + 1 } k k + 1 } si (i > p){ retourner vrai } retourner faux
JC Rgin - ASD - L2I - 2010
Itrations : plan
22
Une boucle simple : recherche du min, accs direct avec indice Cas particulier pour le dbut / la fin Pas seulement une opration Une boucle et deux indices Boucles imbriques : calcul de matrice Indirections : tri par comptage Itrateurs (itration et structures de donnes)
JC Rgin - ASD - L2I - 2010
Boucles imbriques
23
Calcul du nombre dlments zro dans une matrice M(l,c) : l lignes et c colonnes
Boucles imbriques
24
} retourner cpt entier numZero(M[][],l,c) cpt 0 pour i de 1 l { cpt cpt + numZeroLig(M,i,c) } retourner cpt
Boucles imbriques
25
Boucles imbriques
26
Itrations : plan
27
Une boucle simple : recherche du min, accs direct avec indice Cas particulier pour le dbut / la fin Pas seulement une opration Une boucle et deux indices Boucles imbriques : calcul de matrice Indirections : tri par comptage Itrateurs (itration et structures de donnes)
JC Rgin - ASD - L2I - 2010
Indirections
28
Un lment du tableau est directement un type de base (un entier, un flottant, un boolen...) Parfois on ne voudrait pas avoir accs la valeur en soi, mais plutt un objet li lindex et associ cette valeur On veut simplement parcourir les lments dun ensemble, pas uniquement les valeurs de ces lments : on associe llment une valeur
JC Rgin - ASD - L2I - 2010
Indirections
29
Noms
Permutation
30
Proposer un algorithme qui permet de savoir si les lments dun tableau T forment une permutation de 1..n
Permutation
31
Ide :
on
cre un tableau P de 1 n on met 0 dans chaque case on traverse T et pour la valeur T[i] on met un 1 dans la case P[T[i]] la fin si aucune case ne vaut 0 alors T est une permutation de P
Permutation
32
Booleen estPermutation(T[],n) pour i de 1 n { P[i] 0 } pour i de 1 n { P[T[i]] 1 } ok vrai i 1 tant que (i n ET ok){ si (P[i] = 0){ ok faux } i i + 1 } retourner ok
JC Rgin - ASD - L2I - 2010
Quand on a des nombres de 1 p, on peut les trier facilement en comptant le nombre doccurrences de chaque nombre.
On
cre un tableau de p valeurs On met toutes ces valeurs 0 On traverse T. On compte le nombre de fois o T[i] est pris = on incrmente P[T[i]] Ensuite on balaie le tableau P et on copie autant de fois une valeur quelle apparait dans P
JC Rgin - ASD - L2I - 2010
Booleen tri(T[],n) min T[1]; max T[1] pour i de 1 n { si (T[i] < min){ min T[i] } si (T[i] > max) { max T[i] } } pour k de 1 (max-min+1) { P[k] 0 } pour i de 1 n { P[T[i]-min+1] P[T[i]-min+1] + 1 } i 1 pour k de 1 (max-min+1) { pour j de 1 P[k]{ T[i] k + min -1 i i + 1 } }
Complexit ?
Tri dindices
36
Que se passe-t-il si on veut trier des indices et non pas les valeurs ?
T
On va essayer de balayer le tableau T pour trouver la place des lments ! On va procder par accumulation
pour k de 1 (max-min+1) { P[k] 0 } pour i de 1 n { P[T[i]-min+1] P[T[i]-min+1] + 1 } On va maintenant accumuler la position dans P
pour k de 1 (max-min) { P[k+1] P[k+1]+P[k] }
P[i] contient maintenant le nombre dlments qui sont plus petits ou gal i
pour i de 1 n { pos P[T[i]] rang[pos] i P[T[i]] P[T[i]] - 1 }
Itrations : plan
38
Une boucle simple : recherche du min, accs direct avec indice Cas particulier pour le dbut / la fin Pas seulement une opration Une boucle et deux indices Boucles imbriques : calcul de matrice Indirections : tri par comptage Itrateurs (itration et structures de donnes)
JC Rgin - ASD - L2I - 2010
Structures de donnes
1.39
Permettent de grer et dorganiser des donnes Sont dfinies partir dun ensemble doprations quelles peuvent effectuer sur les donnes Une structure de donnes ne regroupe pas ncessairement des objets du mme type.
Itrateur
40
Un itrateur est un objet qui permet de parcourir tous les lments contenus dans un autre objet, le plus souvent un conteneur (liste, arbre, etc). Un synonyme d'itrateur est curseur, notamment dans le contexte des bases de donnes. Un itrateur dispose essentiellement de deux primitives :
Il faut aussi pouvoir crer un itrateur sur le premier lment ; ainsi que dterminer tout moment si l'itrateur a puis la totalit des lments du conteneur. Diverses implmentations peuvent galement offrir des comportements supplmentaires.
JC Rgin - ASD - L2I - 2010
Itrateur
41
permettre son utilisateur de parcourir le conteneur, c'est--dire d'accder squentiellement tous ses lments pour leur appliquer un traitement, isoler l'utilisateur de la structure interne du conteneur, potentiellement complexe. le conteneur peut stocker les lments de la faon qu'il veut, tout en permettant l'utilisateur de le traiter comme une simple liste dlments.
Avantage :
Le plus souvent l'itrateur est conu en mme temps que la classe-conteneur qu'il devra parcourir, et ce sera le conteneur lui-mme qui crera et distribuera les itrateurs pour accder ses lments
JC Rgin - ASD - L2I - 2010
Itrateur
42
on utilise souvent un index dans une simple boucle, pour accder squentiellement tous les lments, notamment d'un tableau; l'utilisation des itrateurs a certains avantages: Un simple compteur dans une boucle n'est pas adapt toutes les structures de donnes, en particulier
celles qui n'ont pas de mthode d'accs un lment quelconque celles dont l'accs un lment quelconque est trs lent (c'est le cas des listes chanes et des arbres).
Les itrateurs fournissent un moyen cohrent d'itrer sur toutes sortes de structures de donnes, rendant ainsi le code client plus lisible, rutilisable, et robuste mme en cas de changement dans l'organisation de la structure de donnes. Un itrateur peut implanter des restrictions additionnelles sur l'accs aux lments, par exemple pour empcher qu'un lment soit saut , ou qu'un mme lment soit visit deux fois.
JC Rgin - ASD - L2I - 2010
Itrateur
43
Un itrateur peut dans certains cas permettre que le conteneur soit modifi, sans tre invalid pour autant. Par exemple, aprs qu'un itrateur s'est positionn derrire le premier lment, il est possible d'insrer d'autres lments au dbut du conteneur avec des rsultats prvisibles. Avec un index on aurait plus de problmes, parce que la valeur de l'index devrait elle aussi tre modifie en consquence. Important : il est indispensable de bien consulter la documentation d'un itrateur pour savoir dans quels cas il est invalid ou non.
JC Rgin - ASD - L2I - 2010
Itrateur
44
Cela permet de faire des algorithmes sans connatre la structure de donnes sous-jacente. On recherche un plus court chemin dans un graphe :
On
ne sait pas comment le graphe est reprsent. Cela ne nous empche pas de faire un algorithme efficace
Itrateur : en Java
45
Linterface java.util.Iterator permet lutilisation ditrateurs (iterator) avec les classes containers Chaque itrateur fournit les mthodes next() et hasNext() et peut supporter (non obligatoire) la mthode remove(). Un itrateur est typiquement cre par la classe container auquel il correspond, habituellement par la mthode iterator(). La mthode next() avance litrateur et renvoie la valeur pointe par litrateur. Quand un itrateur est cr, il pointe vers une valeur spciale qui est avant le premier lment, de telle faon que le premier lment est obtenu avec le premier appel de next() : Iterator iter = list.iterator(); while (iter.hasNext()){ System.out.println(iter.next()); } SI la fonction remove() est supporte, alors elle supprime llment le plus rcemment visit.
JC Rgin - ASD - L2I - 2010