Enoncé Juin 2010

publicité
Juin 2010
Page 1/4
Introduction à l’algorithmique et
aux langages de programmation
—–
Examen écrit - INFO0084-2
Samedi 29 mai 2010
Répondez aux questions sur l’énoncé, en y mentionnant vos nom, prénom et matricule.
Pour les QCM, il existe toujours au moins une réponse correcte pour chacune des questions.
Tous les codes demandés peuvent être remis en pseudo-code ou en métalangage des commandes gardées.
Partie 1 : Q.C.M. à réponse unique
Bonne réponse : 1 pt ; mauvaise réponse : -0,5 pt ; pas de réponse : 0 pt.
Questions
1. Soit une table de hachage M de taux de
remplissage α et dont la gestion des collisions
s’effectue par un sondage linéaire. Quelle est la
probabilité de remplir une alvéole sachant que les i
alvéoles précédentes sont occupées ?
Réponses
α
M
i
M
i+1
M
α.i
M
α.M
2. Les variables locales
sont allouées explicitement par le programmeur
sont allouées sur le tas
sont statiques
se voient attribuer les adresses mémoire les plus grandes
3. Combien de noeuds possède un arbre complet de
n feuilles ?
2n
2n − 1
2n
2n − 1
2n−1
4. On peut dire du tri rapide qu’il est
O(n.log(n)) dans le pire des cas
O(n.log(n)) dans le cas moyen
O(n2 ) dans le cas moyen
O(n2 ) dans le meilleur des cas
5. Quel algorithme de tri réalisera le plus petit
nombre d’opérations si le tableau fourni en entrée
est déjà trié ?
le tri par insertion
le tri rapide de Hoare
le tri rapide de Benteley et McIlroy
le tri par tas
6. Quel paradigme de programmation revient à
combiner les solutions optimales de sous-problèmes
communs par une approche bottom-up ?
Diviser pour régner
Programmation dynamique
Algorithme glouton
Recherche exhaustive
7. Parmi les programmes suivants, quel est celui
pour lequel la pile serait la structure de données
fondamentale ?
Un correcteur orthographique
Un ordonnanceur de tâches
Un opérateur de complétion
Un analyseur syntaxique
Juin 2010
Page 2/4
Soit l’arbre T ci-dessous.
Questions
Réponses
localement complet
8. Cet arbre est
partiellement complet
complet
aucune de ces propositions
équilibré
9. Cet arbre est
parfaitement équilibré
dégénéré
aucune de ces propositions
10. On peut dire du noeud E qu’il est
au niveau 1
de profondeur 2
de degré 2
de hauteur 3
11. Le parcours postfixe de l’arbre T est
BCDEHJFGKA
BDEHJCFGKA
BDHJECFKGA
HDJBEKFCGA
HJDEBKFGCA
Questions
12. Soit la portion de code suivante :
int sum = 0 ; int limit = n*n*n ;
for(int i = 1 ; i < limit ; i *= 2)
sum++ ;
On peut dire que
Réponses
Sa complexité est O(log(n))
Sa complexité est O(n.log(n))
Sa complexité est O(n2 )
Sa complexité est O(n3 )
13. Soit la portion de code suivante :
int sum = 0 ;
for(int i=0 ; i<n ; i=i+1)
for(int j=i ; j>0 ;j−−)
sum++ ;
On peut dire que
Sa complexité est O(log(n))
Sa complexité est O(n.log(n))
Sa complexité est O(n)
Sa complexité est O(n2 )
14. Soit la portion de code suivante :
int sum = 0 ;
for(int i=0 ; i<n ; i=i+1)
for(int j=5 ; j<n ; j=j+j)
sum++ ;
On peut dire que
Sa complexité est O(log(n))
Sa complexité est O(n.log(n))
Sa complexité est O(n)
2
Juin 2010
Page 3/4
Partie 2 : Q.C.M. à réponses multiples possibles
Bonne réponse : 1 pt ; mauvaise réponse ou réponse incomplète : -0,5 pt ; pas de réponse : 0 pt.
Questions
15. Quelle(s) est(sont) l’(les) assertion(s) correcte(s) ?
Réponses
n!
5!
3
3
+ n est O(n )
2
2
3n log n + 2n 3 est O(n 3 )
3n + 2n3 est O(n3 )
3
2n + 6 log n + 5n 4 est O(n log n)
7
2n log n + n 2 est O(n2 )
16. Soit la BNF suivante pour la structure conditionnelle en
langage ADA
if_statement : :=
"if" condition "then" sequence_of_statements
{"elsif" condition "then" sequence_of_statements}
["else" sequence_of_statements]
"end if ;"
Quelle(s) est(sont) la(les) séquence(s) valide(s) ?
if A=B then A := B + 1 ; end if ;
17. Que peut-on dire d’une table de données lorsque
l’implémentation est réalisée par des tableaux non ordonnés ?
L’opération d’insertion est O(1)
if A=B then A := B + 1 ;
else A := B ; end if ;
if A=B then A := B + 1 ; elsif A=C then
A := C + 1 ; elsif A=D then A := D + 1 ;
end if ;
L’opération d’insertion est O(n)
L’opération de recherche est O(1)
L’opération de recherche est O(n)
L’opération de suppression est O(n)
18. Soit la portion de code suivante, dans un langage compilé
inventé, où le “.” désigne l’opérateur de concaténation de
chaines :
int i ; string s, r ;
i = 0;
s = “L” ;
r = s.i.s ;
En sortie, r contient L0L.
En se limitant à ces seules informations, comment peut-on
qualifier le typage de ce langage ?
statique
dynamique
faible
explicite
implicite
19. Parmi les list comprehension suivantes, quelle(s) est(sont) l’(les) implémentation(s) fonctionnelle(s) du tri rapide ?
1.
2.
def func1(L):
if L == []:
return []
pivot = L[0]
return (func1([x for x in L[:len(L)/2] if x < pivot]) +
[pivot] +
func1([x for x in L[len(L)/2:] if x >= pivot]))
def func2(L):
if L == []:
return []
pivot = L[0]
return (func2([x for x in L[1:] if x <= pivot]) +
[pivot] +
func2([x for x in L[1:] if x > pivot]))
3.
4.
def func3(L):
if L == []:
return []
pivot = L[-1]
return (func3([x for x in L[:L[-1]] if x < pivot]) +
[pivot] +
def func4(L):
if L == []:
return []
pivot = L.pop(0)
return (func4([x for x in L[1:] if x <= pivot]) +
[pivot] +
Juin 2010
Page 4/4
Questions à réponses ouvertes
1. Supposons un tableau T [i] de n valeurs classées de façon croissante. On cherche à savoir si une valeur a donnée est présente
dans T [i].
(a) Ecrire un algorithme naïf pour la recherche de a. Préciser sa complexité.
(b) Ecrire un algorithme de recherche par dichotomie. Préciser sa complexité.
Rappel : recherche dichotomique = recherche récursive dans une moitié du tableau
2. Soit l’expression infixée A+B*C-D/E, obéissant à la priorité des opérateurs.
(a) Convertir l’expression en arbre.
(b) Donner l’expression postfixée équivalente.
(c) Soit la structure Noeud et la déclaration de fonction ci-dessous.
Noeud
data
leftchild
rightchild
fin_Noeud
<valeur>
<pointeur -> noeud>
<pointeur -> noeud>
expr_math(Noeud N) : retourne l’expression mathématique (infixée) parenthésée
correspondant à l’arbre d’expression de racine N.
Fournir l’implémentation de expr_math.
Rappel : un arbre d’expression ne contient que les opérateurs et les opérandes.
3. Une liste circulaire est une liste dont le dernier élément de la liste pointe sur le premier de celle-ci. Ecrire, pour une liste
circulaire doublement chainée non-vide :
(a) l’opération d’insertion d’un élément
(b) l’opération de suppression d’un élément
Téléchargement