Info ASD. DS1 - documents de cours, TD, TP autorisés

Documents pareils
ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Recherche dans un tableau

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

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

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

Algorithmique I. Algorithmique I p.1/??

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

Chapitre 7. Récurrences

CAISSE ENREGISTREUSE ELECTRONIQUE SE-G1

Les arbres binaires de recherche

Quelques Algorithmes simples

Programmation en Caml pour Débutants

Corrigé des TD 1 à 5

Cours d algorithmique pour la classe de 2nde

TP : Gestion d une image au format PGM

= constante et cette constante est a.

Les deux points les plus proches

Application 1- VBA : Test de comportements d'investissements

MCMC et approximations en champ moyen pour les modèles de Markov

Organigramme / Algorigramme Dossier élève 1 SI

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

1 Recherche en table par balayage

Utilitaires méconnus de StrataFrame

Traitement bas-niveau

MIS 102 Initiation à l Informatique

TD : Codage des images

Cours Informatique Master STEP

TRIGONOMETRIE Algorithme : mesure principale

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

Durée de L épreuve : 2 heures. Barème : Exercice n 4 : 1 ) 1 point 2 ) 2 points 3 ) 1 point

Algorithmique & programmation

Gestion mémoire et Représentation intermédiaire

Cryptographie RSA. Introduction Opérations Attaques. Cryptographie RSA NGUYEN Tuong Lan - LIU Yi 1

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

Ordonnancement temps réel

Initiation à l algorithmique

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Projet de programmation (IK3) : TP n 1 Correction

Algorithmique et Programmation, IMA

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

Examen Médian - 1 heure 30

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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

Principe, applications et limites

Modèle de demande d'habilitation d'un Mastère LMD

SUPPORT DE COURS. Dr. Omari Mohammed Maître de Conférences Classe A Université d Adrar Courriel : omarinmt@gmail.com

Rappels sur les suites - Algorithme

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

Algorithmique, graphes et programmation dynamique Notes de Cours Rapport de Travaux Pratiques. Laurent Canet

L ALGORITHMIQUE. Algorithme

CADRE OBLIGATOIRE DU MEMOIRE JUSTIFICATIF

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

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

Master IMA - UMPC Paris 6 RDMM - Année Fiche de TP

Parcours FOAD Formation EXCEL 2010

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Projet Matlab : un logiciel de cryptage

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

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

Propagation sur réseau statique et dynamique

Réaliser la fiche de lecture du document distribué en suivant les différentes étapes de la méthodologie (consulter le support du TD!

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

STAGE IREM 0- Premiers pas en Python

La Licence Mathématiques et Economie-MASS Université de Sciences Sociales de Toulouse 1

Découverte du tableur CellSheet

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Algorithmique et Programmation

1. Structure d'un programme FORTRAN 95

Normes et description. des ressources continues et données d autorité Analyse de l information Recherche documentaire : méthodes et outils

Distribution Uniforme Probabilité de Laplace Dénombrements Les Paris. Chapitre 2 Le calcul des probabilités

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

Nouvelle version de Zonecheck, la 3.0, avec tests DNSSEC

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Perl Orienté Objet BioPerl There is more than one way to do it

Petit memo rapide pour vous guider dans la gestion des engagements de vos compétitions FFM

Résolution de systèmes linéaires par des méthodes directes

TP Bases de données réparties

Traitement fiscal des assainissements Petits déjeuners des PME et start-up

SCIENCES POUR L INGENIEUR

TP N 57. Déploiement et renouvellement d une constellation de satellites

Programmes des classes préparatoires aux Grandes Ecoles

Chapitre 10. Les interfaces Comparable et Comparator 1

1 Imputation par la moyenne

Electrotechnique: Electricité Avion,

Chapitre 02. La lumière des étoiles. Exercices :

Cryptographie. Cours 3/8 - Chiffrement asymétrique

Besoin d en savoir plus?

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

SGM. Master S.T.S. mention informatique, première année. Isabelle Puaut. Septembre Université de Rennes I - IRISA

Reconstruction de bâtiments en 3D à partir de nuages de points LIDAR

Année Universitaire ère année de Master Droit Mention Droit Privé 1 er semestre. 1 er SEMESTRE 8 matières CM TD COEFF ECTS.

TP 2 Réseaux. Adresses IP, routage et sous-réseaux

Le calcul formel dans l enseignement des mathématiques

Licence Sciences et Technologies Examen janvier 2010

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Introduction à MATLAB R

Jean-Philippe Préaux

4D v11 SQL Release 5 (11.5) ADDENDUM

Transcription:

Info 204 - ASD 2011 2012 Licence STS - Semestre 4 DS1 - documents de cours, TD, TP autorisés Note : lorsque, dans une question, est demandée la complexité, c est une fonction de la taille de la donnée qui est attendue. Lorsque c est le comportement asymptotique, la réponse attendue est soit une notation O, soit une notation Θ soit une notation Ω. Vous pourrez utiliser toute fonction vue en cours, TD, TP à la condition expresse de spécifier correctement les entrées et les sorties. Exercice 1 : Questions de cours [4 pots] Q 1.1 [2 pots] Un algorithme s exécute dans le meilleur des cas en réalisant c m (n) = 2n + 1 opérations et dans le pire des cas en c p (n) = 2 n + 4n 2 opérations pour une donnée de taille n. Indiquez et prouvez son comportement asymptotique. L algorithme est en Ω(n) car n c m (n) 3n n > 1 et en O(2 n ) car 2 n c p (n) 2 2 n n > 2. Q 1.2 [2 pots] Le nombre d appels récursifs d un algorithme récursif est donné par la formule : { 1 si n = 0 ou 1 c(n) = 16c ( ) n 4 + n 3 son Indiquez et prouvez son comportement asymptotique. a = 16, b = 4, log 4 16 = 2 et f(n) = n 3 = Ω(n 2 ). De plus 16 ( n 4 )3 = n3 (cas 3 du théorème général) 4 n3 2 et donc c(n) = Θ(n3 ). Exercice 2 : Calculer une complexité et améliorer un algorithme [3 pots] Dans cet exercice on considère des tableaux d entiers. On dit qu un élément e est majoritaire dans un tableau t de longueur n si t contient plus de n 2 occurrences de e. Pour simplifier, on supposera traiter le cas particulier où il existe toujours un élément majoritaire. On propose la fonction element majoritaire qui calcule l élément majoritaire de t en utilisant la fonction decompte. let decompte t e = let n = Array. length t and nb = ref 0 for i = 0 to n -1 do if t.(i) = e then nb :=!nb + 1;!nb let element_majoritaire t = let n = Array. length t and max = ref 0 and valmax = ref 0 for i = 0 to n -1 do let nb = decompte t t.(i) if nb >! max then beg max := nb; valmax := t.(i); end! valmax 1

Q 2.1 [1 pot] Quelle est l opération à prendre en compte pour le calcul de la complexité en temps? La comparaison d éléments du tableau t. Q 2.2 [2 pots] Quelle est la complexité en temps? Justifiez. Le nombre de comparaisons de decompte est exactement n. Cette fonction est appelée n fois sur le tableau t dans la recherche de l élément majoritaire. On a donc n 2 comparaisons. Exercice 3 : Concevoir un algorithme d une complexité donnée [6 pots] On s téresse à un problème d analyse d images : Etant donné une ligne de pixels de différentes couleurs, on souhaite identifier la position et la longueur du plus long segment monochrome dans la ligne. Par exemple, étant donné la ligne suivante : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 notre algorithme diquera que le plus long segment monochrome débute en position 5 et est de longueur 5. Pour simplifier, on supposera qu une ligne de pixels est représentée par un tableau d entiers, chaque entier codant pour une couleur. La ligne de pixels ci-dessus sera par exemple représentée par : [ 56;56;56;0;0;34;34;34;34;34;56;34;0;0;56;56;56;56;0;56 ] Q 3.1 [2 pots] Proposez une fonction plsm écrite en Camlqui résolve ce problème dont la complexité en temps soit léaire (on compte le nombre de comparaisons de couleurs). La fonction prend en entrée un tableau d entiers t et retourne un couple avec la position p et la longueur l tel que l est la longueur du plus long segment monochrome et p la position à laquelle il débute. On parcourt le tableau, à chaque fois qu on change de couleur on réitialise à 1 un compteur qui va calculer le nombre de pixels successifs de la même couleur. On n oublie pas de se souvenir du max. let plsm t = let couleur_ courante = ref t.( 0) and compteur = ref 1 and max = ref 1 for i = 1 to ( Array. length t) - 1 do if t.( i) <>! couleur_ courante then beg if max < compteur then max :=! compteur ; couleur_courante := t.(i); compteur := 1; end else compteur :=! compteur + 1; if max < compteur then max :=! compteur ;! max Q 3.2 [1 pot] Justifiez la complexité de votre algorithme. Comme on a un seul parcours de tableau et qu à chaque fois on fait une seule comparaison de couleur, on a bien un algorithme léaire. On souhaite matenant obtenir les couleurs domantes de la ligne. Le nombre de couleurs domantes que l on souhaite extraire dépend de l application réalisée. Toujours sur l exemple ci-dessus, l extraction d une couleur domante retournera 56 et l extraction des deux couleurs domantes retournera 56 et 34. 2

Q 3.3 [2 pots] Ecrivez une fonction couleurs domantes en Camlqui prend en entrée une ligne de pixels t, un entier k et retourne un tableau avec les k couleurs domantes de t (on supposera que le nombre de couleurs de t est toujours supérieur ou égal à k). La complexité de votre fonction devra être en O(n log n) (on compte toujours le nombre de comparaisons de couleurs). On trie le tableau de pixels avec un tri fusion ou un quicksort puis on compte le nombre d occurrences de chaque couleur puis on recherche dans ces nombres d occurrences les k plus grands. Si on considère que k est une constante, alors on pouvait aussi faire le tri puis utiliser la fonction de la question précédente. let couleurs_ domantes t k = let cmp a b = if a > b then 1 else if a = b then 0 else -1 and tt = Array. copy t and n = Array. length t Array. sort cmp tt; let couleurs = Array. make n tt.( 0) and nb_ occ = Array. make n 0 and p = ref 0 let couleur_ courante = ref tt.( 0) and compteur = ref 1 (* on calcule pour chaque couleur son nombre d occurrences *) for i = 1 to ( Array. length t) - 1 do if tt.( i) <>! couleur_ courante then beg nb_occ.(! p) <-! compteur ; couleurs.(! p) <-! couleur_ courante ; couleur_ courante := tt.( i); compteur := 1; end else compteur :=! compteur + 1; nb_occ.(! p) <-! compteur ; couleurs.(! p) <-! couleur_ courante ; (* on extrait les k couleurs domantes *) let r = Array. make k 0 for i = 0 to k -1 do let max = ref nb_occ.(0) and pmax = ref 0 for j = 0 to! p -1 do if nb_ occ.( j) >! max then beg max := nb_occ.(j); pmax := j; end ; r.(i) <- couleurs.(! pmax ); nb_occ.(! pmax ) <- -1; r 3

ou bien let couleurs_ domantes t k = (* fonction de comparaison de couleurs *) let cmp1 c1 c2 = if c1 > c2 then 1 else if c1 = c2 then 0 else -1 (* fonction de comparaison de couples nb occ / couleur *) let cmp2 ( n1, c1) ( n2, c2) = if n1 > n2 then 1 else if n1 = n2 then 0 else -1 and tt = Array. copy t and n = Array. length t Array. sort cmp1 tt; let couleurs = Array. make n (0,0) and p = ref 0 let couleur_ courante = ref tt.( 0) and compteur = ref 1 (* on calcule pour chaque couleur son nombre d occurrences *) for i = 1 to ( Array. length tt) - 1 do if tt.( i) <>! couleur_ courante then beg couleurs.(! p) <- (! compteur,! couleur_ courante ); couleur_ courante := tt.( i); compteur := 1; end else compteur :=! compteur + 1; couleurs.(! p) <- (! compteur,! couleur_ courante ); (* on extrait les k couleurs domantes *) Array. sort cmp2 couleurs ; Array. sub couleurs (n-k) k Q 3.4 [1 pot] Justifiez la complexité de votre algorithme. Le tri en en O(n log n) et le décompte des occurrences de chaque couleur est léaire. L extraction des k couleurs domantes ensuite ne nécessite pas de comparaison de couleur. Exercice 4 : Mettre en œuvre un algorithme de programmation dynamique [7 pots] On s téresse à nouveau dans cet exercice à un problème d analyse d image. On considère cette fois des images en noir et blanc et le problème qu on veut traiter est la détection du plus grand carré de cases noires dans l image. Par exemple, pour l image suivante : 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 l algorithme diquera que le plus grand carré noir se situe en case (4,2) 1 et est de longueur 4. 1. D autres coordonnées sont possibles (4,3), 4,4), (4,5), c est simplement celles que mon algorithme calcule 4

On propose la récursion suivante pour résoudre le problème. On note l(i, j) la longueur du plus grand carré noir se termant en position (i 1, j 1) dans l image. On a alors : et l(i, j) = { 0 si la case de l image en position (i 1, j 1) est blanche 1 + m(l(i 1, j 1), l(i 1, j), l(i, j 1)) son l(i, 0) = l(0, j) = 0 pour 0 i n, 0 j m L obtention du résultat, c est-à-dire la plus grande longueur L, consiste à sélectionner le couple (i, j) maximisant l(i, j) : L = max 1 i n 1 j m l(i, j) si on considère une image de taille n m. Nous allons donc mettre en œuvre une résolution par programmation dynamique. Pour simplifier, on supposera qu une image est donnée par un tableau à deux dimensions dont les cases contiennent soit 0 soit 1, 0 diquant les cases blanches, et 1 les cases noires. On manipulera trois variables déclarées comme ci-dessous : let img = [ [ 0;0;0;0;0;0;1;1;1 ] ] ;; let n = Array.length img;; let m = (Array.length img.(0));; Q 4.1 [1 pot] Quelle est la taille de la table de programmation dynamique? (n + 1) (m + 1) Q 4.2 Q 4.3 [1 pot] Donnez le code Camlqui réalise l itialisation de la table. [2 pots] Donnez le code Camlqui réalise le remplissage de la table. Q 4.4 [1.5 pot] Donnez le code Camlqui extrait le résultat. 5

let carre_ pd img = let m3 a b c = ( m ( m a b) c) let n = Array. length img and m = ( Array. length img.(0)) let t = Array. make_matrix (n +1) (m +1) 0 (* itialisation *) (* fait avec le array. make *) (* remplissage *) for i = 1 to n do for j = 1 to m do if img.(i -1).(j -1) = 1 then t.(i).( j) <- 1 + m3 t.(i -1).(j -1) t.(i).(j -1) t.(i -1).( j) else t.(i).( j) <- 0 done (* resultat *) let imax = ref 1 and jmax = ref 1 for i = 1 to n do for j = 1 to m do if t.(i).( j) > t.(! imax ).(! jmax ) then beg imax := i; jmax := j end ; (! imax -t.(! imax ).(! jmax ),! jmax -t.(! imax ).(! jmax ),t.(! imax ).(! jmax )) Q 4.5 [1.5 pot] Quel est le comportement asymptotique en temps? Justifez clairement. Le remplissage de chaque case de la table demande 1 comparaisons de couleur et on procède au remplissage de n m cases. Idem pour l extraction du résultat. On est donc en Θ(n m). 6