Vide ou pleine : le témoin qui ment
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 7 — Structures séquentielles : listes, piles, files
Énoncé
Une file circulaire est écrite avec deux indices debut et fin, sans compteur, et est_vide teste debut == fin. Montrer que cette réalisation est fausse, et comparer les deux parades.
Corrigé
Mesuré, avec une capacité de :
file neuve : debut=0 fin=0 est_vide dit VIDE correct
apres 8 enfilages : debut=0 fin=0 est_vide dit VIDE FAUX
or le tableau contient [100 101 102 103 104 105 106 107]
Le défaut nommé. L'indice fin avance modulo ; après huit enfilages il a fait un tour complet et revient sur . Les deux états « aucun élément » et « huit éléments » ont donc le même témoin, et aucune fonction ne peut les distinguer. Ce n'est pas un défaut de codage : c'est un défaut de représentation — deux états du monde, une seule image.
Les deux parades.
- Retenir , le nombre d'éléments, comme le fait le cours :
est_videteste etest_pleineteste . Les deux états deviennent discernables, la capacité utile reste , etfinn'est plus nécessaire puisqu'il vaut . Coût : un champ. - Laisser toujours une case libre : on refuse d'enfiler quand . Les deux états sont alors distincts, mais la capacité utile tombe à — mesuré : éléments pour un tableau de . Coût : une case.
Comment trancher. Si les éléments sont gros et la capacité petite, une case perdue coûte plus qu'un entier : on retient . Si la structure est manipulée par plusieurs fils d'exécution, la seconde parade a un avantage réel — elle n'a que deux champs à mettre à jour au lieu de trois, ce qui limite les états intermédiaires incohérents (chapitre chap:concurrence).
Ce que l'exercice enseigne au-delà des files. Avant d'écrire une structure, comptez les états qu'elle doit distinguer et les valeurs que sa représentation peut prendre. Si les seconds sont moins nombreux que les premiers, la représentation est fausse, et aucun soin apporté au code ne la sauvera. Ici : tailles possibles ( à ) contre valeurs possibles pour la différence des deux indices.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.