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 Réponses
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 ?
α
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
nfeuilles ?
2n
2n1
2n
2n1
2n1
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
8. Cet arbre est localement complet
partiellement complet
complet
aucune de ces propositions
9. Cet arbre est équilibré
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 Réponses
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
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)
Sa complexité est O(n2)
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 Réponses
15. Quelle(s) est(sont) l’(les) assertion(s) correcte(s) ? n!
5! +n3est O(n3)
3nlog n+ 2n2
3est O(n2
3)
3n+ 2n3est O(n3)
2n+ 6 log n+ 5n3
4est O(nlog n)
2nlog n+n7
2est 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 ;
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 ;
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)
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, rcontient 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.
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]))
2.
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.
def func3(L):
if L == []:
return []
pivot = L[-1]
return (func3([x for x in L[:L[-1]] if x < pivot]) +
[pivot] +
func3([x for x in L[:L[-1]] if x >= pivot]))
4.
def func4(L):
if L == []:
return []
pivot = L.pop(0)
return (func4([x for x in L[1:] if x <= pivot]) +
[pivot] +
func4([x for x in L[1:] if x > pivot]))
Juin 2010 Page 4/4
Questions à réponses ouvertes
1. Supposons un tableau T[i]de nvaleurs classées de façon croissante. On cherche à savoir si une valeur adonné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 <valeur>
leftchild <pointeur -> noeud>
rightchild <pointeur -> noeud>
fin_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
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !