UNIVERSITE
F
OURIER
OSEPH
OURIER
J
SCIENCES, TECHNOLOGIE, MEDECINE
GRENOBLE 1
UFR
IMA
Informatique & Mathématiques Appliquées Sciences, Technologie, Médecine
Exercices d’algorithmique (annales d’examens)
Pr´
eambule (`
a lire imp´
erativement)
Ce document contient une compilation des exercices pos´
es en examen d’algorithmique en licence d’informa-
tique `
a l’UFR IMA de l’Universit´
e Joseph Fourier. Il est destin´
e aux ´
etudiants de l’UE ALGO 5 pour s’entraˆ
ıner
`
a faire des exercices sur la fin de ce semestre. Comme le contenu p´
edagogique `
a´
evolu´
e ces derni`
eres ann´
ees,
certains exercices seront plus difficiles et ne correspondent pas au programme actuel. En particulier, l’´
ecriture de
programmes en langage C ne rel`
eve plus de cette UE.
Certains exercices comportent, malgr´
e mes efforts, des coquilles qui avaient ´
et´
e corrig´
ees le jour de l’´
epreuve
mais n’ont pas ´
et´
e actualis´
ees. Je remercie donc par avance les ´
etudiants qui am´
elioreront ce document par leurs
remarques.
Pour des raisons ´
evidentes, ces sujets ne sont pas corrig´
es, une version avec des indications est en cours
d’´
ecriture. En cas de difficult´
es s´
erieuses, vous pouvez prendre contact avec vos enseignants de TD. Vous trou-
verez ci-dessous un acc`
es aux diff´
erents exercices `
a partir de mots cl´
es correspondant aux grandes parties de l’UE
ALGO 5
Bon courage J.-M. V.
Th`
emes (par num´
ero d’exercice)
Calcul de coˆ
ut [3,14,15,17, 21,23,24, 39, 43, 44, 45, 47]
Comptage [16,23,25, 32, 34, 37, 40, 44, 46]
Enrichissement de structure [2327, 42]
Listes et ensembles [5,642,19,20, 21 ,24, 28, 35, 37, 41, 45, 47, 48, 49,17]
Manipulation de structures [33, 39, 48,13]
Parcours [15,22,28, 38, 41, 42, 45, 50]
Recherche [4,25]
Structures d’arbres [1,2,7,16,22,23,25, 26, 31, 34, 38, 39, 40, 42, 50, 51, 18,,10,12]
Tables de hachage [14,19, 29, 28, 49]
Tri [6,9,15,20, 26, 27, 31, 32, 36, 43, 17, 47,11]
Universit´
e Joseph Fourier 1/ 32
Table des mati`
eres
1 Feuilles (Quick de novembre 2011) 4
2 Tas ternaire (Quick de novembre 2011) 4
3 C’est un truc... (Quick d’octobre 2011) 4
4 Table ordonn´
ee (Quick d’octobre 2011) 4
5 Pile, File le retour (Quick d’octobre 2011) 5
6 Tri par file (Quick d’octobre 2011) 5
7 Arbres binaires complets (Examen de d´
ecembre 2011) 5
8 ADE (Examen de d´
ecembre 2011) 6
9 Un tri lin´
eaire ? (Examen de d´
ecembre 2011) 6
10 Recherche dans un tas (Examen de d´
ecembre 2010) 7
11 Inversion (Examen de d´
ecembre 2010) 7
12 Plus grand stable (Examen de d´
ecembre 2010) 8
13 Algorithme de couverture (Examen de d´
ecembre 2010) 8
14 Algorithme de Karp-Rabin (Examen de d´
ecembre 2009) 9
15 Recherche des kplus grands ´
el´
ements (Examen de d´
ecembre 2009) 10
16 Feuilles (Examen de d´
ecembre 2009) 11
17 Un peu de couleur (Examen de juin 2009) 11
18 Est-ce un tas ? (Examen de juin 2009) 11
19 Anagrammes de phrase (Examen de juin 2008) 12
20 Tableau tri´
e(Examen de juin 2008) 12
21 Extraction de couleurs (Examen de d´
ecembre 2007) 13
22 Premier et second (Examen de d´
ecembre 2007) 13
23 Arbres pond´
er´
es (Examen de d´
ecembre 2007) 14
24 Matrice (Examen de juin 2007) 15
25 B-arbre (Examen de d´
ecembre 2006 et juin 2007) 15
26 Tous en rang (Examen de juin 2007) 16
27 Tous en rang (autre version) (Examen de d´
ecembre 2006) 16
28 Ensemble (Examen de d´
ecembre 2006) 17
29 Hachage (Examen de d´
ecembre 2006) 17
Universit´
e Joseph Fourier 2/ 32
30 Mariages (Examen de d´
ecembre 2006) 18
31 Tri par arbre (Examen de d´
ecembre 2006) 18
32 Suites 2-3 tri´
ees (Examen de d´
ecembre 2005) 19
33 Changement de racine (Examen de d´
ecembre 2005) 19
34 Arbres binaires (Examen de juin 2005) 20
35 File `
a double entr´
ee (Examen de juin 2005) 21
36 Deuxi`
eme maximum (Examen de juin 2005) 21
37 Sortie de pile (Examen de d´
ecembre 2004) 21
38 Parcours (Examen de d´
ecembre 2004) 22
39 Faire tourner les arbres (Examen de d´
ecembre 2004) 22
40 Compter les tas (Examen de d´
ecembre 2003) 23
41 Collection (Examen de d´
ecembre 2003) 24
42 Arbres binaires de recherche (Examen de d´
ecembre 2003) 26
43 Bulles (Quick octobre 2007) 27
44 Fibonnacci (Quick octobre 2007) 28
45 Fusion de liste (Quick octobre 2007) 29
46 Relations antisym´
etriques (Quick octobre 2005) 29
47 Tri `
a 3 couleurs (Quick octobre 2005) 29
48 File en tableau (Quick octobre 2005) 29
49 Eliminer les doublons (Quick novembre 2005) 30
50 R´
eservation et conflit (Quick novembre 2005) 31
51 Comprimons (Quick novembre 2006) 31
Universit´
e Joseph Fourier 3/ 32
1 Feuilles (Quick de novembre 2011)
Question 1.1 : Arbres et feuilles
Dans un arbre binaire ayant nnœuds, calculer le nombre minimal de feuilles mnet le nombre maximal
de feuilles Mn, le calcul devra ˆ
etre r´
edig´
e avec soin.
cpt-quest0
2 Tas ternaire (Quick de novembre 2011)
On appelle arbre ternaire un arbre tel que tout nœud poss`
ede de 0`
a3fils, nomm´
es filsa, f ilsb, f ilsc.
Question 2.2 :
1. Calculer la hauteur d’un arbre ternaire ayant nnœuds.
2. Rappeler la d´
efinition d’un arbre ordonn´
e.
3. Proposer une implantation d’un tas ternaire (arbre ordonn´
e tass´
e`
a gauche) dans un tableau.
4. Pour xnœud de l’arbre, ´
ecrire les primitives P`
ere(x),F ilsa(x), F ilsb(x)et F ilsc(x).
5. Pour Ttas ternaire et xnœud, ´
ecrire la primitive Ins´
erer(x, T )qui ins`
ere un nouveau nœud
dans le tas.
6. Pour Ttas ternaire, ´
ecrire la primitive Extraire(T)qui retourne un nœud d’´
etiquette maximale
et le supprime du tas T.
7. Calculer le coˆ
ut des primitives Ins´
erer(x, T )Extraire(T)en nombre de comparaisons
d’´
etiquettes de nœuds.
8. Faire la trace d’ex´
ecution du tri par tas ternaire du tableau [C,A,R,I,B,O,U].
9. Calculer la complexit´
e de l’algorithme de tri par tas ternaire. Comparer cette complexit´
e avec
celle du coˆ
ut du tri par tas (binaire). Commenter votre r´
esultat, peut-on le g´
en´
eraliser ?
3 C’est un truc... (Quick d’octobre 2011)
Truc(n)
pour i= 1 `
anfaire
j= 1
tant que jj6ifaire
Traiter(j)
j=j+ 1
fin tant que
fin pour
Question 3.1 : Coˆ
ut d’un algorithme
Calculer le coˆ
ut de l’algorithme Truc en nombre d’appels `
a la fonction Traiter (on pourra laisser le
coˆ
ut sous la forme P· · · ). Donner l’ordre de grandeur de ce coˆ
ut (indication : encadrer la somme).
cpt-quest0
4 Table ordonn´
ee (Quick d’octobre 2011)
On consid`
ere un tableau ordonn´
eTde nentiers distincts (ces entiers peuvent ˆ
etre n´
egatifs), le tableau Test
indic´
e de 1`
an. L’objectif est de construire un algorithme qui renvoie un indice itel que T[i] = iou 0s’il n’en
existe pas.
Question 4.2 : Recherche en table
Universit´
e Joseph Fourier 4/ 32
1. ´
Ecrire un algorithme ”force brute”, qui renvoie un indice itel que T[i] = iou 0s’il n’en existe
pas. Calculer son coˆ
ut.
2. Montrer que si T[j]> j alors il en est de mˆ
eme pour tout k>j.
3. En d´
eduire un algorithme en O(log n), prouver que le coˆ
ut est en O(log n).
cpt-quest0
5 Pile, File le retour (Quick d’octobre 2011)
Question 5.3 : P/F-iles
On dispose des types abstraits classiques pile et file avec les op´
erateurs de construction et de trans-
formation classiques.
´
Ecrire un algorithme qui prend en argument une pile Pet renvoie une nouvelle pile P0contenant
les mˆ
emes ´
el´
ements que Pmais rang´
es dans l’ordre inverse. (Le sommet de P0est l’´
el´
ement au fond
de P,· · · , et le sommet de Pse retrouve au fond de P0).
´
Ecrire un algorithme qui prend en argument une file Fet renvoie une nouvelle file F0contenant
les mˆ
emes ´
el´
ements que Fmais rang´
es dans l’ordre inverse. (Le premier ´
el´
ement de F0est le dernier
´
el´
ement de F,· · · , et le premier de Fse retrouve le dernier de F0).
6 Tri par file (Quick d’octobre 2011)
Pour trier nobjets distincts on dispose de l’op´
erateur fusion qui prend en argument deux listes tri´
ees et renvoie
la fusion tri´
ee de ces deux listes. On utilise une file de listes que l’on initialise avec nlistes, chacune contenant un
des objets `
a trier.
L’algorithme op`
ere en prenant les deux premi`
eres listes de la file, en op´
erant leur fusion et en enfilant le r´
esultat
dans la file. L’algorithme se termine lorsque la file ne contient plus qu’une seule liste, r´
esultat du tri.
Question 6.1 : Tri par file
1. Donner les ´
etapes de l’algorithme sur l’exemple C, A, R, I, B, O, U, S.
2. ´
Ecrire l’algorithme de tri par file/fusion.
3. Donner une preuve de votre algorithme.
4. Calculer le coˆ
ut de votre algorithme.
5. Quel algorithme obtient-on en remplac¸ant la file par une pile ?
6. Question subsidiaire : ´
Ecrire l’algorithme de fusion de listes tri´
ees impl´
ement´
ees par des listes
circulaires doublement chaˆ
ın´
ees et calculer son coˆ
ut.
7 Arbres binaires complets (Examen de d´
ecembre 2011)
On consid`
ere des arbres binaires complets, c’est `
a dire que tout nœud est soit une feuille soit un nœud interne
avec 2fils. `
A un arbre Aon associe une s´
equence de bits S(A)d´
efinie de la mani`
ere suivante
S(A) = (1si Aest r´
eduit `
a une feuille ;
0.S(A1)S(A2)si A1(resp A2) est le sous-arbre gauche (resp droit) de A.
Question 7.1 : Exemples de codage d’arbre
Donner la valeur de S(A)et S(B)pour les 2 arbres suivants :
Universit´
e Joseph Fourier 5/ 32
1 / 32 100%