1. Un tout petit peu de complexité d'algorithme



Documents pareils
Recherche dans un tableau

Programmation Objet - Cours II

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Les tests logiques avec Excel

Raisonnement par récurrence Suites numériques

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

chapitre 4 Nombres de Catalan

Par combien de zéros se termine N!?

CORRECTION EXERCICES ALGORITHME 1

6. Les différents types de démonstrations

Représentation d un entier en base b

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Programmation C++ (débutant)/instructions for, while et do...while

Chapitre 10. Les interfaces Comparable et Comparator 1

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

Les suites numériques

Définitions. Numéro à préciser. (Durée : )

Initiation à la programmation en Python

Peut-on tout programmer?

Le chiffre est le signe, le nombre est la valeur.

CH.6 Propriétés des langages non contextuels

Date : Tangram en carré page

Série TD 3. Exercice 4.1. Exercice 4.2 Cet algorithme est destiné à prédire l'avenir, et il doit être infaillible! Exercice 4.3. Exercice 4.

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Pourquoi l apprentissage?

Vers l'ordinateur quantique

I. Introduction aux fonctions : les fonctions standards

2. RAPPEL DES TECHNIQUES DE CALCUL DANS R

Bases de programmation. Cours 5. Structurer les données

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

Traitement de texte : Quelques rappels de quelques notions de base

Problème : Calcul d'échéanciers de prêt bancaire (15 pt)

Algorithmes de recherche

Compte-rendu de projet de Système de gestion de base de données

1 Recherche en table par balayage

Compression de Données - Algorithme de Huffman Document de Conception

Ordonnancement. N: nains de jardin. X: peinture extérieure. E: électricité T: toit. M: murs. F: fondations CHAPTER 1

Algorithmique avec Algobox

LibreOffice Calc : introduction aux tableaux croisés dynamiques

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Algorithmique avec Algobox

EXCEL TUTORIEL 2012/2013

Note de cours. Introduction à Excel 2007

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

1. Structure d'un programme FORTRAN 95

TUTORIAL REUTERS. Utilisation de l'utilitaire de recherche Reuters

Introduction. I Étude rapide du réseau - Apprentissage. II Application à la reconnaissance des notes.

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Suites numériques 3. 1 Convergence et limite d une suite

La fonction exponentielle

Licence Sciences, Technologies, Santé Mention Informatique Codage de l'information

Pour faire réapparaitre le ruban, il suffit de taper à nouveau sur CTRL + F1

PROBLEME(12) Première partie : Peinture des murs et du plafond.

Les arbres binaires de recherche

Conventions d écriture et outils de mise au point

Programmation sous QT

TDB-SSI LES EXTENSIONS

Examen Médian - 1 heure 30

BAREME sur 40 points. Informatique - session 2 - Master de psychologie 2006/2007

MIS 102 Initiation à l Informatique

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Feuille TD n 1 Exercices d algorithmique éléments de correction

Définition : On obtient les nombres entiers en ajoutant ou retranchant des unités à zéro.

Chapitre IV : La Tenue Des Livres Le journal Le grand Livre

Licence Sciences et Technologies Examen janvier 2010

Algorithme. Table des matières

Chapitre 1 I:\ Soyez courageux!

Système binaire. Algèbre booléenne

1 Année LMD-STSM Algorithmique et Programmation. Série de TD 2

Bac Blanc Terminale ES - Février 2011 Épreuve de Mathématiques (durée 3 heures)

MODE D'EMPLOI DE LA CALCULATRICE POUR LES COURTS SÉJOURS DANS L'ESPACE SCHENGEN

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

1. Création d'un état Création d'un état Instantané Colonnes Création d'un état Instantané Tableau... 4

Les différents types de données et leurs opérations de base

Les chaînes de caractères

PARCOURS COMPLET AU COURS MOYEN

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

UE8 Systèmes d information de gestion Corrigé indicatif

Export vers le format WAV dans ArtemiS SUITE

Fonctions de plusieurs variables : dérivés partielles, diérentielle. Fonctions composées. Fonctions de classe C 1. Exemples

Guide de démarrage rapide Centre de copies et d'impression Bureau en Gros en ligne

Propagation sur réseau statique et dynamique

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Limites finies en un point

4. Les structures de données statiques


Exercices de dénombrement

Algorithmique et Programmation, IMA

1.6- Génération de nombres aléatoires

Cours Informatique Master STEP

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Transcription:

L2S3 Harmonisation Algorithmique 20122013 UFR d'ieea Université Lille 1 DS 3-10/06/2013-3h documents interdits Vous devez impérativement utiliser les primitives données dans le sujet pour manipuler les listes et les arbres, l'utilisation de toute autre notation annulera votre réponse. 1. Un tout petit peu de complexité d'algorithme Q1.1. Compter le nombre d'aectations eectuées par l'algorithme suivant en fonction de N. fonction un(n : Entier) : Entier ; début S 0 ; pour i de 1 à N faire pour J de 1 à i faire S S+1 ; n pour pour K de i+2 à N faire S S+1 ; n pour n pour n un Q1.2. Calculer le nombre de comparaisons eectuées par la fonction deux dans le pire et le meilleur cas. fonction deux(n : Entier) : Entier ; S : Entier 1 ; K : Entier 1 ; début S 0 ; tant que K<N faire S 2 S ; K K+S ; n tant que n deux Q1.3. Montrer que n 3 Ω(n 2 log n) mais que n 3 / Θ(n 2 log n). Q1.4. Ecrire un algorithme itératif ayant pour paramètre un entier n ne faisant pas nécessairement quelque chose de malin mais dont la complexité est décrite par Ω(log n) et O(n 2 ), sans utiliser la fonction log. Justiez bien pourquoi la complexité de votre algorithme correspond à ce qui est demandé. Q1.5. Proposez un algorithme récursif ayant pour paramètre deux entier n et k qui ne fait pas nécessairement quelque chose de malin mais dont le nombre de comparaisons dans le pire cas est donné par l'équation de récurrence C(n, k) = C(n/2, k 5) + Θ(nk). 1

2. En pleine forêt Les primitives à utiliser sont à la n du sujet. Q2.1. Ecrire la procédure affichageinfixe qui ache les éléments de l'arbre binaire A dans l'ordre inxé. procedure affichageinfixe(a : arbre); Q2.2. Ecrire l'équation de récurrence donnant le nombre d'appels à estarbrevide eecutés lors de l'execution de affichageinfixe sur un arbre binaire de taille n. Q2.3. Que devient cette équation lorsque l'arbre est complet? Et lorsqu'il est dégénéré? Q2.4. Sans résoudre les équations mais par un argument convaincant donnez l'ordre de grandeur du nombre d'additions eectuées lors de l'execution de affichageinfixe sur un arbre binaire de taille n. Une séquence d'entiers de longueur indéterminée initialement est saisie au clavier. On dispose d'une structure d'arbre binaire et d'aucune autre structure de données : pas de liste, pas de tableau, etc. On dispose aussi de la fonction suivante pour récupérer un par un chacun des entiers de la séquence : fonction lire() retourne entier; Q2.5. Comment utiliser la structure d'arbre disponible pour créer une liste contenant tous les entiers de la séquence? L'objectif est maintenant d'acher les entiers contenus dans la séquence par ordre croissant, une fois qu'elle a été entièrement saisie bien sur. Une contrainte est imposée sur la complexité de la méthode, elle doit être, au moins dans certains cas, strictement meilleure que O(n 2 ). Q2.6. Expliquer comment procéder : de quelles structures de données, fonctions et procédures vous avez besoin, et leur fonctionnement général. Il est inutile d'écrire un code très détaillé mais il faut quand même donner une idée assez précise de votre méthode pour pouvoir en écrire un à partir de vos explications si on le souhaitait. Vous pouvez proposer une méthode même si vous n'êtes pas certain de sa complexité. Q2.7. Décrivez un pire et un meilleur cas pour votre méthode. Q2.8. Quelle est la complexité pire et meilleur cas de votre méthode en fonction de la taille n de la séquence? Justier qu'elle satisfait la contrainte de complexité imposée. 3. Tri par paquets (Bucket Sort) Les primitives à utiliser sont à la n du sujet. L'objectif dans cet exercice est d'écrire l'une des variantes du tri par paquets (Bucket Sort). Ce tri s'applique sur des données représentées par des chaînes de caractères ou des entiers codés dans une base donnée que nous supposerons rangées dans un tableau de longueur n. Par exemple, le tri par paquets pourra être utilisé pour ranger dans l'ordre lexicographique le tableau de longueur 5 de chaînes de caractères suivant : T = [ "abcde" ;"eac" ;"ab" ;"bac" ;"c" ]. 2

Le principe de ce tri est de regrouper dans un même paquet tous les mots répondant de manière identique à un critère de répartition préalablement déni. Le choix de la longeur du mot comme critère de répartition donnerait pour l'exemple précédent les paquets suivants : paquet 1 : "c" paquet 2 : "ab" paquet 3 : "eac", "bac" paquet 4 : paquet 5 : "abcde" Chaque paquet est ensuite trié séparément avec un autre algorithme de tri ou bien de manière récursive selon un autre critère, ce qui donnerait : paquet 1 : "c" paquet 2 : "ab" paquet 3 : "bac", "eac" paquet 4 : paquet 5 : "abcde" Et enn il faut replacer tous les éléments dans le tableau de manière à ce qu'il soit trié. Suivant le critère de répartition choisit cette étape peut être plus ou moins compliquée à réaliser. Dans l'exemple précédent il ne sut pas de prendre les paquets dans l'ordre pour obtenir un tableau trié. On obtiendrait en eet le tableau T = [ "c" ;"ab" ;"bac" ;"eac" ;"abcde" ] qui n'est pas du tout rangé dans l'ordre lexicographique. Il faut en fait parcourrir les paquets dans l'ordre mais en ne choisissant que les mots qui commencent pas un 'a' dans un premier temps, puis par un 'b' etc jusqu'à ce que tous les paquets soient vides et le tableau initial rerempli : T = [ "ab" ;"abcde" ;"bac" ;"c" ;"eac" ]. Nous allons représenter les paquets par des listes chaînées et construire un tableau pour stocker ces listes, ce qui donnerait pour l'exemple précédent sur les chaînes la structure de la Figure 1. paquet 1 c paquet 2 ab paquet 3 bac eac paquet 4 paquet 5 abcde Figure 1 Représentation sous forme de listes chaînées des paquets triés utilisés lors du tri par paquet du tableau T = [ "abcde" ;"eac" ;"ab" ;"bac" ;"c" ] avec pour critère de répartition la longueur des chaînes. Dans la suite de l'exercice nous considérerons que les données sont des entiers et que le critère de répartition est la valeur entière codée par les k bits de poids faibles de la représentation binaire de chaque entier. Nous supposerons connue la fonction kpf de complexité supposée constante qui retourne la valeur codée par les k bits de poids faibles de la représentation binaire de n : fonction kpf(k : entier; n : entier) retourne entier; 3

Si la représentation de n contient moins de k bits, des zéros sont ajoutés en guise de poids forts pour obtenir une représentation sur exactement k bits. Par exemple, kpf(3,1) retourne la valeur 1 car en binaire 1 s'écrit simplement 001, kpf(3,6) retourne la valeur 6 car 6 s'écrit en binaire 110, kpf(3,15) retourne la valeur du nombre codé en binaire par 111 soit l'entier 7 car 15 est codé par 1111, kpf(3,10) retourne la valeur du nombre codé en binaire par 010 soit l'entier 2 car 10 est codé en binaire par 1010. 3.1 Initialisation des paquets Q3.1. Pour eectuer le tri avec le critère de répartition kpf combien de paquets sont nécessaires? Justiez briévement votre réponse. Dans la suite vous pourrez noter nbp ce nombre si vous ne l'avez pas encore calculé. Q3.2. Représentez le tableau de paquets à construire pour trier les données [ 10 ;3 ;1 ;7 ;4 ;2 ;0 ;15 ] avec le critère de répartition kpf pour k = 2. Chaque paquet sera représenté sous forme d'une liste chaînée triée comme sur la Figure 1. Au lieu de trier récursivement les paquets nous allons simplement inserer chaque nouvel élément directement à sa place dans la liste représentant le paquet où doit être placé l'élément pour qu'elle soit toujours triée. Q3.3. Quelle astuce pouvez vous utiliser pour rendre l'opération d'insertion dans une liste plus simple à réaliser? Vous pouvez utiliser cette astuce dans la suite mais pensez bien alors à la prendre en compte pour chacune des questions suivantes lorsque c'est nécessaire. Q3.4. Ecrire la fonction initpaquets prenant en paramètre la taille t du tableau de paquets à créer et retourne ce tableau initialisé convenablement. fonction initpaquets(t : entier) retourne tableau de listes; Q3.5. Donnez en le justiant l'ordre de grandeur asymptotique de la complexité de la fonction initpaquets. 3.2 Insertion dans un paquet Une fois que le paquet dans lequel doit aller un élément est déterminé grâce au critère de répartition, il faut placer l'élément dans ce paquet. Un paquet est représenté par une liste stockée dans le tableau de paquets. Q3.6. Ecrire la procédure itérative insertion qui insére un élément E à sa place dans une liste triée du tableau de paquets P désignée par son indice r. Indication : un schéma représentant soigneusement chaque étape de la procédure aide souvent à ne pas tout mélanger... procedure insertion(e : entier; P : tableau de listes; r : entier); Q3.7. Décrivez un pire et un meilleur cas d'exécution de la procédure insertion. Q3.8. Donnez en le justiant l'ordre de grandeur asymptotique de la complexité pire et meilleur cas de l'insertion pour une liste de taille l. Dans la suite nous noterons ces complexités C p insert (l) et Cm insert (l), vous pourrez donc répondre aux questions de complexité suivantes même si vous n'avez pas encore calculé C p insert (l) et Cinsert m (l). 4

3.3 Répartition Le principe de la répartition est simplement de placer chaque élément du tableau à trier dans les paquets. Pour celà vous pourrez utiliser la procédure insertion des questions précédentes même si vous ne l'avez pas écrite. Q3.9. Ecrire la procédure repartition qui réparti tous les éléments du tableau à trier T dans le tableau de paquets P selon la valeur codée par les k bits de poids faible de chaque élément. procedure repartition(t : tableau; P : tableau de listes; k : entier); 3.3.1 Meilleur cas Q3.10. Décrivez un meilleur cas pour la répartition d'un tableau à trier T de taille n dans un tableau de paquets. Q3.11. Donnez en fonction de Cinsert m la complexité asymptotique dans le meilleur cas de la fonction de répartition. En déduire cette complexité en fonction de n la taille du tableau à trier et éventuellement de k le nombre de bits d'un élément consulté par la fonction kpf. 3.3.2 Pire cas Nous allons étudier deux situations particulières 1 à l'issue de la répartition an de déterminer laquelle représente un pire des cas. La première situation intéressante se produit lorsque tous les éléments du tableau à trier T se retrouvent dans le même paquet dont la taille est donc n. Q3.12. Donnez en fonction de C p insert la complexité asymptotique de la fonction de répartition lorsque tous les éléments sont placés dans le même paquet. Q3.13. En déduire cette complexité en fonction de n, la taille du tableau à trier, et éventuellement de k, le nombre de bits d'un élément consulté par la fonction kpf. Dans la seconde situation les éléments sont équitablement répartis dans tous les paquets, ils sont donc de taille n/nombre de paquets. Q3.14. Donnez en fonction de C p insert la complexité asymptotique de la fonction de répartition lorsque tous les paquets sont de même taille. Q3.15. En déduire cette complexité en fonction de n, la taille du tableau à trier, et éventuellement de k, le nombre de bits d'un élément consulté par la fonction kpf. Q3.16. Déduire des questions précédentes un pire cas pour la répartition en le justiant. 3.4 Reconstruction du tableau à trier Une fois les éléments répartis et pré-triés dans les paquets ils faut les replacer dans l'ordre croissant dans le tableau à trier. Q3.17. Expliquez pourquoi à l'issue de l'étape de répartition des éléments, l'élément minimum du tableau se trouve toujours au début de l'un des paquets. 1. Ici on ne considère que deux situations, il y en a en fait beaucoup plus mais ce sont les deux situations extrèmes et vous pouvez même prouver que l'une d'elle au moins est bien un pire des cas parmi toutes pour la répartition, mais ce n'est pas demandé ici! 5

Q3.18. Ecrire la fonction trouvermin prenant en paramètre le tableau de paquet P et retournant l'indice du paquet dans P où se trouve l'élément minimum présent dans P. fonction trouvermin(p : tableau de liste) retourne entier; Q3.19. Ecrire la procédure extrairemin prenant en paramètre le tableau de paquets P, le tableau à trier T et un indice i dans T et qui trouve l'élément minimum de P, le supprime de P et le place à l'indice i dans T. procedure extrairemin(p : tableau de listes; T : tableau; i : entier); Q3.20. Ecrire la procédure reconstruction prenant en paramètre le tableau T à trier et le tableau de paquets P qui replace tous les éléments de P dans l'ordre croissant dans T. procedure reconstruction(t : tableau; P : tableau de listes); Q3.21. Donnez, en le justiant, l'ordre de grandeur asymptotique de la complexité de la procédure reconstruction. 3.5 Tri complet Q3.22. Ecrire la procédure tripaquetkfaible qui tri le tableau T d'entiers selon l'algorithme précédement détaillé du tri par paquet avec comme critère de répartition la valeur des k bits de poids faible des éléments de T. procedure tripaquetkfaible(t : tableau; k : entier); Q3.23. Décrivez un pire et un meilleur cas pour votre algorithme de tri et donnez la complexité asymptotique dans les deux cas. Q3.24. Ce tri vous paraît-il ecace? Expliquez pourquoi. Quelques formules utiles i = pour q 1 : (n + 1)n 2 i=0 i 2 = q i = qn+1 1 q 1 (2n + 1)(n + 1)n 6 ( ) 2 i 3 (n + 1)n = 2 i q i = n qn+1 q 1 q qn 1 (q 1) 2 i 2 q i = n 2 qn+1 q 1 2n qn+1 (q 1) 2 + q(q + 1) qn 1 (q 1) 3 6

3.6 OPTIONNEL : Complément de réexion Les questions de cette partie sont des bonus, Ne pas y répondre ou y répondre mal n'ont pas d'inuence sur la note nale, les bonnes réponses apportent des points hors barème. Un tri stable est un tri qui conserve l'ordre des éventuelles multiples occurences d'un même élément. Lorsqu'il s'agit de trier simplement des entiers, qu'un algorithme soit stable ou non n'a que peut d'importance. Cependant s'il s'agit de trier des éléments composés de plusieurs données selon l'une d'elle, celà peut avoir une inuence cruciale sur l'ecacité de traitements ultérieurs. Q3.25. Le tri eectué par votre procédure tripaquetkfaible est il stable? S'il ne l'est pas comment le rendre stable? Dans tous les cas, n'oubliez pas de justier votre réponse. Un critère de répartition est croissant si pour tout paquet i, ses éléments sont tous inférieurs aux éléments du paquet i + 1. Q3.26. Donner, en le justiant, un critère de répartition croissant sur les entiers. Q3.27. Ecrire la procédure rangement prenant en paramètre le tableau T à trier et le tableau de paquets P qui replace tous les éléments de P dans l'ordre croissant dans T lorsqu'on suppose que le critère de répartition est croissant. procedure rangement(t : tableau; P : tableau de listes); Q3.28. Donnez, en le justiant, l'ordre de grandeur asymptotique de la complexité pire cas de cette procédure. En déduire si la complexité pire cas du tri par paquet s'améliore lorsqu'on prend un critère de répartition croissant. 7

Listes // la liste vide constante listevide : LISTE // ajouterentete(l, e) = (e; L) où L et (e ;L) sont des listes et e un élément fonction ajouterentete(l : LISTE ; e : ELEMENT) retourne LISTE // tete(l) = e si L = (e ;r) où r est une liste et e un élément fonction tete(l : LISTE) retourne ELEMENT // reste(l) = r si L = (e ;r) où r est une liste et e un élément fonction reste(l : LISTE) retourne LISTE // estlistevide(l) L est vide fonction estlistevide(l : LISTE) retourne BOOLEAN // si initialement L = (e, r) où r est une liste, après modierreste(l,ll) L devient la liste (e ;ll) procédure modierreste(l : LISTE ; ll : LISTE) Arbres binaires // creerarbre(e,g,d) = < e, g, d > fonction creerarbre(e : ELEMENT ; g,d : ARBRE) retourne ARBRE // racine(a) = e si a =< e, g, d >, a ne doit pas être l'arbre vide fonction racine(a : ARBRE) retourne ELEMENT // gauche(a) = g si a =< e, g, d >, a ne doit pas être l'arbre vide fonction gauche(a : ARBRE) retourne ARBRE // droit(a) = d si a =< e, g, d >, a ne doit pas être l'arbre vide fonction droit(a : ARBRE) retourne ARBRE // estarbrevide(a) a est vide fonction estarbrevide(a : ARBRE) retourne BOOLEAN // si a =< e, g, d > alors a =< e, g, d > après modiergauche(a,g ), a ne doit pas être vide procedure modiergauche(a : ARBRE ; g' : ARBRE) // si a =< e, g, d > alors a =< e, g, d > après modierdroit(a,d ), a ne doit pas être vide procedure modierdroit(a : ARBRE ; d' : ARBRE) 8