TD : Complexité des algorithmes

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

1 Recherche en table par balayage

Recherche dans un tableau

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Algorithmique I. Algorithmique I p.1/??

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

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

4. Les structures de données statiques

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Architecture des Systèmes d Information Architecture des Systèmes d Information

Chap III : Les tableaux

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

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Exercices sur les interfaces

Cours d initiation à la programmation en C++ Johann Cuenin

Algorithmes récursifs

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

Algorithmique et Programmation, IMA

Quelques algorithmes simples dont l analyse n est pas si simple

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

MIS 102 Initiation à l Informatique

Les arbres binaires de recherche

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

Travaux Dirigés n 1 : chaînes de caractères

Correction TD algorithmique

Initiation à la programmation en Python

Conventions d écriture et outils de mise au point

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

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

Quelques Algorithmes simples

INF601 : Algorithme et Structure de données

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

Bases de données documentaires et distribuées Cours NFE04

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

Les chaînes de caractères

Programmation C. Apprendre à développer des programmes simples dans le langage C

PROJET ALGORITHMIQUE ET PROGRAMMATION II

LES DECIMALES DE π BERNARD EGGER

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Théorie et Codage de l Information (IF01) exercices Paul Honeine Université de technologie de Troyes France

Informatique Générale

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Bureau N301 (Nautile)

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

Cours de Programmation Impérative: Zones de mémoires et pointeurs


Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Cours de Probabilités et de Statistique

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

TP3 : Manipulation et implantation de systèmes de fichiers 1

Suites numériques 4. 1 Autres recettes pour calculer les limites

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

CHAPITRE V. Recherche et tri

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

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

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

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

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

alg - Classes, instances, objets [oo] Exercices résolus

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

Coefficients binomiaux

Les Différents types de Requêtes dans Access

Chapitre 6. Fonction réelle d une variable réelle

LES GENERATEURS DE NOMBRES ALEATOIRES

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Adama MBODJI MBODJ.SYSTEM

I. Introduction aux fonctions : les fonctions standards

TD3: tableaux avancées, première classe et chaînes

Initiation à l algorithmique

CORRECTION EXERCICES ALGORITHME 1

Représentation d un entier en base b

Objets Combinatoires élementaires

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Algorithme. Table des matières

I. Cas de l équiprobabilité

Chapitre VI - Méthodes de factorisation

Nouvelles propositions pour la résolution exacte du sac à dos multi-objectif unidimensionnel en variables binaires

Chapitre 10. Les interfaces Comparable et Comparator 1

TD/TP PAC - Programmation n 3

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

Introduction à MATLAB R

Exo7. Matrice d une application linéaire. Corrections d Arnaud Bodin.

Structurer ses données : les tableaux. Introduction à la programmation

Baccalauréat ES Pondichéry 7 avril 2014 Corrigé

Comment automatiser la création d index multiples avec Word Paul-Henri Dumas - URFIST

Fonctions homographiques

Algorithmique, Structures de données et langage C

Programmation Objet - Cours II

ACCRÉDITATION DES CENTRES PRIVÉS ET DES PROGRAMMES DE FORMATION PROFESSIONNELLE EN HAÏTI. Formulaire de demande d une autorisation de fonctionnement

données en connaissance et en actions?

Programmation Classique en langage C

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Transcription:

Année Spéciale 2013-2014 TD : Complexité des algorithmes Exercice 1 On considère deux manières de représenter ce que l on appelle des «matrices creuses», c'est-à-dire des matrices d entiers contenant environ 90% d éléments nuls : a) La matrice est représentée par un tableau à deux dimensions dont les cases contiennent les éléments. b) La matrice est représentée par un tableau à une dimension. On ne s intéresse qu aux éléments de la matrice qui ne sont pas nuls. Chaque case du tableau contient un triplet (i, j, a) correspondant à l indice de ligne, l indice de colonne, et la valeur d un élément non nul. Le problème considéré consiste à calculer la somme des éléments d une matrice. On demande d écrire un algorithme permettant de calculer cette somme, pour chacune des deux représentations, puis de comparer leur complexité spatiale (espace mémoire occupé) et leur complexité temporelle (nombre d opérations à effectuer). Que peut-on conclure de cette comparaison? Montrer qu il existe une valeur critique du nombre d éléments non nuls à partir de laquelle une méthode l emporte sur l autre. Exercice 2 On considère, pour effectuer la recherche d un élément dans un tableau, la recherche séquentielle et la recherche dichotomique. On s intéresse à leur complexité temporelle. Pour cela, considérer un tableau ayant mille éléments (version trié, et version non trié). Pour chaque algorithme, et pour chaque version du tableau, combien de comparaisons sont à effectuer pour : - trouver un élément qui y figure? - trouver un élément qui n'y figure pas? Quels sont les cas où le tableau est parcouru complètement et les cas où un parcours partiel est suffisant? Conclure en donnant la complexité temporelle pour chaque algorithme Exercice 3 On considère un tableau à une dimension contenant des lettres majuscules. On désire compter la fréquence de chacune des 26 lettres de l alphabet. Ecrire deux procédures qui donnent en sortie un tableau de fréquence: l une où le tableau est parcouru 26 fois, et l autre (plus performante!) où le calcul est fait en un seul parcours. On pourra supposer que l on dispose d une fonction auxiliaire position(lettre) qui pour chaque lettre donne sa position dans l alphabet : position( A ) = 1,, position( Z) = 26. Exercice 4 On considère trois tris élémentaires : le tri sélection, le tri par insertion (trois variantes), et le tri bulle. On considère pour un tableau les deux cas extrêmes où le tableau est déjà trié (dans l ordre croissant), et celui où il est trié dans l ordre décroissant. Décrire avec précision le comportement et la complexité de chacun des algorithmes dans ces deux cas. Quelles conséquences peut-on en tirer?

PROPOSITION DE CORRIGE Durée prévue : une séance Exercice 1 a) tableau à deux dimensions algo : somme := 0 pour cptl := 1 à n faire {pour chaque ligne} pour cptc := 1 à n faire {pour chaque colonne} somme := somme + tab[cptl, cptc] 1. complexité spatiale : n * n 2. complexité temporelle : n* n sommes b) tableau à une dimension Donner un exemple de matrice presque vide et leur faire mettre sous forme de tableau à une dimension pour comprendre cette représentation de matrice. algo : somme := tab[1].val pour cpt := 2 à m faire somme := somme + tab[cpt].val 3. complexité spatiale : 3 * m 4. complexité temporelle : m-1 La complexité temporelle est toujours favorable à la représentation avec un tableau à 1 dimension. La complexité spatiale l est également tant que 3 * m < n * n, c est à dire m < (n*n)/3. Exercice 2 a. Revoir poly, transparents 33, 34, et 35. Les coefficients du polynôme sont mémorisés dans un tableau a) Calcul de la valeur d'un polynôme en un point (1) p := a[0] pour i :=1 à n faire xpi := puissance(x, i) p := p + a[i]* xpi fpour 5. nombre d additions : n 6. nombre de multiplications : pour calculer xpi : i-1 multiplications, pour calculer a[i]*xpi : 1 + (i-1) = i multiplications, donc, pour la boucle : 1 + 2 + 3 + + i + + n = n(n+1)/2 algorithme en O(n2) b) Calcul de la valeur d'un polynôme en un point (2) p := a[0]

xpi := 1 pour i := 1 à n faire xpi := xpi * x faire p := p + a[i]* xpi 7. nombre d additions : n 8. nombre de multiplications : 2n c) Calcul de la valeur d'un polynôme en un point (3) (méthode de Horner) p := a[n] pour i := n - 1 à 0, pas -1 faire p := p*x + a[i] 9. nombre d additions : n 10. nombre de multiplications : n Exercice 3 Recherche d un élément dans un tableau -- Revoir poly, transparents 36 et 37 Opérations élémentaires retenues: les comparaisons 1. Recherche séquentielle dans un tableau de 1000 éléments non trié 11. élément ne s y trouvant pas (complexité au pire) : 1000 comparaisons (tableau est parcouru complètement) 12. élément qui s y trouve (complexité moyenne) : n/2=500 comparaisons (parcours partiel suffisant) 2. Recherche séquentielle dans un tableau trié 13. élément ne s y trouvant pas (complexité au pire) : 1000 comparaisons (parcours partiel suffisant) 14. élément qui s y trouve (complexité moyenne) : n/2=500 comparaisons (parcours partiel suffisant) 3. Recherche dichotomique (dans un tableau non trié) : impossible 4. Recherche dichotomique (dans un tableau trié) 15. complexité au pire = complexité moyenne = nombre p d'intervalles considérés Exemple avec n = 8 = 23 tableau de 8 éléments 3 comparaisons Niveau 0 Niveau 1 Niveau 2 Niveau 3 Profondeur de l arbre de décision : de l ordre de log2n Donc pour un tableau de 1000 éléments, disons 1024 10 comparaisons algorithme en O(log2n)

Exercice 4 fréquence de chacune des 26 lettres dans un texte La méthode qui parcourt le tableau 26 fois consiste à parcourir le texte pour compter d abord tous les A, recommencer pour compter tous les B, etc. On utilise un tableau d entiers de 26 cases, qui sert à mémoriser les occurrences. La deuxième méthode demande de disposer de la conversion d une lettre en un entier, qui correspond à sa place dans l alphabet. (En c++, on ferait tout simplement appel à i = car A ). char texte[tmax] int cpt, pos, occ[26] pour cpt := 1 à 26 faire occ[cpt]:= 0 {initialisation à zéro} cpt := 1 tant que (texte[cpt] CARFIN) faire pos := conversion(texte[cpt]) occ[pos] := occ[pos] + 1 cpt := cpt + 1 ftq Exercice 5 Fibonacci tab: tableau [0,n] d'entiers tab[0] := 1 ; tab[1] := 1 pour i := 2 à n faire tab[i]=tab[i-1] + tab[i-2] retourner tab[n] 16. complexité spatiale : n+1 17. complexité temporelle : n-2 additions Variante : tab: tableau [0,1] d'entiers tab[0] := 1 ; tab[1] := 1 pour i := 1 à n/2 faire tab[0]=tab[0] + tab[1] tab[1]=tab[0] + tab[1] si n pair alors retourner tab[0] sinon retourner tab[1] 18. complexité spatiale : 2 19. complexité temporelle : n additions Exercice 6 Les trois tris Le tri sélection fait autant de comparaisons dans tous les cas. La seule différence tient au nombre de mises à jour du minimum. Ce tri a cependant l avantage de ne faire que peu d échanges, ce qui peut être important pour des données de grande taille. Le tri par insertion sous la dernière variante donnée en cours ne fait qu un test par tour de boucle si le tableau est trié, d où une complexité linéaire dans ce cas : avantage pour les tableaux presque triés. Pour le tri bulle, le comportement dépend du fait que l on ait ou pas modifié l algorithme pour qu il s aperçoive qu un tableau est trié (ce qui est le cas si aucune permutation n a été faite au cours d une passe).