Ennobros


Télécharger au format pdf

05

Programmation dynamique

Exercice 1

Q 1.1

Q 1.2

Q 1.3

On en déduit que:

Q 1.4

t = [1, 2]

def nb(n):
if len(t) > n:
return t[n]

tmp = nb(n-1) + (n-1) * nb(n-2)
t.append(tmp)
return tmp

def nb(n):
t = [1, 2] + [0] * (n-2)

for i in range(3, n+1):
t[i] = t[i-1] + (i-1) * t[i-2]
return t[n]

Exercice 2

Q 2.1

Avec valeurs de l’exemple, , stratégie gloutonne donne alors que la meilleure option est

Q 2.2

1.

le morceau maximal que l’on peut obtenir pour une corde de mètres

2.

, en initialisant

3.

DecoupeCorde(p,n)
Entrée p[1..n] un tab de prix, avec p[i] = p_i
sortie: Découpe optimale à partir d'une corde de longueur n
L[0] <- 0
pour i allant de 1 à n faire:
r[i] <- - inf
pour j allant de 1 à i faire:
r[i] <- max(r[i]n r[i - j] + p[j])
renvoyer p[n]

Q 2.3

DecoupeCorde(p,n)
Entrée p[1..n] un tab de prix, avec p[i] = p_i
sortie: Découpe optimale à partir d'une corde de longueur n
L[0] <- 0
pour i allant de 1 à n faire:
r[i] <- - inf
pour j allant de 1 à i faire:
r[i] <- max(r[i]n r[i - j] + p[j])
renvoyer p[n]

Exercice 3

Q 3.1

Q 3.2

pour i allant de n-1 à 1 faire
opt[i] := + inf
pour j allant de i + 1 à n faire
si c [i, j] + opt[j] < opt[i] alors
opt[0] := c[i, j] + opt[j]

Q 3.3

opt[n] := 0, S[n] := n

pour i allant de n-1 à 1 faire
opt[i] := + inf
pour j allant de i + 1 à n faire
si c [i, j] + opt[j] < opt[i] alors
opt[0] := c[i, j] + opt[j]
s[i] := j

Exercice 4

Q 4.1


Page incomplète ou erronée? Contribuez sur le repo