Opérations ensemblistes [cx04] - Exercice Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner Unisciel algoprog Version 24 octobre 2016 Table des matières 1 Représentation d’un ensemble 1.1 Type Ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Procédures utilitaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 2 Appartenance 2.1 Ensembles non triés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Ensembles triés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Procédure de test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 4 5 3 Union 3.1 Ensembles non triés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Ensembles triés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Procédure de test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 6 7 4 Intersection 4.1 Ensembles non triés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Ensembles triés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Procédure de test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 8 9 5 Différence 5.1 Ensembles non triés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Ensembles triés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Procédure de test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 10 10 11 C++ - Opérations ensemblistes (TP) Mots-Clés Complexité des algorithmes Requis Axiomatique impérative sauf Fichiers, Récursivité des actions Difficulté • • ◦ (4 h) 1 Unisciel algoprog – Opérations ensemblistes [cx04] 2 Objectif Cet exercice réalise les opérations ensemblistes (union, intersection, différence), les ensembles étant représentés par des tableaux. Certains ensembles seront triés et d’autres pas. Toutes les solutions proposées doivent être récursives. Unisciel algoprog – Opérations ensemblistes [cx04] 1 1.1 3 Représentation d’un ensemble Type Ensemble Définissez la constante MAXELEMS=100 (taille maximale des tableaux), le type Element équivalent à un entier et le type Ensemble, structure mémorisant : • Un tableau elems de taille maximale MAXELEMS contenant les Element. • Un entier taille stockant le nombre effectif d’éléments de l’ensemble. Écrivez une procédure initialiserEns(A) qui initialise un Ensemble A à l’ensemble vide. Écrivez une fonction ieme(A,k) qui renvoie le k-eme Element d’un Ensemble A. Écrivez une procédure ajouterEns(A,x) qui ajoute un Element x à un Ensemble A. Écrivez une procédure afficherEns(A) qui affiche les éléments d’un Ensemble A. 1.2 Procédures utilitaires Écrivez une procédure creerEns1(A) qui crée un Ensemble A avec les éléments {1,6,7}. Écrivez une procédure creerEns2(A) qui crée un Ensemble A avec les éléments {1,3,4,7,10,12}. ...(suite page suivante)... Unisciel algoprog – Opérations ensemblistes [cx04] 2 4 Appartenance Objectif Cette section réalise un algorithme Appartenance(A,x) qui teste et renvoie Vrai si un élément x appartient à un Ensemble A, Faux sinon. 2.1 Ensembles non triés Dans le cas des Ensembles non triés, Écrivez un tel algorithme appartientSeq(A,x). Aide méthodologique Écrivez une fonction récursive appartientSeqRec(A,k,x). Quelle est sa complexité pire-cas en nombre de comparaisons ? 2.2 Ensembles triés Dans le cas des Ensembles triés (dans l’ordre croissant), Écrivez un tel algorithme appartientLin(A,x). Aide méthodologique Écrivez une fonction récursive appartientLinRec(A,k,x). Quelle est sa complexité pire-cas en nombre de comparaisons ? Pour améliorer votre algorithme, écrivez un algorithme appartientDicho(A,x) qui utilise une recherche dichotomique. Unisciel algoprog – Opérations ensemblistes [cx04] 5 Aide méthodologique Écrivez une fonction récursive appartientDichoRec(A,inf,sup,x). Quelle est la complexité de votre nouvel algorithme ? 2.3 Procédure de test Écrivez une procédure test_appartient qui crée un Ensemble A puis teste les procédures. Testez. ...(suite page suivante)... Unisciel algoprog – Opérations ensemblistes [cx04] 3 6 Union Objectif Cette section réalise un algorithme Union(A,B,C) qui calcule l’union C des ensembles A et B qui lui sont passés en paramètre. Dans les études de complexité, on notera n (resp. m) le nombre d’éléments de l’ensemble A (resp. B). 3.1 Ensembles non triés Dans le cas des Ensembles non triés, Écrivez un tel algorithme unionSeq(A,B,C). Aide méthodologique Écrivez une procédure récursive unionSeqRec(A,B,k,C). Quelle est sa complexité ? 3.2 Ensembles triés Dans le cas des des Ensembles triés (dans l’ordre croissant), Écrivez un tel algorithme unionLin(A,B,C). Aide méthodologique Écrivez une procédure récursive unionLinRec(A,j,B,k,C). Unisciel algoprog – Opérations ensemblistes [cx04] 7 Quelle est sa complexité pire-cas ? 3.3 Procédure de test Écrivez une procédure test_union qui crée deux Ensemble nommés A et B puis teste les procédures d’union dans un Ensemble C. Affichez l’ensemble C à l’issu de chacune des procédures. Testez. ...(suite page suivante)... Unisciel algoprog – Opérations ensemblistes [cx04] 4 8 Intersection Objectif Cette section réalise un algorithme Intersection(A,B,C) qui calcule l’intersection C des ensembles A et B qui lui sont passés en paramètre. Dans les études de complexité, on notera n (resp. m) le nombre d’éléments de l’ensemble A (resp. B). 4.1 Ensembles non triés Dans le cas des des Ensembles non triés, Écrivez un tel algorithme interSeq(A,B,C). Aide méthodologique Écrivez une procédure récursive interSeqRec(A,B,k,C). Quelle est sa complexité pire-cas ? 4.2 Ensembles triés Dans le cas des des Ensembles triés (dans l’ordre croissant), Écrivez un tel algorithme interLin(A,B,C). Aide méthodologique Écrivez une procédure récursive interLinRec(A,j,B,k,C). Unisciel algoprog – Opérations ensemblistes [cx04] 9 Quelle est sa complexité pire-cas ? 4.3 Procédure de test Écrivez une procédure test_inter qui crée deux Ensemble nommés A et B puis teste les procédures d’intersection dans un Ensemble C. Affichez l’ensemble C à l’issu de chacune des procédures. Testez. ...(suite page suivante)... Unisciel algoprog – Opérations ensemblistes [cx04] 5 10 Différence Objectif Cette section réalise un algorithme Difference(A,B,C) qui calcule la différence C des deux ensembles A et B qui lui sont passés en paramètre. (La différence de A et de B, notée A \ B est l’ensemble des éléments de A n’appartenant pas à B. Attention, la différence n’est pas symétrique.) Dans les études de complexité, on notera n (resp. m) le nombre d’éléments de l’ensemble A (resp. B). 5.1 Ensembles non triés Dans le cas des des Ensembles non triés, Écrivez un tel algorithme diffSeq(A,B,C). Aide méthodologique Écrivez une procédure récursive diffSeqRec(A,j,B,C). Quelle est sa complexité pire-cas ? 5.2 Ensembles triés Dans le cas des des Ensembles triés (dans l’ordre croissant), Écrivez un tel algorithme diffLin(A,B,C). Aide méthodologique Écrivez une procédure récursive diffLinRec(A,j,B,k,C). Unisciel algoprog – Opérations ensemblistes [cx04] 11 Quelle est sa complexité pire-cas ? 5.3 Procédure de test Écrivez une procédure test_diff qui crée deux Ensemble nommés A et B puis teste les procédures de différence dans un Ensemble C. Affichez l’ensemble C à l’issu de chacune des procédures. Testez.