0% ont trouvé ce document utile (0 vote)
196 vues4 pages

Exam 2013 - Sol

Ce document contient les corrigés d'un examen portant sur l'algorithmique avancée et la complexité. Il présente les réponses à 4 exercices traitant de la complexité d'algorithmes, de l'algorithme MinMax avec élagage alpha-bêta, du plus court chemin avec l'algorithme A* et d'un problème de sac à dos résolu avec un algorithme glouton.

Transféré par

ampo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
196 vues4 pages

Exam 2013 - Sol

Ce document contient les corrigés d'un examen portant sur l'algorithmique avancée et la complexité. Il présente les réponses à 4 exercices traitant de la complexité d'algorithmes, de l'algorithme MinMax avec élagage alpha-bêta, du plus court chemin avec l'algorithme A* et d'un problème de sac à dos résolu avec un algorithme glouton.

Transféré par

ampo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 4

UHBC - Dept d'informatique 2012/2013

Master Ingénierie des Logiciels


Algorithmique Avancée et Complexité
_________________________________________________________

Corrigé d’examen
Exercice 1 : (6 pts)
1) On considère l'algorithme suivant:
Procédure Algo(Entrée n :Entier)
Début
Pour i :=1 à n Faire Algo1(n) Fait ;
Algo2(n) ;
Algo3(n) ;
Fin ;

Sachant que Algo1(n) s'effectue en temps O(log n), Algo2(n) en temps O(n) et Algo3(n) en temps O(n2),
quelle est la complexité de Algo(n)?
Réponse :
La boucle pour en O(nlogn), Algo2(n) en O(n) et Algo3(n) en O( n2) la complexité de Algo(n) est donc en
O(n2) ( la plus grande).

2) Soit la fonction récursive suivante :

Fonction F(entrée i, j: entier): entier;


Début
Si i=1 Alors F :=j ;
Sinon Si (i Mod 2)=1 Alors F := j+ F(i/2,j*2);
Sinon F := F(i/2,j*2);
Fsi ;
Fsi ;
Fin;

a. Calculer les résultats de cette fonction pour les valeurs suivantes : F(1,10)=10 ; F(2,10)=20 ;
F(3,10)=30 ; F(4,10)=40 ; F(6,10)=60 et F(10,10)=100.

L’opération réalisée par cette fonction est la multiplication de deux nombres entiers positifs.

b. La complexité algorithmique de F est en O(log2n) car à chaque itération on divise n/2 .


c. Cette fonction n’est pas récursive à droite car il y a un traitement après l’appel récursif (l’opération
d’addition)
d. Proposer une fonction itérative équivalente à F.

Avant de transformer cette fonction récursive en une fonction itérative, on propose la fct récursive à
droite suivante :

Fonction Fr(entrée i, j,a: entier): entier;


Début
Si i=1 Alors F :=a+j ;
Sinon Si (i Mod 2)=1 Alors F := F(i/2,j*2, a+j);
Sinon F := F(i/2,j*2,a);
Fsi ;
Fsi ;
Fin;
Cette fonction est récursive à droite, on peut facilement maintenant éliminer la récursivité.

Fonction Fit(entrée i, j :entier): entier;


Début
Var a : Entier ;
a :=0 ;
Tant que i<>1 faire
Si (i Mod 2)=1 Alors a := j+ a; Fsi,
i:= i/2,
j :=j*2;
Fait;
Fit :=a+j ;
Fin;

Exercice 2 : (3 pts)

Considérer l’arbre de jeu suivant:

La racine est le nœud max.


Donnez des valeurs (toutes différentes les unes aux autres) aux feuilles de sorte que l’algorithme MinMax
avec élagage α−β coupe au moins une feuille avec un parcours de gauche à droite de l’arbre.

Corrigé :
On donne les valeurs suivantes: a = 4, b = 8, c = 3, d = 2, e = 6 et f = 7. Dans un parcours gauche à droite
l’algorithme MinMax avec élagage α−β coupe la feuille d.

Exercice 3 : (6 pts)

Considérez la carte suivante avec des villes:

Les routes entre les villes peuvent contenir des parties montantes, descendantes et plates. Dans les parties
montantes on peut avancer à 60 km/h, dans les parties descendantes à 120 km/h et dans les parties plates à
90 km/h. Dans le tableau suivant sont indiqués pour chaque route, le nombre de kilomètres du chemin entre
deux villes par partie (montantes, descendantes, plates).
Chemin entre A et C A,I C,D C,F D,E E,J E,B F,E F,G G,B I,J J,B
Montante 20 50 10 20 0 0 20 0 50 0 0 10
Descendante 20 10 20 0 10 0 30 20 0 60 10 10
Plate 15 30 9 21 9 30 0 21 0 0 30 21

On veut trouver le chemin le plus court en temps (minutes) entre A et B. Pour cela on veut appliquer
l’algorithme A*. On dispose en plus de l’information suivante: Pour chaque ville X on connaît le chemin à
vol d’oiseau entre la ville X et B. Le tableau ci-dessous représente le temps de parcours estimé reliant toutes
les villes.

Indication : Calculer d’abord le temps (minutes) de parcours entre les villes. Sachant que:
la distance= Vitesse*Temps.
Corrigé :
On calcule d’abord le temps de parcours entre les villes

Application de l’algorithme A* sur le graphe :

Etape Choix Ouverts Fermés


Init {A(Nil,0,55)} {}
1 A(Nil,0,55) {C(A,40,79); I(A,75,91)} {A(Nil,0,55)}
2 C(A,40,79) {I(A,75,91), D(C,66,97); F(C,74,105)} {A(Nil,0,55) ; C(A,40,79)}
3 I(A,75,91) {D(C,66,97); F(C,74,105), J(I,100,116)} {A(Nil,0,55) ; C(A,40,79) ; I(A,75,91) }
4 D(C,66,97) {A(Nil,0,55) ; C(A,40,79) ; I(A,75,91)
D(C,66,97)}
5 E(D,77,97) { F(C,74,105), J(E,97,113) ; B (E,112,112); {A(Nil,0,55) ; C(A,40,79) ; I(A,75,91)
} D(C,66,97), E(D,77,97)}
6 F(C,74,105) { J(E,97,113) ; B (E,112,112); {A(Nil,0,55) ; C(A,40,79) ; I(A,75,91)
G(F,124,149), } D(C,66,97), E(D,77,97), F(C,74,105)}
7 B(E,112,112) { J(E,97,113) ; G(F,124,149), } {A(Nil,0,55) ; C(A,40,79) ; I(A,75,91)
(But) D(C,66,97), E(D,77,97), F(C,74,105),
B(E,112,112)}
Le chemin est : (A, C, D, E et B) dont le temps est = 112 minutes

Exercice 4 : (5 pts)
Soit W = {w1, w2, …, wn} une suite de nombres positifs et soit M un entier positif. On souhaite écrire un
algorithme qui utilise un maximum de nombres de W telles que ∑ ∗ ≤ avec xi= 0 ou 1. Par
exemple pour W = {18,23,12,5} et M = 35 ; une solution peut être la liste X= (1,0,1,1).

Proposez un algorithme glouton livrant une solution du problème. Quelle est sa complexité.

Corrigé :
Pour pouvoir utiliser un maximum de nombres, il faut donc trier W par ordre croissant, et commencer à
prendre les plus nombres d’abord.

Procédure Glouton ( Entrée W : tab, M : eniter, Sortie X : Tab));


Debut
Initialiser X(i) à 0 pour i :=1 à n ;
Trier (W) ;
I:=1 ; T:=0 ; Poursuite :=Vrai ;

Tant que i<=n et Poursuite

Faire Si T+w[i]<=M Alors T=T+w[i];

X(i):=1; i:=i+1;

Sinon Poursuite:=Faux;

Fsi ;

Fait;

Fin ;

La complexité de cet algorithme est calculée comme suit :

Au pire cas, la boucle tant que est répétée n fois ; et la complexité du tri est généralement de l’ordre de
O(n2). La complexité de cet algo est donc de l’ordre de O(n2).

Vous aimerez peut-être aussi