Algorithmique TD 2
Licence M/I
Date: 3 octobre 2005
Exercice 1:
Soit t un tableau d'entiers relatifs de taille n; on considère
les sommes de cases successives et on veut calculer le maximum parmi ces
sommes. Proposer un algorithme et évaluer sa complexité.
Exercice 2:
Problème de sac à dos.
Un sac à dos a une certaine capacité C
On dispose de n objets de
volumes v[1],v[2],...,v[n]. On veut remplir le plus possible le
sac à dos, c'est-à-dire trouver un sous-ensemble d'objets dont la somme
des volumes soit inférieure à C et maximale.
- Résoudre le problème du sac à dos pour
C=150 et v={16,22,54,56,71}.
- On note m(C,v[1..k]) la solution au problème de sac à dos
pour un sac de capacité avec les objets 1,2,...,k.
Trouver une relation entre m(C,v[1..k]), m(C,v[1..(k-1)])
et m(C-v[k],v[1..(k-1)]).
En déduire un algorithme de calcul de
m(C,v[1..n]). Quel est sa complexité en temps et en espace ?
- On veut remplir un tableau M
de taille nXn de telle sorte
que M[i,k]=m(C-(v[i+1]+..+v[n]),v[1..k]).
Donner un algorithme quadratique
pour remplir ce tableau. En déduire un algorithme quadratique en temps
et en espace pour calculer m(C,v[1..n]).
Exercice 3: Plus grande sous-séquence commune. Un mot w
de longueur n est une suite de n lettres:
w=w[1]w[2]...w[n]. Un sous-mot de w
est une sous-suite: w[s(1)]w[s(2)]...w[s(k)], avec s fonction
strictement croissante. On cherche un algorithme pour calculer
la longueur maximale d'un sous-mot commun à deux mots donnés u et v.
- Trouver le(s) plus long(s) sous-mot(s) commun(s)
à abracadabra et barbapapa.
- On note l(u,v) la longueur maximale d'un sous-mot commun à
u et à v. Si u=u[1]...u[n] et v=v[1]...v[m], on note
u'=u[1]...u[n-1] et v'=v[1]...v[m-1].
Trouver une relation entre l(u,v), l(u',v), l(u,v') et l(u',v').
dépendant du fait que les dernières lettres de u et v sont égales ou non.
- Trouver un algorithme quadratique pour le calcul du plus long sous mot
commun.
Sylvain LOMBARDY
2005-09-30