Devoir surveill´ e n 2

publicité
Devoir surveillé no 2
2 heures
Aucun document n’est autorisé. L’usage de la calculatrice est interdit.
***
Ce devoir étudie deux représentations des ensembles (au sens mathématique) dans
python : par des listes dans la partie I et par des nombres (écrit en binaire) dans la partie
II.
On rappelle qu’un ensemble ne peut pas contenir de doublon (c’est à dire plusieurs
fois le même élément). On dit qu’un ensemble E est inclus dans E 0 , et on note E ⊆ E 0 ,
si tous les éléments de E sont aussi des éléments de E 0 . L’intersection E ∩ E 0 de E et E 0
est l’ensemble constitué des éléments qui sont dans E et dans E 0 . L’union E ∪ E 0 de E
et E 0 est l’ensemble constitué des éléments qui sont dans E ou dans E 0 .
Toutes les complexités seront exprimées dans le pire des cas, sous la forme O(...) et
devront être justifiées.
I
Représentation par des listes
Dans cette partie, on représente un ensemble par une liste. Par exemple, l’ensemble
{0, 2, 3} est représenté par la liste [0, 2, 3].
1. Écrire une fonction card ayant une liste en argument et renvoyant le nombre de ses
éléments.
2. Écrire une fonction appartient telle que appartient(k, L) renvoie True si k
appartient à la liste L, False sinon.
3. (a) Écrire une fonction min renvoyant le minimum d’une liste non vide en argument.
(b) Prouvez que min renvoie bien le minimum d’une liste non vide.
(c) Quelle est sa complexité dans le pire des cas, en fonction de la taille n de L ?
(d) Sur un ordinateur avec la configuration suivante, estimer le temps d’exécution
de min(L), si L est une liste de taille 106 .
Type du processeur
Fréquence processeur
Quantité de mémoire RAM
Capacité disque dur
64 bits
2 GHz
4 Go
256 Go
4. (a) Écrire une fonction est_ens ayant une liste L en argument et renvoyant True
si la liste représente un ensemble, False sinon. Il faut déterminer si L contient
un doublon.
1
(b) Quelle est la complexité dans le pire des cas de est_ens, en fonction de la
taille n de L ?
(c) Estimer, pour la configuration précédente, le temps d’exécution de est_ens(L)
si L est de taille 106 .
5. (a) Écrire une fonction inter telle que, si L1 et L2 sont des listes représentant des
ensembles, inter(L1, L2) renvoie la liste représentant leur intersection.
(b) Quelle est la complexité dans le pire des cas de inter, en fonction des tailles
n1 et n2 de L1 et L2 ?
6. Écrire une fonction union telle que, si L1 et L2 sont des listes représentant des
ensembles, union(L1, L2) renvoie la liste représentant leur union.
II
Représentation binaire
Dans cette partie, on fixe n ∈ N et En = {0, 1, ..., n − 1}. On représente un ensemble
S inclus dans En par un entier positif dont l’écriture en base 2 sur n bits possède un 1
en position i ∈ {0, 1, ..., n − 1} si et seulement si i ∈ S.
Par exemple, si n = 5, S = {0, 2, 3} ⊆ E5 est représenté par le nombre 13, car :
< 01101 >2 = 20 + 22 + 23 = 13
1. Quel entier représente ∅ ? On donnera ses écritures binaire et décimale.
2. Quel entier représente En ? On donnera ses écritures binaire et décimale.
3. Quel entier représente {k}, si k ∈ En ? On donnera ses écritures binaire et décimale.
4. En supposant n = 5, quel ensemble est représenté par le nombre 26 ?
Si a et b sont des entiers positifs écrit en base 2 sur n bits, on peut leur appliquer les
opérations élémentaires & et | suivantes en python :
• a & b est un entier positif dont l’écriture en base 2 a son ième bit égal à 1 si et
seulement si les ièmes bits de a et b sont 1.
• a | b est un entier positif dont l’écriture en base 2 a son ième bit égal à 1 si et
seulement si le ième bit de a ou b est égal à 1.
Par exemple, comme 6 = < 110 >2 et 3 = < 011 >2 , 6 & 3 renvoie 2 (= < 010 >2 )
et 6 | 3 renvoie 7 (= < 111 >2 ).
5. Si a et b sont des entiers positifs représentant des ensembles A et B, quel ensemble
représente a & b ? Même question pour | au lieu de &.
Indice : penser aux opérations classiques sur les ensembles.
6. Écrire deux fonction inter2 et union2 prenant chacune deux entiers positifs a et
b, représentant des ensembles A et B, et renvoyant les entiers représentant A ∩ B
et A ∪ B, respectivement.
Quel intérêt a la représentation binaire des ensembles, par rapport à la représentation
par liste ?
2
7. Écrire une fonction appartient2 telle que appartient2(k, a) renvoie True si k
appartient à l’ensemble A représenté par l’entier positif a, False sinon.
Indice : k ∈ A ⇐⇒ {k} ∩ A 6= ∅.
8. Écrire une fonction card2 telle que card2(a) renvoie la taille de l’ensemble représenté
par l’entier positif a.
On rappelle que le codage par complément à 2 sur p bits 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. Écrire −n en base 2.
2. Inverser les 0 et les 1.
3. Ajouter 1.
9. Donner le codage par complément à 2 de -26 sur 6 bits.
10. Quels ensembles représentent 26 et 26 & -26 ?
11. En déduire une fonction efficace pour calculer le minimum d’un ensemble représenté
par un entier. Comparer avec la fonction min de la partie I.
3
Téléchargement