15.07.2013 Views

Devoir #2 - Université d'Ottawa

Devoir #2 - Université d'Ottawa

Devoir #2 - Université d'Ottawa

SHOW MORE
SHOW LESS

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.)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!