Introduction à l'informatique · L1 · Section 6/7
Annales corrigées
Progression
#Annales corrigées
Cette page rassemble les exercices de la première UE d'informatique du semestre 1, l'UE SPUF100 « Bases de l'informatique 1 » de la Licence Informatique d'Université Côte d'Azur (campus Valrose), dont le cours « Outils formels pour l'informatique » est assuré par Enrico Formenti.
Source exacte. Les énoncés proviennent des feuilles de travaux dirigés distribuées de 2020 à 2023 et des exercices posés dans les transparents de cours. La sélection retient les exercices qui portent sur la représentation de l'information : cardinalité d'un ensemble de données, codage d'un objet par un mot binaire, dénombrabilité, et limites de tout encodage. Les exercices de la même UE consacrés aux relations et ordres, à la logique et aux langages formels sont traités dans les modules correspondants.
| Feuille | Thème | Exercices repris ici |
|---|---|---|
| TD 1 | Ensembles, dénombrement, mots | 1, 2, 4, 5, 6, 7, 8, 10, 11 |
| Cours 1 | Ensembles, dénombrabilité, mots | définition de la cardinalité, diagonale de Cantor, principe des tiroirs |
| Cours 4 | Dénombrement | nombre d'octets et capacité des types machine |
| Cours 9 | Langages formels | dénombrabilité de l'ensemble des mots, codage |
Comment travailler cette page. Chaque exercice est énoncé tel qu'il a été distribué, puis suivi d'une correction détaillée. Cherchez d'abord sans ouvrir la correction, en particulier la modélisation de l'exercice 1 : c'est elle qui est notée, pas le calcul final.
#Exercice 1 — Décrire et compter un ensemble d'objets
Énoncé (TD 1, exercice 1). Un programme utilise les objets d'une classe Date.
- Proposez une description de l'ensemble des objets possibles.
- Quel est le cardinal de ?
Correction détaillée
1. Modélisation. Un objet Date est entièrement déterminé par un triplet d'entiers : une année, un mois, un jour. L'ensemble des objets possibles est donc une partie de :
où est le nombre de jours du mois de l'année : 31 pour janvier, mars, mai, juillet, août, octobre, décembre ; 30 pour avril, juin, septembre, novembre ; 28 ou 29 pour février selon que l'année est bissextile ou non.
Le point important n'est pas la formule mais la démarche : un objet logiciel se décrit comme un élément d'un produit cartésien de domaines simples, et les contraintes de validité se traduisent en conditions sur les composantes. C'est exactement la façon dont le cours présente les données d'un programme : toute donnée est codée sur une partie finie de .
2. Cardinal. Il n'y a pas de formule close immédiate : le nombre de jours de février dépend de l'année. On découpe donc selon l'année, ce qui en donne une partition, et on applique le principe additif (si les forment une partition de , alors ).
car les onze mois autres que février totalisent toujours jours.
Avec l'hypothèse usuelle des années 1 à 9999 et de la règle grégorienne (bissextile si divisible par 4, sauf par 100, sauf par 400), le nombre d'années bissextiles vaut
d'où
Ce qu'il faut retenir. Le cardinal d'un ensemble de données se calcule en partitionnant selon le paramètre qui complique le comptage (ici l'année), puis en appliquant le principe additif. Toute autre hypothèse de départ (années 1970-2038, par exemple) donne un autre total, mais la méthode reste identique — c'est elle qui est évaluée.
#Exercice 2 — Sous-ensembles de l'alphabet binaire
Énoncé (TD 1, exercice 2). On appelle l'alphabet binaire .
- Est-ce que ? ? ?
- A-t-on ?
- Quels sont les éléments de ?
- Quels sont les éléments de ?
- Mêmes questions pour à la place de .
Correction détaillée
1. est faux : l'élément appartient à mais pas à , et l'inclusion exige que tout élément du premier soit élément du second. est faux : les seuls éléments de sont et , et l'ensemble n'est ni l'un ni l'autre. est vrai : est l'ensemble des parties de , et est bien une partie de .
La leçon : appartenance et inclusion sont deux relations différentes. Confondre et est l'erreur la plus fréquente sur ce chapitre, et elle est fatale dès qu'on parle d'ensembles d'ensembles.
2. est vrai : l'inclusion est réflexive, tout ensemble est partie de lui-même. C'est aussi le cas de .
3. Les parties de sont l'ensemble vide, les deux singletons et lui-même :
4. a pour éléments les parties de , qui compte 4 éléments, donc
Ce sont : , les quatre singletons , , , , les six paires , , , , , , les quatre triplets et tout entier. Le compte suit la formule pour fini.
5. Avec à la place de : reste faux ; est faux (l'ensemble vide n'a aucun élément) et est faux aussi, car et . En revanche est vrai, est vrai, a pour cardinal , et a pour cardinal .
Le pont avec la représentation. Ces comptages ne sont pas gratuits. Une partie d'un ensemble à éléments se code exactement par un mot binaire de longueur : c'est sa fonction caractéristique, qui vaut 1 sur les éléments de la partie et 0 ailleurs. Ainsi correspond aux mots de longueur 2, et aux mots de longueur 4. Compter les parties et compter les mots binaires, c'est le même calcul — celui qui donne valeurs à un octet.
#Exercice 3 — Capacité d'un type machine
Énoncé (cours 4, transparent 8). Combien existe-t-il d'octets ? On peut en déduire le nombre d'entiers de type byte, short, int et long, de réels de type float et double en Java, sachant qu'ils sont respectivement codés sur 1, 2, 4, 8, 4 et 8 octets.
Correction détaillée
Un octet est un mot de 8 bits. Le nombre de mots de longueur sur un alphabet de symboles est (arrangement avec répétition : choix indépendants à chacune des positions). Ici et , donc il existe
Chaque type étant codé sur un nombre entier d'octets, il admet motifs de bits distincts, où est le nombre de bits :
| Type Java | Octets | Bits | Motifs distincts | Valeur |
|---|---|---|---|---|
byte | 1 | 8 | 256 | — |
short | 2 | 16 | 65 536 | — |
int | 4 | 32 | 4 294 967 296 | |
long | 8 | 64 | 18 446 744 073 709 551 616 | |
float | 4 | 32 | 4 294 967 296 | — |
double | 8 | 64 | 18 446 744 073 709 551 616 | — |
Précision sur les types signés. Le nombre de motifs distincts est dans tous les cas. Pour un type signé, ces motifs se répartissent sur l'intervalle ; pour un type non signé, sur . Ce qui compte ici est la taille du réservoir de motifs, car c'est elle qui borne tout ce que le type peut représenter.
La conséquence décisive. Un double ne dispose que de motifs, alors que l'intervalle contient une infinité non dénombrable de réels (exercice 4). Le principe des tiroirs interdit donc toute correspondance injective entre les réels et les double : deux réels distincts partagent forcément un même motif. C'est la raison mathématique de l'approximation des flottants — celle qui fait que 0.1 + 0.2 ne vaut pas 0.3.
#Exercice 4 — Pourquoi les réels ne sont pas représentables exactement
Énoncé (cours 1, transparents 16 et 19). Le cours affirme : « La non-dénombrabilité est inexistante dans les ordinateurs actuels. Toutes les données (entiers, rationnels, graphes, arbres...) sont codées sur (une partie finie de) . Problème : comment représenter les réels en informatique ? » Démontrez qu'aucun codage injectif de vers les données machine ne peut exister, puis concluez sur les nombres flottants.
Correction détaillée
Étape 1 — ce qu'est une donnée machine. Toute donnée stockée est une suite finie de bits, donc un mot sur l'alphabet . L'ensemble des données machine est contenu dans , l'ensemble de tous les mots binaires, qui est dénombrable (exercice 5). En particulier l'ensemble des valeurs d'un double est fini, de cardinal .
Étape 2 — ce qu'est un codage. Le cours définit un codage de dans comme une application injective de dans : deux objets différents doivent avoir deux codes différents, sinon le décodage est ambigu. Coder les réels, c'est donc chercher une injection de vers les données machine.
Étape 3 — le principe des tiroirs. Le cours énonce : si , il n'existe pas d'injection de dans . Or n'est pas dénombrable, tandis que les données machine le sont (exercice 5). Il n'existe donc aucune injection de vers les données machine.
Le pont entre et l'exercice 6. À chaque suite de 0 et de 1, associons le réel : on lit la suite comme un développement en base 3 n'utilisant que les chiffres 0 et 1. Cette application est injective. En effet, si deux suites distinctes donnaient le même réel, en notant le premier indice où elles diffèrent (disons , ), on aurait
inégalité contredisant l'égalité qu'imposerait le même réel. Si était dénombrable, la partie le serait aussi, donc — en bijection avec — le serait également, ce qui contredit l'exercice 6. n'est donc pas dénombrable, comme l'énonce le cours.
Conclusion. Toute représentation des réels sur une machine est nécessairement non injective : il existe toujours deux réels distincts ayant la même représentation. Autrement dit, la représentation est une approximation, jamais une identité. C'est exactement ce qu'on observe avec les flottants IEEE 754 : la mantisse ne retient qu'un nombre fini de bits significatifs, si bien que est arrondi au flottant le plus proche, et que
1print(0.1 + 0.2) # 0.300000000000000042print(0.1 + 0.2 == 0.3) # FalseConséquence pratique. Ne jamais tester l'égalité de deux flottants : comparer un écart à une tolérance, ou compter en entiers quand l'exactitude est requise. Le défaut n'est pas un bug du langage mais une impossibilité mathématique.
#Exercice 5 — Parties finies de et mots binaires
Énoncé (TD 1, exercice 4). On s'intéresse à la dénombrabilité de l'ensemble des parties finies de .
- Montrez qu'il y a bijection entre l'ensemble et l'ensemble des mots sur l'alphabet , noté .
- Montrez que l'ensemble est dénombrable.
- Déduisez-en que l'ensemble est lui-même dénombrable.
Correction détaillée
1. Un codage explicite des parties finies. À une partie finie non vide de , associons le mot binaire de longueur dont les 1 occupent les positions (positions numérotées à partir de 0), et posons . Autrement dit, est la fonction caractéristique de , tronquée juste après son dernier 1.
- est injective : se relit sur comme l'ensemble des positions des 1, et détermine sans ambiguïté.
- L'image de est l'ensemble , qui est une partie infinie de .
On obtient donc une bijection explicite entre et . Pour obtenir une bijection entre et entier, il suffit d'apparier les deux énumérations : on range les mots de dans l'ordre hiérarchique (par longueur croissante, puis lexicographique) et les mots de dans ce même ordre, et on associe le -ème mot de au -ème mot de . Deux ensembles infinis dénombrables sont toujours en bijection, et cette construction en exhibe une.
2. est dénombrable. On range les mots par longueur croissante, puis par ordre lexicographique à longueur fixe :
Ce rangement attribue à chaque mot un rang unique, donc définit une bijection entre et : c'est la preuve donnée par le cours. Le décompte par longueur est utile à retenir : il y a mots de longueur et mots de longueur au plus ; le rang d'un mot de longueur est donc compris entre et .
3. Conclusion. est en bijection avec , qui est une partie de . Or toute partie d'un ensemble dénombrable est finie ou dénombrable, et est infini. Donc est dénombrable.
Lecture informatique. Ce résultat dit exactement que l'ensemble des données que peut manipuler une machine est dénombrable : un fichier, un graphe fini, un arbre, une liste de rationnels se codent tous par un mot fini sur un alphabet fini. C'est la première moitié de l'argument de l'exercice 4.
#Exercice 6 — n'est pas dénombrable
Énoncé (TD 1, exercice 6). On s'intéresse à présent à l'ensemble tout entier.
- Montrez qu'il y a une bijection entre l'ensemble et l'ensemble des suites infinies de 0 et de 1.
- En utilisant la méthode diagonale de Cantor, montrez que l'ensemble n'est pas dénombrable.
- Déduisez-en que n'est pas dénombrable.
Correction détaillée
1. La fonction caractéristique. À chaque partie , associons sa fonction caractéristique , définie par si et sinon. La suite infinie détermine et réciproquement : deux parties distinctes diffèrent sur au moins un entier, donc leurs suites diffèrent ; toute suite de 0 et de 1 est la fonction caractéristique de la partie formée des indices où elle vaut 1. C'est donc une bijection entre et .
2. La diagonale de Cantor. Supposons, par l'absurde, que soit dénombrable : on peut alors ranger ses éléments en une liste
1s0 = 1 0 1 1 0 ...2s1 = 0 0 1 0 1 ...3s2 = 1 1 1 0 0 ...4s3 = 0 1 0 0 1 ...5...Construisons la suite dont le -ième terme est l'opposé du -ième terme de , c'est-à-dire si le -ième terme de vaut , et sinon. Par construction, diffère de au moins en position , pour tout entier . Donc ne figure nulle part dans la liste, qui est incomplète : contradiction. Aucune liste ne peut épuiser , donc n'est pas dénombrable.
3. Conclusion. Une bijection conserve le cardinal (principe d'égalité : s'il existe une bijection entre et , alors ). Si était dénombrable, le serait aussi. Comme ne l'est pas, ne l'est pas non plus.
Le résultat général. Pour fini, . Le cours note que l'analogie se rompt à l'infini : si est infini dénombrable, n'est pas dénombrable. La diagonale de Cantor est l'argument qui traite tous ces cas d'un coup — c'est aussi, au signe près, celui qui prouve que n'est pas dénombrable.
#Exercice 7 — est dénombrable
Énoncé (TD 1, exercice 7). Montrez que est dénombrable.
Correction détaillée
Méthode 1 — bijection explicite. Posons
soit , , , , , etc. Cette application est injective (deux antécédents distincts ont des images distinctes) et surjective sur (tout entier différent de 3 a un antécédent). C'est donc une bijection, et est dénombrable.
Méthode 2 — par inclusion. est une partie de . Or toute partie d'un ensemble dénombrable est finie ou dénombrable. Comme est infini, il est dénombrable.
Généralisation. Le même argument montre que retirer un nombre fini d'éléments à un ensemble dénombrable le laisse dénombrable. Ce n'est pas vrai pour un retrait infini : retirer une infinité d'entiers peut encore laisser un ensemble dénombrable, mais retirer les rationnels de laisse un ensemble qui n'est plus dénombrable, puisque lui-même ne l'est pas.
#Exercice 8 — Le club de tennis
Énoncé (TD 1, exercice 5). Dans un club de tennis, tous les membres jouent mais il y a ceux qui ne changent pas souvent d'adversaires et ceux qui en changent sans arrêt. Démontrez qu'il y a au moins deux joueurs qui ont déjà joué contre le même nombre d'adversaires distincts.
Correction détaillée
Soit le nombre de membres du club, et considérons la grandeur « nombre d'adversaires distincts déjà rencontrés ». Comme tous les membres jouent, cette grandeur vaut au moins 1 pour chacun d'eux. Comme on ne joue pas contre soi-même, elle vaut au plus .
Il n'y a donc que valeurs possibles — — pour joueurs. Par le principe des tiroirs ( objets rangés dans tiroirs : au moins un tiroir contient deux objets), deux joueurs au moins partagent le même nombre d'adversaires distincts.
Pourquoi l'hypothèse « tous les membres jouent » est utile. Sans elle, la valeur 0 serait possible et il y aurait valeurs pour joueurs : plus de collision forcée par ce seul argument. En réalité le résultat tient quand même, mais il faut un argument plus fin : les valeurs et ne peuvent pas être prises simultanément (si un joueur n'a affronté personne, personne n'a pu l'affronter, donc aucun joueur n'a adversaires). Il reste donc au plus valeurs atteignables pour joueurs, et la collision est forcée.
Lien avec l'encodage. Le principe des tiroirs est le même outil que dans l'exercice 4 : dès que l'ensemble des états possibles est plus petit que l'ensemble des objets à décrire, deux objets partagent une description. C'est la raison profonde pour laquelle aucune compression sans perte n'est universelle, et pour laquelle les tables de hachage admettent des collisions.
#Exercice 9 — Cinq entiers entre 1 et 8
Énoncé (TD 1, exercice 8). Montrez que si l'on prend 5 entiers entre 1 et 8 distincts, alors il y en a au moins deux dont la somme est 9.
Correction détaillée
Partitionnons l'ensemble en quatre paires dont la somme vaut 9 :
Choisir 5 entiers distincts dans , c'est ranger 5 objets dans ces 4 paires, qui jouent le rôle des tiroirs. Par le principe des tiroirs, deux des entiers choisis appartiennent à la même paire. Comme les entiers choisis sont distincts, ces deux entiers sont les deux éléments différents de cette paire, et leur somme vaut 9 par construction.
La méthode, plus que le résultat. Le principe des tiroirs ne s'applique jamais tout seul : il faut fabriquer les tiroirs. Ici, la conclusion porte sur une somme, donc les tiroirs sont les paires de somme 9 ; la partition en 4 paires est ce qui rend l'argument possible. Chercher les tiroirs revient à chercher la bonne partition de l'énoncé.
Variante. Pour des nombres entre 1 et 10, il faut en prendre 6 pour être certain d'obtenir deux fois la somme 11 (les tiroirs sont alors les 5 paires ).
#Exercice 10 — Différence de deux ensembles dénombrables
Énoncé (TD 1, exercice 10, approfondissement). Montrez que la différence ensembliste entre deux ensembles dénombrables est dénombrable.
Correction détaillée
Soient et deux ensembles dénombrables. Par définition de la différence ensembliste,
est donc une partie de l'ensemble dénombrable . Or le cours établit que toute partie d'un ensemble dénombrable est finie ou infinie dénombrable — c'est-à-dire, dans sa terminologie où les ensembles finis sont eux aussi dits dénombrables, que toute partie d'un ensemble dénombrable est dénombrable. D'où le résultat.
Remarque. L'argument est presque trop court : tout le contenu est dans la propriété « toute partie d'un ensemble dénombrable est dénombrable », qui vient de la définition même (être en bijection avec ou avec une partie de — une partie d'une partie est une partie). Le réflexe à acquérir : pour montrer qu'un ensemble est dénombrable, il suffit souvent de l'injecter dans un ensemble dénombrable connu.
#Exercice 11 — Somme de deux parties d'un groupe dénombrable
Énoncé (TD 1, exercice 11, approfondissement). Soit un groupe noté additivement, avec de cardinal dénombrable. Soient et deux sous-ensembles de . On définit . Montrez que est dénombrable.
Correction détaillée
Décomposition en union. Réécrivons comme une union indexée par :
Chaque terme est dénombrable. Pour fixé, l'application , est une bijection (sa réciproque est la translation par , qui existe puisque est un groupe). La restriction de à est donc une bijection de sur , si bien que . Or est une partie d'un ensemble dénombrable, donc est dénombrable, et aussi.
L'union est dénombrable. est donc une union dénombrable d'ensembles dénombrables : l'ensemble d'indices est dénombrable, et chacun des l'est. Le cours établit que toute union dénombrable d'ensembles dénombrables est dénombrable. D'où dénombrable.
Les deux réflexes utilisés. (i) Une bijection transporte le cardinal : pour compter , on exhibe la bijection . (ii) Pour un objet défini par une somme, on décompose en union indexée par l'un des deux ensembles, puis on applique la stabilité par union dénombrable. Ces deux gestes, avec le principe des tiroirs et la diagonale de Cantor, forment l'outillage complet de ce chapitre.
#Ce que ces annales vérifient
- Cardinalité : compter un ensemble de données en le partitionnant (exercices 1, 2, 3).
- Codage : tout objet machine est un mot fini sur un alphabet fini ; un codage est injectif (exercices 3, 4, 5).
- Dénombrabilité : , , , , sont dénombrables ; et ne le sont pas (exercices 5, 6, 7, 10, 11).
- Limites : le principe des tiroirs interdit tout encodage injectif des réels, et plus généralement toute représentation exacte d'un ensemble plus grand que le réservoir de motifs (exercices 4, 8, 9).