IF111 - Algorithmes et structures de données-TD2

publicité
IF111 - Algorithmes et structures de données-TD2
Fonctions récursives sur les listes
Écrivez les fonctions suivantes de manière récursive en utilisant les primitives t^
ete(L), queue(L), creerListeVide(),
estVide(L) et ajouterEnT^
ete(a,L). (on suppose que toutes les listes contiennent des entiers)
1. paire(L) qui teste si la liste L ne contient que des entiers pairs.
2. additionner(x, L) qui ajoute x à chaque élément de la liste L.
3. avant dernier(L) qui renvoie l’avant-dernier élément de la liste L.
4. apparait(x, n, L) qui teste si x apparait au moins n fois dans L.
5. alterne(L) qui teste si L est alterné, c’est-à-dire si son premier élément est plus petit que le second, que
le second est plus grand que le troisième, le troisième est plus petit que le quatrième, le quatrième plus
grand que le ciquième et ainsi de suite.
Inversions
On considère un tableau T d’entiers distincts deux à deux. Soit i et j deux entiers tels que i < j. On dit que
la paire { T [i] ; T [j] } est une inversion si T [i] > T [j]. On s’intéresse au nombre d’inversions dans un tableau. T =
1. Quel est le nombre d’inversions dans T = 3
4
6
1
2
5 .?
2. Une façon simple de procéder consiste à considérer toutes les paires { T [i] ; T [j] } et d’incrémenter un
compteur lorsqu’il s’agit d’une inversion. Sur ce principe, écrire un algorithme itératif et en donner la
complexité.
3. En vous appuyant sur l’idée du tri par fusion écrire un algorithme récursif qui calcule le nombre d’inversions d’un tableau d’entiers.
4. Calculer la complexité de l’algorithme obtenu à la question précédente.
1
Téléchargement