nsi:terminales:sac_a_dos
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| nsi:terminales:sac_a_dos [2023/02/03 11:28] – goupillwiki | nsi:terminales:sac_a_dos [2023/02/03 12:08] (Version actuelle) – goupillwiki | ||
|---|---|---|---|
| Ligne 5: | Ligne 5: | ||
| ===== Qu' | ===== Qu' | ||
| - | Un problème classique d' | + | Un problème classique d' |
| <WRAP tip>On peut voir cela comme un problème de cambrioleur : le cambrioleur dispose d'un sac de taille forcément limitée, et se demande ce qu'il a intérêt à voler. On comprend qu'il prendra des bijoux qui sont précieux et peu encombrant. Prendra-t-il une statuette ? un appareil électronique ? Il cherche à emporter le plus de valeur possible mais est limité par son sac.</ | <WRAP tip>On peut voir cela comme un problème de cambrioleur : le cambrioleur dispose d'un sac de taille forcément limitée, et se demande ce qu'il a intérêt à voler. On comprend qu'il prendra des bijoux qui sont précieux et peu encombrant. Prendra-t-il une statuette ? un appareil électronique ? Il cherche à emporter le plus de valeur possible mais est limité par son sac.</ | ||
| - | **Exemple :** On dispose d'un sac d'une capacité de $C = 15\,kg$ et de la liste d' | + | **Exemple :** On dispose d'un sac d'une capacité de $C = 15$ et de la liste d' |
| - | ^ Objet ^ Valeur ^ Poids ^ | + | ^ Objet ^ Valeur ^ Encombrement |
| - | | A | 126 | 14 | | + | | A | 126 | 14 |
| - | | B | 32 | 2 | + | | B | 32 | 2 | |
| - | | C | 20 | 5 | + | | C | 20 | 5 | |
| - | | D | 5 | 1 | + | | D | 5 | 1 | |
| - | | E | 18 | 6 | + | | E | 18 | 6 | |
| - | | F | 80 | 8 | + | | F | 80 | 8 | |
| ===== Vu en première : L' | ===== Vu en première : L' | ||
| Ligne 30: | Ligne 30: | ||
| Par exemple, si on choisit de trier par **valeur décroissante**, | Par exemple, si on choisit de trier par **valeur décroissante**, | ||
| - | ^ Objet ^ Valeur ^ Poids ^ | + | ^ Objet ^ Valeur ^ Encombrement |
| - | | A | 126 | 14 | | + | | A | 126 | 14 |
| - | | F | 80 | 8 | + | | F | 80 | 8 | |
| - | | B | 32 | 2 | + | | B | 32 | 2 | |
| - | | C | 20 | 5 | + | | C | 20 | 5 | |
| - | | E | 18 | 6 | + | | E | 18 | 6 | |
| - | | D | 5 | 1 | + | | D | 5 | 1 | |
| Puis on complète le sac : | Puis on complète le sac : | ||
| Ligne 47: | Ligne 47: | ||
| == Tri par valeur / poids décroissant == | == Tri par valeur / poids décroissant == | ||
| - | On aurait aussi pu trier par **rapport valeur / poids décroissant** | + | On aurait aussi pu trier par **rapport valeur / encombrement |
| - | ^ Objet ^ Valeur ^ Poids ^ rapport V/P ^ | + | ^ Objet ^ Valeur ^ Encombrement |
| - | | B | 32 | 2 | + | | B | 32 | 2 | 16 | |
| - | | F | 80 | 8 | + | | F | 80 | 8 | 10 | |
| - | | A | 126 | 14 | 9 | | + | | A | 126 | 14 |
| - | | D | 5 | 1 | + | | D | 5 | 1 | 5 | |
| - | | C | 20 | 5 | + | | C | 20 | 5 | 4 | |
| - | | E | 18 | 6 | + | | E | 18 | 6 | 3 | |
| Dans ce cas on prend B, F, pas A qui ne rentre plus, D, pas C ni E qui ne rentrent plus. | Dans ce cas on prend B, F, pas A qui ne rentre plus, D, pas C ni E qui ne rentrent plus. | ||
| Ligne 67: | Ligne 67: | ||
| ==== Principe ==== | ==== Principe ==== | ||
| - | L' | + | L' |
| <wrap important> | <wrap important> | ||
| - | Par exemple $sad_{2,8}$ consiste à résoudre le cas d'un sac de capacité 8 kg avec seulement les deux objets : | + | Par exemple $msad_{2,8}$ consiste à résoudre le cas d'un sac de capacité 8 avec seulement les deux objets : |
| - | ^ Objet ^ Valeur ^ Poids ^ | + | ^ Objet ^ Valeur ^ Encombrement |
| - | | A | 126 | 14 | | + | | A | 126 | 14 |
| - | | B | 32 | 2 | + | | B | 32 | 2 | |
| - | Il devrait être évident que dans ce cas, le meilleur sac contient seulement B. On pourra dire que $sad_{2, 8} = \{ B \}$. | + | Il devrait être évident que dans ce cas, le meilleur sac contient seulement B. On pourra dire que $msad_{2, 8} = \{ B \}$. |
| Dans le cas de notre problème, on pourra prendre $0 \leqslant i \leqslant 6$ et $0 \leqslant c \leqslant C = 15$. | Dans le cas de notre problème, on pourra prendre $0 \leqslant i \leqslant 6$ et $0 \leqslant c \leqslant C = 15$. | ||
| Ligne 84: | Ligne 84: | ||
| == Questions == | == Questions == | ||
| - | - Que vaut $sad_{0,0}$ ? | + | - Que vaut $msad_{0,0}$ ? |
| - | - Plus généralement, | + | - Plus généralement, |
| - | - De même, que vaut $sad_{0,c}$ pour tous les $c$ ? | + | - De même, que vaut $msad_{0,c}$ pour tous les $c$ ? |
| - | - Pour quelle valeur de $i$ et $c$ faut-il trouver $sad_{i,c}$ pour répondre au problème posé au début ? | + | - Pour quelle valeur de $i$ et $c$ faut-il trouver $msad_{i,c}$ pour répondre au problème posé au début ? |
| </ | </ | ||
| - | La méthode dynamique consiste à chercher $sad_{i,c}$ en considérant les valeurs de $sad{i', | + | La méthode dynamique consiste à chercher $msad_{i,c}$ en considérant les valeurs de $msad_{i', |
| | ^ c = 0 ^ c = 1 ^ c = 2 ^ c = 3 ^ ... ^ c = 14 ^ c = 15 ^ | | ^ c = 0 ^ c = 1 ^ c = 2 ^ c = 3 ^ ... ^ c = 14 ^ c = 15 ^ | ||
| Ligne 103: | Ligne 103: | ||
| == Questions == | == Questions == | ||
| - | - $sad(2,4)$ est le meilleur sac de capacité 4 kg avec un choix d'item parmi A, B. $sad(3,4)$ est le meilleur sac de capacité 4 kg avec un choix d'item parmi A, B, C.\\ Pourquoi puis-je affirmer que $sad(2,4) = sad(3,4)$ ? | + | - $msad_{2,4}$ est le meilleur sac de capacité 4 avec un choix d'item parmi A, B.\\ $msad_{3,4}$ est le meilleur sac de capacité 4 avec un choix d'item parmi A, B, C.\\ Pourquoi puis-je affirmer que $msad_{2,4} = msad_{3,4}$ ? |
| - | - $sad(3,7)$ est le meilleur sac de capacité 7 kg avec un choix d'item parmi A, B, C. Pourquoi puis-je affirmer que $sad(3,7)$ est le meilleur entre | + | - $msad_{3,7}$ est le meilleur sac de capacité 7 avec un choix d'item parmi A, B, C.\\ Pourquoi puis-je affirmer que $msad_{3,7}$ est le meilleur entre |
| - | * $sad(2,7)$, meilleur sac de capacité 7 kg avec un choix d'item parmi A, B, | + | * $msad_{2,7}$, meilleur sac de capacité 7 avec un choix d'item parmi A, B, |
| - | * $sad(2,2) \cup \{ C \}$, c'est à dire le meilleur sac de capacité 2 kg avec un choix d'item parmi A, B, auquel on aurait ajouté C. | + | * $msad_{2,2} \cup \{ C \}$, c'est à dire le meilleur sac de capacité 2 avec un choix d'item parmi A, B, auquel on aurait ajouté C. |
| </ | </ | ||
| - | D'une façon générale, pour $0 < i$ et $0 < c$, on calcule $sad(i,c)$ en considérant le meilleur entre : | + | D'une façon générale, pour $0 < i$ et $0 < c$, on calcule $msad_{i,c}$ en considérant le meilleur entre : |
| - | * le sac $sad(i-1, c)$ -- c'est à dire le sac de même capacité dans lequel **on ne prend pas** le ième item, | + | * le sac $msad_{i-1, c}$, c'est à dire le sac de même capacité dans lequel **on ne prend pas** le i< |
| - | * le sac $sad(i-1, c-p_i) \cup {\text{ième item}\}$, où $p_i$ est le poids du ième item, à condition que $p_i \leqslant c$. | + | * le sac $msad_{i-1, c-p_i} \cup \{\text{i}^\text{ème}\text{ |
| ==== Implémentation ==== | ==== Implémentation ==== | ||
| - | Pour les besoins du programme, on stockera les objets dans un dictionnaire | + | Pour les besoins du programme, on stockera les objets dans un tableau |
| <code lang=python> | <code lang=python> | ||
| - | objets = { | + | objets = [ |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | } | + | ] |
| </ | </ | ||
| - | |||
| - | Faites attention que, par exemple, les 3 premiers objets ont les indices 0 à 2. | ||
| - | |||
| <WRAP box> | <WRAP box> | ||
| == Questions == | == Questions == | ||
| - | - Écrire une fonction '' | + | - Écrire une fonction '' |
| >>> | >>> | ||
| 146 | 146 | ||
| </ | </ | ||
| - | - Écrire une fonction '' | + | - Écrire une fonction '' |
| - | >>> | + | >>> |
| 19 | 19 | ||
| </ | </ | ||
| </ | </ | ||
| - | On va maintenant réaliser une fonction '' | + | On va maintenant réaliser une fonction '' |
| - | '' | + | '' |
| - | Il faudra d' | + | Il faudra d' |
| <WRAP box> | <WRAP box> | ||
| Ligne 155: | Ligne 152: | ||
| - Testez et vérifiez que l'on obtient, pour notre problème, un meilleur sac à dos qu' | - Testez et vérifiez que l'on obtient, pour notre problème, un meilleur sac à dos qu' | ||
| - Évaluez la complexité temporel de cet algorithme. | - Évaluez la complexité temporel de cet algorithme. | ||
| + | - On vous fournit les objets sous forme d'un fichier csv {{ : | ||
| </ | </ | ||
| + | |||
| + | |||
| + | |||
nsi/terminales/sac_a_dos.1675420121.txt.gz · Dernière modification : de goupillwiki
