• Aucun résultat trouvé

Structures de donn´ees et algorithmes Examen ´ecrit, 24 aoˆut 2012

N/A
N/A
Protected

Academic year: 2022

Partager "Structures de donn´ees et algorithmes Examen ´ecrit, 24 aoˆut 2012"

Copied!
2
0
0

Texte intégral

(1)

Structures de donn´ ees et algorithmes Examen ´ecrit, 24 aoˆ ut 2012

Livres ferm´es. Dur´ee maximale : 3h30.

Remarques

– R´epondez `a chaque question sur une feuille s´epar´ee, sur laquelle figurent votre nom et votre section. Soyez bref et concis, mais pr´ecis.

– Sauf mention explicite, toutes les complexit´es sont `a d´ecrire par rapport au temps d’ex´ecution des op´erations concern´ees. Soyez toujours le plus pr´ecis possible dans le choix de votre notation (Ω,O ou Θ) et justifiez votre r´eponse.

Question 1

Les algorithmes suivants prennent en entr´ee un tableau d’entiers A. Pour chacun des deux algorithmes, expliquez bri`evement son effet sur le tableauA en entr´ee et donnez les complexit´es au meilleur cas et au pire cas en fonction de la taille de l’entr´ee n = A.length. Justifiez votre r´eponse.

(a)Algo-I(A) 1 n=A.length 2 fori= 1to n−1

3 s=True

4 forj= 1to n−i 5 if A[j]< A[j+ 1]

6 Swap(A[j], A[j+ 1])

7 s=False

8 if s= =True

9 return

(b)Algo-II(A) 1 i= 1

2 j=A.length 3 whilei < j 4 if A[i]> A[j]

5 Swap(A[i], A[i+ 1]) 6 Swap(A[i], A[j])

7 i=i+ 1

8 elsej=j−1

Question 2

(a) Qu’est-ce qu’une table de hachage ? D´ecrivez les op´erations d’insertion et de suppression et donnez leur complexit´e.

(b) Soit une table de hachage de taille 11, et la fonction de hachageh(k) =k mod 11. Les cl´es suivantes sont ins´er´ees dans la table dans cet ordre : 23,34,46,57,65,76,86,97. Choisissez deux m´ethodes de gestion des collisions parmi les trois ci-dessous et pour chacune d’elles, repr´esentez la position des cl´es dans la table :

– Chaˆınage,

– Adressage ouvert avec sondage lin´eaire,

– Adressage ouvert avec double hachage, avec comme seconde fonction de hachage la fonction g(k) =k mod 5 + 1.

(c) Soit un tableau d’entiers quelconques, on cherche `a ´ecrire un algorithme permettant d’afficher (dans un ordre quelconque) les doublons dans ce tableau. Par exemple, si le tableau est [3,2,4,3,1,2], l’algorithme affichera 3 et 2. Proposez un algorithme de complexit´e O(n) pour r´esoudre ce probl`eme.

1

(2)

Question 3

(a) Qu’est-ce qu’un tas binaire (max) ? Comment impl´emente-t-on un tas dans un vecteur ? (b) Ecrivez une fonction is-heap prenant en argument un tableau A et renvoyant True si

le tableau A repr´esente un tas binaire (max), False sinon. Cette fonction devra ˆetre de complexit´eO(n), o`unest la longueur du tableauA.

(c) Soit le tableau suivant [30,20,7,10,5,8,2,1]. Repr´esentez le tas g´en´er´e `a partir de ce tableau par la fonctionbuild-max-heapvue au cours.

(d) Expliquez comment construire un tas binaire (max) `a partir d’un arbre binaire de recherche enO(n).

(e) Prouvez (par l’absurde) qu’il n’est pas possible de faire la transformation inverse enO(n).

Question 4

(a) D´ecrivez l’algorithme de Dijkstra, dans le formalisme de votre choix.

(b) Illustrez une ex´ecution de cet algorithme sur le graphe pond´er´e ci-dessous `a partir du nœud A.

(c) L’algorithme de Dijkstra continue-t-il `a fonctionner lorsque certaines arˆetes ont des poids n´egatifs (en supposant cependant qu’il n’y a pas de cycle de poids n´egatif) ? Justifiez votre r´eponse.

Suggestion : ex´ecutez l’algorithme sur le graphe pr´ec´edent en rempla¸cant le poids de l’arˆete entreE etC par -3.

Question 5

Soit un tableauA[1. . n] denentiers, chacun pris dans l’intervalle [1, k]. On cherche `a d´eterminer s’il existe un sous-ensemble des entiers qui somme exactement `a S/2, o`u S est la somme de tous les entiers de la liste.

(a) Ecrivez un algorithme efficace pour r´esoudre ce probl`eme en utilisant la programmation dynamique.

Suggestion : d´efinissez une fonctionf(i, y)valant 1 s’il existe un sous-ensemble desipremiers entiers qui somme exactement `ay, 0 sinon. Il s’agit alors de calculer efficacementf(n, S/2).

(b) Analysez la complexit´e de cet algorithme en fonction denet dek.

2

Références

Documents relatifs

Les valeurs contenues dans la pile sont retenues dans une liste li´ee. L’op´eration push place la valeur en tˆete

Un voleur souhaite voler le maximum de valeurs dans ces maisons mais il ne souhaite cependant pas voler dans deux maisons trop proches pour ´ eviter qu’une personne vol´ ee ne

Soyez toujours le plus pr´ ecis possible dans le choix de votre notation (Ω, O ou Θ) et justifiez votre r´ eponse...

Supposons que vous connaissiez les taux d’int´ erˆ et pour les 10 prochaines ann´ ees et que vous ne placiez votre argent que sur un seul fonds ` a la fois.. A la fin de chaque ann´

(c) Donnez la fonction d’insertion d’un nouveau nœud z dans l’arbre ( Tree-insert (T, z)), en la modifiant de mani` ere ` a ce qu’elle maintienne un attribut t.size ` a chaque

Cette structure de donn´ees sera accessible par une fonction Frequency(w) prenant en entr´ee un mot w (une chaˆıne de caract`ere) et renvoyant soit 0 si le mot w ne se trouve pas

tail pointe vers le dernier ´el´ement de la liste Le dernier ´el´ement poss`ede un pointeur x.next vide (not´e NIL) Doublement li´ee : Le premier ´el´ement poss`ede un pointeur

Ecrire en Java la gestion d’un tas, repr´esent´e par un tableau : cr´eer, ins´erer, minimum, supprimer (le minimum), modifier une valeur.. Vous programmerez ceci en TP, et