Devoir #2 - Université d'Ottawa
Devoir #2 - Université d'Ottawa
Devoir #2 - Université d'Ottawa
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Université</strong> <strong>d'Ottawa</strong><br />
École de science informatique et de génie électrique<br />
CSI 3505, Automne 2012 Prof: Nejib Zaguia<br />
<strong>Devoir</strong> <strong>#2</strong> Date limite: Lundi 5 novembre 2012 à 13:00<br />
Important:<br />
La présentation du devoir doit être bien soignée.<br />
Écrivez votre nom, votre numéro d’étudiant, le numéro du devoir et le code du cours<br />
(CSI 3505) sur chaque page.<br />
Placez votre devoir dans une enveloppe sur laquelle vous écrivez les mêmes<br />
informations (votre nom, votre numéro d’étudiant, le numéro du devoir, le code du<br />
cours). A remettre durant les heures du cours, sinon vous pouvez glissez votre devoir<br />
sous la porte de mon bureau a SITE 5-031. Notez que les devoirs remis en retard ne<br />
seront pas corrigés.<br />
Exercice 1 [20 points]<br />
Considérez la variation des nombres de Fibonacci, appelé les nombres de<br />
VarFibonacci , qui est définis récursivement comme suit:<br />
B0 = 0, B1 = 1, B2 = 2, B3 = 3 et pour n 4, Bn = Bn-1 + Bn-2 + Bn-4 + 2.<br />
Alors cette séquence de VarFibonacci est 0, 1, 2, 3, 7, 13, 24, 42, …<br />
Un algorithme récursif qui trouve le nième terme de la séquence de VarFibonacci est<br />
le suivant:<br />
Problème: Déterminer le nième terme de la séquence de VarFibonacci<br />
Entrées : un entier positif n.<br />
Sorties le nième terme de la séquence de VarFibonacci .<br />
int VarFibonacci (int n)<br />
{<br />
if (n
Exercice 2 [20 points]<br />
On considère un tableau 2-dimensionnelle T de taille n x n (n lignes et n colonnes) et<br />
une valeur x. On suppose que les lignes et les colonnes de ce tableau sont toutes triées,<br />
c’est à dire :<br />
T[i][j] T[i][j+1]<br />
T[i][j] T[i+1][j]<br />
Le problème est de retrouver des index i et j (s’ils existent) tels que T[i][j] = x.<br />
(1) [10 points] écrivez un algorithme en utilisant la technique "diviser pour régner"; et<br />
qui résolve ce problème. Il est important d’expliquer en détail votre algorithme<br />
(idée) avant d’écrire le pseudo code.<br />
(2) [10 points] Prouver en détail la complexité dans le pire cas de votre algorithme<br />
dans la partie 1) [utiliser n comme la taille du problème, et les comparaisons comme<br />
opérations élémentaires à compter.]<br />
[La note accordée dans la question 2 dépendra de l’efficacité (complexité dans le<br />
pire cas) de votre algorithme.]<br />
Exercice 3 [20 points]<br />
Appliquez la méthode de programmation dynamique (vue en classe) pour la<br />
multiplication en chaîne des 4 matrices afin de trouver une solution optimale (donner<br />
les deux tableaux calculés par l’algorithme, puis retrouver la solution optimale)<br />
A1 x A2 x A3 x A4<br />
2x3 3x1 1x4 4x2<br />
Exercice 4 [20 points]<br />
Considérez l’algorithme vorace suivant pour le problème de la multiplication en<br />
chaîne des n matrices A1, A2, …, An. On suppose que, pour tout 1 ≤k≤n, la taille de la<br />
matrice Ak est pk-1 x pk.<br />
A chaque étape :<br />
Trouver la valeur maximale de pk, où 1
a) [16 points] Compléter le tableau ci-dessous:<br />
0<br />
1<br />
2<br />
3<br />
4<br />
5<br />
0 1 2 3 4 5 6 7 8<br />
b) [4 points]<br />
A partir de cette table de résultats et en utilisant la méthode de retour en arrière,<br />
trouver l’ensemble des objets dans une solution optimale. Vous devez encercler les<br />
entrées dans la table qui correspondent a la solution optimale (i.e. l’ensemble des<br />
objets dont le poids total ne dépasse pas W et qui donnent un gain maximal.)