Examen du 16 Juin 2015

publicité
L3 Informatique
année 2014-2015
Méthodes Algorithmiques
Examen du 16 Juin 2015
Responsable : Sophie Pinchinat
Documents non autorisés
Exercice 1
On considère l’algorithme suivant :
Algorithm 1 XXX(A[1 . . . n] d’entiers, k entier, B[1 . . . n] d’entiers
Require: k = max1≤i≤n A[i]
1: var C[0 . . . k] d’entiers
2: for i = 0 to k do
3:
C[i] ← 0
4: end for
5: for j = 1 to longueur[A] do
6:
C[A[j]] ← C[A[j]] + 1
7: end for
8: for i = 1 to k do
9:
C[i] ← C[i] + C[i − 1]
10: end for
11: for j = longueur[A] to 1 do
12:
B[C[A[j]] ← A[j]
13:
C[A[j]] ← C[A[j]] − 1
14: end for
1) Exécuter l’Algorithme 1 pour les paramètres A = [2, 5, 3, 0, 2, 3, 0, 3] et k = 5, selon les
trois étapes entre les lignes 5 − 7, 8 − 10, et 11 − 14, en ne faisant apparaı̂tre pour chacune
des ces trois étapes que la valeur des tableaux C et B. Détailler toutefois les deux premières
itérations de la boucle for de la ligne 11.
2)
Quelle est la propriété vérifiée après l’exécution des lignes 5 − 7 ?
3)
Quelle est la propriété vérifiée après l’exécution des lignes 8 − 10 ?
4)
Que réalise l’Algorithme 1 ?
5)
Quel serait l’effet de mettre for j = 1 to longueur[A] do à la ligne 11 ?
1
Exercice 2 Un serveur dans un restaurant a n clients attendant d’être servis. Chaque client
a un numéro i compris entre 1 et n, et le temps requis pour servir chaque client est connu à
l’avance : le client i requiert un temps de service ti . Par exemple, si on décide de servir les
clients dans l’ordre de leur numéro, le temps d’attente Ai du client i (qui doit attendre que
tous les clients précédents soient servis), vérifie les Équations (1) et (2) suivantes :
Ai = Σij=1 tj
(1)
Ai = Ai−1 + ti
(2)
On cherche à minimiser le temps d’attente global A = Σni=1 Ai .
1)
Dans quel ordre vous paraı̂t-il judicieux de servir les clients ?
2)
En vous servant des Équations (1) et (2), montrez que cet ordre minimise A.
3)
Déduisez-en un algorithme pour résoudre ce problème, ainsi que sa complexité.
Exercice 3
Vous disposez de trois algorithmes pour résoudre un problème donné.
• L’Algorithme a résoud le problème (de taille n) en résolvant récursivement 2 sousproblèmes de taille n − 1 et en recombinant les solutions en temps constant.
• L’Algorithme b résoud le problème en le divisant en 5 sous-problèmes de taille moitié
moindre, en résolvant ces sous-problèmes récursivement, et en recombinant les solutions
en temps linéaire.
• L’Algorithme c résoud le problème (de taille n) en le divisant en 9 sous-problèmes
de taille n/3, en résolvant récursivement chaque sous-problème, et en recombinant les
solutions en temps O(n2 ).
1) On note Tx (n) le temps de calcul de l’Algorithme x sur une entrée de taille n, donnez
les équations qui décrivent Tx (n) pour chaque x ∈ {a, b, c}.
2)
Quel est asymptotiquement le temps d’exécution de chaque algorithme ?
3) Bonus Lequel choisiriez-vous ?
2
Téléchargement