IF111 - Algorithmes et structures de donn´ees-TD2
Fonctions r´ecursives sur les listes
´
Ecrivez les fonctions suivantes de mani`ere r´ecursive 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 `a chaque ´el´ement de la liste L.
3. avant dernier(L) qui renvoie l’avant-dernier ´el´ement 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´e, c’est-`a-dire si son premier ´el´ement est plus petit que le second, que
le second est plus grand que le troisi`eme, le troisi`eme est plus petit que le quatri`eme, le quatri`eme plus
grand que le ciqui`eme et ainsi de suite.
Inversions
On consid`ere un tableau Td’entiers distincts deux `a deux. Soit iet jdeux 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´eresse 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¸con simple de proc´eder consiste `a consid´erer toutes les paires {T[i] ; T[j]}et d’incr´ementer un
compteur lorsqu’il s’agit d’une inversion. Sur ce principe, ´ecrire un algorithme it´eratif et en donner la
complexit´e.
3. En vous appuyant sur l’id´ee du tri par fusion ´ecrire un algorithme r´ecursif qui calcule le nombre d’inver-
sions d’un tableau d’entiers.
4. Calculer la complexit´e de l’algorithme obtenu `a la question pr´ec´edente.
1