• Aucun résultat trouvé

Correction du problème de rendu de monnaie Première approche 2. Tableau

N/A
N/A
Protected

Academic year: 2022

Partager "Correction du problème de rendu de monnaie Première approche 2. Tableau"

Copied!
2
0
0

Texte intégral

(1)

NSI Lycée Louis de Foix

Correction du problème de rendu de monnaie Première approche

2. Tableau

monnaie\somme 0 1 2 3 4 5 6 7 8 9 10 1 0 1 2 0 0 1 0 0 0 1 0 3 0 0 0 1 0 0 2 1 0 0 2 4 0 0 0 0 1 1 0 1 2 2 1 Total 0 1 2 1 1 2 2 2 2 3 3 3. Algorithme

pour i allant de 0 à n : T[i, 0] ← 0 pour j allant de 1 à s :

res_j ← +∞

pour i allant de 0 à n – 1 : val ← monnaie[i]

si val <= j alors :

res_ij ← 1 + T[n, j – val]

si res_ij < res_j alors : res_j ← res_ij i_opt ← i T[n, j] ← res_j

# enregistrement d’une solution optimale si res_j ≠ +∞ alors :

val ← monnaie[i_opt]

pour i allant de 0 à n – 1 : T[i, j] ← T[i, j – val]

T[i_opt, j] ← T[i_opt, j] + 1

Suite à l’exécution de cet algorithme, le résultat optimal est dans la dernière colonne.

T[n, s] contient le nombre minimal de pièce et T[i, s] pour i allant de 0 à n – 1 le nombre de pièces de chaque type.

4. La complexité en mémoire est donnée par la taille du tableau, donc en O(ns). Ce n’est plus que O(s) si on ne conserve pas les solutions mais seulement le nombre de pièces.

La complexité en temps est toujours en O(ns), puisqu’on a deux boucles imbriquées avec des opérations en temps constant. L’enregistrement d’une solution optimale rajoute des instructions sans changer l’ordre de complexité.

(2)

NSI Lycée Louis de Foix Deuxième approche 2. Tableau

monnaie\somme 0 1 2 3 4 5 6 7 8 9 10 0 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ 1 0 1 2 3 4 5 6 7 8 9 10 3 0 1 2 1 2 3 2 3 4 3 4 4 0 1 2 1 1 2 2 2 2 3 3 3. Algorithme

pour j allant de 1 à s : T[0, j] ← +∞

pour i allant de 0 à n : T[i, 0] ← 0 pour i allant de 1 à n :

pour j allant de 1 à s : val ← monnaie[i-1]

si val > j alors :

T[i, j] ← T[i – 1, j]

sinon :

T[i, j] ← min(T[i – 1, j], 1 + T[i, j – val])

L’algorithme ci-dessus permet de compléter le tableau. T[n, s] contient le nombre minimal de pièces à rendre. Il reste ensuite à reconstituer une solution optimale :

solution ← [0]*n i ← n

j ← s

tant que i > 0 ou j > 0 :

si T[i, j] = T[i – 1, j] alors : i ← i – 1

sinon :

solution[i-1] ← solution[i-1] + 1 j ← j – monnaie[i-1]

Le tableau solution contient alors le nombre de pièces de chaque type.

4. La complexité en mémoire est en O(ns).

La complexité en temps est aussi en O(ns). Reconstituer la solution est en O(n + s) et ne change donc pas l’ordre de complexité global qui reste en O(ns).

Références

Documents relatifs

En revanche, le Royaume-Uni béné cie d’une croissance plus rapide du PIB et d’une progression de la productivité, elle aussi plus rapide que dans les autres pays, mais

L’objectif de cette activité est d’écrire une fonction qui permet de trier une liste de nombres dans l’ordre croissant2. Pour créer une liste de nombres choisis aléatoirement,

Tu ne peux remplir cette fiche que si tu as lu le livre. a) Quel est le nom de la voisine de Mathilde ?. 2) Ce que sont les personnages. b) Elle se déplace sans faire plus de

Écrivez une fonction friends(R,a) qui, pour un réseau R et un utilisateur a, retourne une liste contenant tous les amis de a dans le réseau et une liste vide s’il n’en possède

Écrivez une fonction int [] friends (int[][] R, int a) qui pour un réseau R et un utilisateur a retourne un tableau contenant tous les amis de a dans le réseau et un tableau vide

Écrivez une fonction friends(R,a) qui, pour un réseau R et un utilisateur a, retourne une liste contenant tous les amis de a dans le réseau et une liste vide s’il n’en possède

Pour la suite, vous pouvez supposer que tester la primalité d’un nombre est dans P..

Observons que pour tout sommet x de C , tous les chemins simples de x à s sont soit de longueur impaire, soit de longueur paire, autrement il existerait nécessairement deux sommets x