L3 IUP AISEM/ICM Examen Algorithmique et C 15 Avril 2005
Dur´ee 2h - Documents autoris´ees - Les exercices sont ind´ependants
Exercice 1: Algorithme et complexit´e
Soit un tableau de N entiers.
a. Donner un algorithme permettant de d´eterminer si les ´el´ements de ce tableau sont tri´es par
ordre croissant ou pas. Cet algorithme pourra ˆetre d´ecrit en pseudo-langage ou `a l’aide d’un
organigramme.
b. D´eterminer la complexit´e de votre algorithme, fonction de N, en nombre de comparaisons,
– dans le pire des cas,
– dans le meilleur des cas.
c. Ecrire une fonction en C impl´ementant cet algorithme. Pr´ecisez les donn´ees d’entr´ee et de
sortie de cette fonction.
Exercice 2: Tables de hachage
On souhaite stocker des nombres entiers positifs en utilisant une table de hachage. La table
poss´edant N emplacements (de 0 `a N-1), on utilise la clef suivante: h(x)=x modulo N.
a. Calculer la valeur de la cl´e pour chacun des ´el´ements de la liste suivante (N=12): 15, 24, 125,
4, 26, 6, 78, 55, 89
b. En supposant que les ´el´ements soient inclus dans la table de hachage dans l’ordre de la liste et
que la r´esolution des collisions soit faite en rajoutant un lien suivant `a chaque emplacement
de la table, dessiner la table obtenue. Remarque: Par convention un emplacemnt vide aura
pour valeur -1 et un lien suivant non utilis´e contiendra la valeur -1.
c. Proposez une impl´ementation en C d’un emplacement la table de hachage sous la forme d’une
structure.
d. La table est repr´esent´e par un tableau dynamique de structures (du type d´efini ci-dessus).
Ecrire le code en C d’une fonction permettant de cr´eer et d’initialiser une table de hachage.
Cette fonction aura pour entr´ee le nombre d’emplacements N de la table et pour sortie un
pointeur vers le premier emplacement de la table.
e. Donner l’algorithme et le code en C d’une fonction permettant de v´erifier si un ´el´ement x est
contenu dans la table.
Exercice 3: Arbres binaires
a. Dessiner le graphe de l’arbre binaire de recherche obtenu en ins´erant les ´el´ements de la liste
suivante dans leur ordre d’arriv´ee: 6, 78, 55, 89, 15, 24, 125, 3, 11
b. Un noeud d’un arbre binaire est repr´esent´e par la d´efinition de structure suivante:
typedef struct s_noeud
{ int valeur;
struct s_noeud* gauche;
struct s_noeud* droit;
} t_noeud;
Soit la fonction r´ecursive suivante:
void afficher(t_noeud* noeud)
{ if (noeud!=NULL)
{ afficher(noeud->gauche);
printf("%d \n",noeud->valeur);
afficher(noeud->droit);
}
}