Correction TP PSI : ´ecriture binaire des ensembles

publicité
Correction TP PSI : écriture binaire des ensembles
Dans ce TP, on étudie une représentation efficace des ensembles dans python. Soit n ∈ N et
En = {0, 1, ..., n − 1}. On représente un sous-ensemble S ⊂ En sur n bits, par un nombre dont
l’écriture en base 2 a son ième bit égal à 1 si et seulement si i ∈ S.
Par exemple, si n = 5, le sous-ensemble S = {0, 2, 3} ⊂ En = {0, 1, 2, 3, 4} est représenté par :
< |{z}
0 |{z}
1 |{z}
1 |{z}
0 |{z}
1 >2 = 20 + 22 + 23 = 13
3∈S 2∈S 1∈S
0∈S
4∈S
/
/
Question 1. Par quel entier est représenté :
• l’ensemble vide ∅ ?
Réponse : < 0...0 >2 = 0 .
• En ?
n
Réponse : < 1...1
|{z} >2 = 2 − 1
n
• {j}, où j ∈ En ?
Réponse : < 0...01 |{z}
0...0 >2 = 2j .
j
n
Inversement, tous les entiers de 0 à < 11...11
| {z } >2 = 2 − 1 représentent un sous-ensemble de
n
En . Pour trouver l’ensemble codé par un nombre, il suffit de trouver l’écriture en base 2 de ce
nombre. On rappelle que l’écriture en base 2 d’un nombre p correspond à la suite (inversée) des
restes obtenus par divisions euclidiennes successives de p par 2.
Par exemple, 26 = < 11010 >2 car : 26
0
2
13
1
2
6
0
2
3
1
2
1
1
2
0
Ainsi, 26 représente l’ensemble {1, 3, 4} ⊂ E5 .
Question 2. Quel est le sous-ensemble de En codé par le nombre 17 ?
Réponse : 17 2
donc 17 = < 10001 >2 code l’ensemble {0, 4} .
1 8 2
0 4 2
0 2 2
0 1 2
1 0
En python, on peut écrire un nombre en binaire en préfixant l’écriture binaire par 0b :
1
Inversement, on peut obtenir l’écriture binaire d’un nombre (sous forme de chaı̂ne de caractères) avec bin :
On utilisera les opérations binaires suivantes, si A et B sont deux écritures binaires :
• & (et binaire) : le ième bit de A & B est 1 ssi les ièmes bits de A et B sont 1.
• | (ou binaire) : le ième bit de A | B est 1 ssi le ième bit de A ou B est 1.
Par exemple :
Question 3.
• A quelle opération sur les ensembles correspond & ? En déduire comment savoir si un
ensemble A est inclus dans un ensemble B.
Réponse : à l’intersection. A ⊆ B ssi A ∩ B = B c’est à dire : A&B == B .
• A quelle opération sur les ensembles correspond | ?
Réponse : à l’union.
Question 4. Écrire une fonction appartient telle que appartient(i, A) renvoie True si
i ∈ A, False sinon.
Indice : il faut déterminer si A ∩ {i} = ∅.
Question 5. En déduire une fonction card qui renvoie la taille (cardinal) d’un ensemble en
argument.
Réponse : (on utilise le fait que la taille d’un nombre q en binaire est blog2 qc)
2
Un des intérêts de cette représentation des ensembles réside dans la fait qu’on peut facilement
tous les énumérer : en faisant une boucle for variant de 0 à 2n − 1.
Question 6. En énumérant tous les ensembles, écrire une fonction pairs_impairs ayant n en
argument et renvoyant une liste composée de deux nombres : le nombre de sous-ensembles de
En de taille pair et le nombre de sous-ensembles de En de taille impair.
Réponse :
Question 7. Établir une conjecture sur le nombre de sous-ensembles de taille pair (resp.
impair). La prouver en utilisant la formule du binôme de Newton.
Réponse :
P
Le nombre de sous-ensembles de taille pair (resp. impair) de En est : P = k pair nk (resp.
P
I = k impair nk ). D’après la formule du binôme de Newton, (1 − 1)n = P − I = 0 donc P = I .
Question 8. Écrire une fonction pour calculer la taille moyenne d’un sous-ensemble de En .
Établir une conjecture et la prouver.
Réponse :
Réponse : Il est ”évident” que la taille moyenne d’un sous-ensemble de En est
P
démontrer en calculant nk=0 k nk et en utilisant k nk = n n−1
k−1 .
n
2
. On peut le
On rappelle que le codage par complément à 2 sur p bits (utilisé par python) consiste à
stocker tous les nombres n de −2p−1 à 2p−1 − 1 :
• Si n ≥ 0, n est codé par son écriture en base 2.
• Si n < 0, le codage de n est obtenu de la façon suivante :
1. Trouver la représentation de −n.
2. Ajouter 1.
3. Inverser les 0 et les 1.
Question 9. Comprendre pourquoi le minimum d’un ensemble A est obtenu en écrivant
A & (−A). Vérifier sur des exemples.
3
Téléchargement