• Aucun résultat trouvé

Structures de donn´ees et algorithmes Examen ´ecrit, 14 juin 2012

N/A
N/A
Protected

Academic year: 2022

Partager "Structures de donn´ees et algorithmes Examen ´ecrit, 14 juin 2012"

Copied!
2
0
0

Texte intégral

(1)

Structures de donn´ ees et algorithmes Examen ´ecrit, 14 juin 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

L’algorithmematchre¸coit en entr´ee un tableauS[1. . n] et un patternP[1. . m] o`u 1≤m≤n et renvoie la positionl de la premi`ere occurence du patternP dans le tableauS, c’est-`a-direl=p siS[p . . p+m−1] =P etl=−1 si le patternP n’apparaˆıt pas dans le tableauS.

match(P, S, n, m) 1 l= 0

2 matched=False

3 while(l≤n)∧ ¬matched

4 l = l+ 1

5 r = 1

6 matched =True 7 while(r≤m)∧matched

8 matched=matched∧(P[r] = =S[l+r−1])

9 r =r+ 1

10 if matched 11 returnl 12 else return-1

(a) L’algorithme tel que pr´esent´e est incorrect. Rep´erez l’erreur et corrigez la.

(b) Calculez la complexit´e au pire cas de l’algorithme corrig´e en fonction dem etn et donnez un exemple correspondant `a ce pire cas.

(c) Calculez la complexit´e au meilleur cas de l’algorithme corrig´e en fonction demetnet donnez un exemple correspondant `a ce meilleur cas.

(d) Modifiez cet algorithme de mani`ere `a ce qu’il fournisse le nombre d’occurences du pattern P dans le tableauS `a la place de la position du premier pattern (ces occurences peuvent se chevaucher).

(e) Donnez les complexit´es au meilleur et au pire cas de l’algorithme propos´e au point (d).

1

(2)

Question 2

(a) Expliquez le principe d’une pile et d’une file et d´ecrivez pour chacune de ces structures une mani`ere de l’impl´ementer en pr´ecisant la complexit´e des op´erations d’insertion et de retrait d’´el´ements dans la structure.

(b) Montrez comment impl´ementer une file `a l’aide de deux piles et analysez la complexit´e des diff´erentes op´erations.

Question 3

(a) Illustrez l’arbre binaire de recherche dont le parcours pr´efixe donne : 10 5 2 - - 7 - - 30 20 15 - - - -

Note : un -correspond `a l’absence d’un sous-arbre.

(b) D´eterminez une s´equence d’op´erations d’insertion permettant d’obtenir l’arbre du point (a).

(c) Pr´ecisez les rotations, en nombre minimal, `a appliquer `a l’arbre du point (a) pour le rendre AVL.

(d) D´ecrivez un algorithme de complexit´e Θ(n) permettant de parcourir selon l’ordre infixe un arbre binaire de recherche compos´e dennoeuds.

(e) Montrez que la complexit´e de cet algorithme est Θ(n).

Question 4

(a) Qu’est-ce qu’un arbre couvrant ? Un arbre couvrant de poids minimum ? Donnez un exemple d’application.

(b) D´ecrivez l’algorithme de Kruskal pour la recherche d’un arbre couvrant de poids minimum, dans le formalisme de votre choix.

(c) Illustrez graphiquement chaque ´etape de l’ex´ecution de l’algorithme sur le graphe ci-dessous.

A

B

C

E F

D

5(

5( 5(

6(

6(

6(

3( 4(

1(

2(

(d) Que retourne l’algorithme de Kruskal lorsqu’on l’applique `a un graphe non connexe ?

Question 5

On cherche `a ´ecrire une fonction Longest-cst-subarray qui renvoie les bornes d’une plus longue suite de valeurs constantes dans un tableauA[1. . n]. Si (i, j) =Longest-cst-subarray(A), A[i . . j] est une plus longue suite de valeurs constantes de A(A[i] =A[i+ 1] =. . .=A[j]).

(a) Expliquez le principe d’une approche force-brute pour r´esoudre ce probl`eme et donnez sa complexit´e.

(b) Ecrivez une solution de type diviser-pour-r´egner et calculez sa complexit´e.

(c) Ecrivez une solution par programmation dynamique et calculez sa complexit´e.

2

Références

Documents relatifs

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

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

(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...

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

Compare pages obtained by probing with the error page (by clustering along the DOM tree structure of the pages), to distinguish error pages and result pages.. Confirm the annotation

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