Au programme du jour …. Un peu plus de structures de données

Slides:



Advertisements
Présentations similaires
Cours n° 7 Standard Template Library II.
Advertisements

Structures de données et complexité
Structures de données et complexité LIFO – FILO – FIFO – etc…
Sensibilisation à l’Algorithmique
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de.
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Introduction à l’Algorithmique
Sensibilisation à l’Algorithmique et structure de données
Au programme du jour …. Livraison de code Organisation des répertoires et packages Ce que vous navez pas encore vraiment vu Constantes et variables de.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Cours n° 9 Conception et Programmation à Objets
Cours n° 8 Conception et Programmation à Objets
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
La programmation générique avec la STL EIUMLV - Informatique et Réseaux 99 Benoît ROMAND.
Approfondissement du langage
Algorithme et structure de données
JAV - TD 6 Structures de données JAVA
A.Faÿ 1 Recherche opérationnelle Résumé de cours.
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
Classes locales classes définies à l'intérieur d'un bloc de code,
Structures collectives en Java
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
IPA – Catherine Faron Zucke et Anne Marie Deryr. suite ordonnée d'éléments de taille variable ArrayList liste; liste = new ArrayList (); Ne peuvent contenir.
Structures de données et algorithmes – C5 Maria-Iuliana Dascalu, PhD
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Les collections d'objets
OCaml – Les arbres L3 MI.
II. Chaînage, SDD séquentielles
Les algorithmes: complexité et notation asymptotique
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
POO-L3 H. Fauconnier1 Tableau et héritage Y[] yA=new Y[3]; X[] xA=yA; //ok xA[0]=new Y(); xA[1]=new X(); //non xA[1]=new Z(); //non Object XX[]int[] YZY[]Z[]
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
Chapitre 21 Collections Partie I Introduction Une collection : est un objet qui regroupe multiple éléments dans une unité. Une collection est.
Standard Template Library (STL)
1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Résumé du cours précédent.
Structures de données IFT-2000
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Conteneurs STL.
Rappels Java.
Présentation Structures de Données et TDA
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
Indexation et Recherche d'Information
Cours du 22 novembre généricité. Chapitre VII Généricité.
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Standard Template Library
CSI 1502 Principes fondamentaux de conception de logiciels
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.
Structures de données IFT-10541
Structures de données IFT-2000
Le langage C Structures de données
Graphes 1. Introduction 2. Définition 3. Représentation mémoire
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
David Rivreau Table de hachage David Rivreau
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
Cours 7 Classes locales Clonage Divers: tableaux.
Templates, Containers et STL Structures de données de base tableau, liste chaînée file, pile, arbres, hashtable collection, ensemble 2 caractéristiques.
Tutorat en bio-informatique
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
ETNA – 1ème année Guillaume Belmas –
ISBN Chapitre 10 L'implémentation des sous- programmes.
Structures de données avancées : Principales structures de fichiers
Chapitre 21 Collections partie III Set Une collection qui contient des éléments uniques. Deux implémentation :  HashSet : stock les éléments.
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
Université Paul Sabatier - Toulouse 3 Accueil des nouveaux personnels – Promotion 2007 IUT A – Service Direction – 19 août Chapitre 1 Structures.
Transcription de la présentation:

Au programme du jour …. Un peu plus de structures de données Un peu plus d’algorithmique : la récursivité Livraison de code Organisation des répertoires et packages

Piles et Files Ordonnancements particuliers des éléments d'un tableau ou d'une liste Pile : empiler/dépiler des éléments statique ou dynamique selon qu'on utilise un tableau ou une liste File : enfiler /défiler des éléments implémentation par liste plus simple IPA – Catherine Faron Zucker

Piles public class Pile{ } private Object[] table; private int hauteur; public void empiler(Object o) {table[hauteur]=o; hauteur++;} public Object depiler() {hauteur--; return table[hauteur];} public Object sommet(){} public boolean vide(){} public boolean pleine(){} } IPA – Catherine Faron Zucker

Files public class File{ } private ArrayList<Object> liste; private int longueur; public void enfiler(Object o) {liste.add(o); longueur++;} public Object defiler() {longueur--; return liste.remove(0);} public Object tete(){} public Object queue(){} public boolean vide(){} } IPA – Catherine Faron Zucker

Maps collection de paires d'objets, de taille variable HashMap<String,String> surnoms; surnoms = new HashMap<String,String>(); paires clé/valeur, clés uniques ajout d'un couple clé/valeur : surnoms.put(“tartampion”, “dupont”); suppression d'un couple clé/valeur : surnoms.remove(“tartampion”); IPA – Catherine Faron Zucker

Maps plus de premier, dernier, i ième élément, récupération d'une valeur associée à une clé : String nom = surnoms.get(“tartampion”); récupération directe de la valeur associée à une clé : get de l'information de présence/absence d'une valeur: surnom.containsKey(“dupont”); d'une clé : surnom.containsValue(“tartampion”); IPA – Catherine Faron Zucker

Sets ensemble non ordonné d'objets, de taille variable HashSet<String> surnoms; surnoms = new HashSet<String>(); ajout d'un élément : surnoms.put(“tartampion”); suppression : surnoms.remove(“tartampion”); test direct de la présence d'un élément : surnoms.contains(“tartampion”); IPA – Catherine Faron Zucker

Maps et Sets Les structures de Maps et de Sets ne supportent que les opérations de dictionnaire: insérer, rechercher, supprimer HashMap et HashSet sont des implémentations à base de tables de hachage qui permettent de réduire le coût de ces opérations. à suivre... IPA – Catherine Faron Zucker

Structures de données listes chaînées : cf. td arbres arbres binaires simplement, doublement arbres arbres binaires arbres binaires de recherche graphes à suivre... IPA – Catherine Faron Zucker

Attention types primitifs / Objets Les wrappers

Les classes « enveloppe » (1) Problème : les types de base (int, float, double, boolean… ne sont pas des objets) On ne peut pas les stocker tels quels dans les conteneurs C’est à cela que servent les classes enveloppes (Wrappers)

Les classes « enveloppe » (2) Permettent de représenter des types de base sous forme d’objets int entier => Integer n Integer n = new Integer(entier); entier = n. intValue(); double =>Double, boolean => Boolean… intValue(), doubleValue() ...

Conception d’algorithmes Itératif / récursif

Conception d'un algorithme Stratégie de résolution d'un problème Approche incrémentale itérer jusqu'à obtention du résultat souhaité Approche récursive diviser pour régner: diviser en sous-problèmes régner sur les sous-problèmes combiner les solutions des sous-problèmes IPA – Catherine Faron Zucker

PGCD(a, b) itératif n <- a; m <- b; TantQue m != 0 Faire r <- n mod m n <- m m <- r FinTantQue retourner n IPA – Catherine Faron Zucker

PGCD(a, b) récursif diviser: pgcd(a,b) = pgcd(b, a mod b) semblable au problème initial de taille moindre régner: pgcd(a,0) = a combiner: pgcd(a,b)= pgcd(b,a mod b)=... IPA – Catherine Faron Zucker

PGCD(a, b) récursif Si b=0 Alors retourner a //terminaison Sinon retourner pgcd(a, a mod b) finSi Théorème de Lamé (1845) : (n>=m)‏ Si l ’algorithme d ’Euclide nécessite k étapes pour calculer pgcd (n,m) on a n>=m>=Fibk [Fib0 = 0, Fib1 = 1, Fibk = Fibk-1 + Fibk-2, pour k>1] T(Euclide, (n,m)) = O(log min(n,m))‏ même complexité Euclide version itérative, version récursive IPA – Catherine Faron Zucker

Fac(n) Relation de récurence Algorithme fac(n) = n * fac(n-1), n>0 Si n = 0 Alors retourner 1 Sinon retourner n * fac(n-1) FinSi IPA – Catherine Faron Zucker

Fac(n) Complexité cf. module Maths discrètes opération élémentaire : * nbre de fois où elle est effectuée fonction de n: M(n) relation de récurence: M(n) = 1 + M(n-1) pour n>0 et M(0) = 0 en développant, on a M(n) = M(n-i) – i pour tout i pour i=n, on obtient M(n) = M(O) + n = n cf. module Maths discrètes IPA – Catherine Faron Zucker

Tours de Hanoï n disques de tailles décroissantes sur une tige Problème: comment faire passer les n disques sur une autre tige, en utilisant une tige intermédiaire afin qu'un disque ne soit jamais empilé sur un plus petit? IPA – Catherine Faron Zucker

Tours de Hanoï Algorithme (récursif): faire passer n-1 disques sur la tige 2 faire passer le plus grand disque sur la tige 3 reste à faire passer les n-1 disques de t2 à t3 IPA – Catherine Faron Zucker

Tours de Hanoï Complexité on compte le nbre de déplacements il est fonction du nombre de disques M(n) = M(n-1) + 1 + M(n-1) pour n>1 et M(1)=1 M(n) = 2*M(n-1)+1 = ... = 2n -1 (algo exponentiel) IPA – Catherine Faron Zucker

Recherche dichotomique Version itérative vue en TD Version récursive ? IPA – Catherine Faron Zucker

Livraison d’un projet Pour vos futurs rendus

Usage de votre code Votre code est destiné à être utilisé VOUS DEVEZ Documenter votre code 2 documentations : à destination des usagers de la classe : ils ne doivent pas connaître l’implémentation. Ils doivent uniquement connaître : La façon d’installer et d’exécuter Les fichiers .class et leur emplacement Et la documentation de l’interface de la classe : javadoc à destination des développeurs qui doivent faire évoluer votre code: ils doivent connaître l’implémentation. Livraison des .java Et Documentation de l’implémentation de la classe : UML, cahier des charges, spécifications détaillées, commentaires dans le code

Livraison Javadoc

Javadoc et classe POUR UNE CLASSE Class comment: /** * The Responder class represents a response * generator object. It is used to generate an * automatic response. * * @author Michael Kölling and David J. Barnes * @version 1.0 (1.Feb.2002) */

JAVADOC et méthode Commentaire pour une méthode /** * Read a line of text from standard input (the text * terminal), and return it as a set of words. * * @param prompt A prompt to print to screen. * @return A set of Strings, where each String is * one of the words typed by the user */ public HashSet getInput(String prompt) { ... }

Comment générer la javadoc : page HTML javadoc ClasseATester.java OPTION -help Donne en ligne les différentes options Génération du fichier ClasseATester.html pour en savoir plus http://java.sun.com/j2se/javadoc/writingdoccomments/

Livraison Rappel sur les tests

Un Main pour les Tests Exemple : Pour tester la classe ClasseATester Ecrire le contenu du main dans une classe TestDEClasseAtester (condition réelle de l’usage) de sorte qu’il y ait : Création d’instances de cette classe : (Tests des constructeurs) Affichage des instances créées (Tests des constructeurs et de la méthode toString) Appels des méthodes en faisant varier la valeur des paramètres sur ces instances (Test des méthodes publiques) Affichage des retours des méthodes pour voir les tests

Comment faire et utiliser des packages?

Vous connaissez déjà…. Organisation par packages Quels sont les packages que vous connaissez ? java.util java.lang Où pouvez vous trouver la classe String ? La classe ArrayList ? Quels sont les packages qui pourront vous servir ?

Comment travaille-t-on avec des packages ? Les classes d’un package (bibliothèque de classes) doivent être importées (comme des livres que l’on emprunte…) Utilisation de la clause import Pour importer une seule classe : import java.util.ArrayList; Pour importer toutes les classes d’un package : import java.util.*; Importation inutile pour les classes de java.lang (tout le monde a ces livres ). Une fois importées les classes ont toutes la même visibilité En cas de conflit, mettre le nom complet de la classe java.util.ArrayList Ex : la classe MaClasse existe dans 2 packages : monnompackage et autrenompackage On peut les distinguer à l’aide des noms complets : monnompackage.MaClasse ou autrenompackage.MaClasse

Packaging de votre code Implication dans chaque classe de cette bibliothèque package nompackage; Instruction à ajouter au début des classes appartenant au package Implication sur l’organisation des fichiers Mettre les classes à compiler sous un répertoire de nom nompackage Compiler (placé au dessus du répertoire de nom nompackage) javac nompackage/ClassePackagée.Java Exécuter (placé au dessus du répertoire de nom nompackage) java nompackage.ClassePackagee

Packaging de votre code et compilation ATTENTION A LA COMPILATION D’UNE CLASSE Les classes utilisées doivent être déjà compilées et visibles ORDRE de Compilation important VISIBILITE importante Désignation des répertoires où sont stockés les classes possibles VARIABLE D’ENVIRONNEMENT : CLASSPATH OPTION DE COMPILATION ET D’EXECUTION : -cp AUTRE OPTION PRATIQUE -d

Packaging de votre code Pour une meilleure livraison Pour regrouper les classes utilisées dans le même contexte Une organisation des répertoires src : les classes doc : la documentation bin : les binaires tests : les tests

Cours en ligne http://users.polytech.unice.fr/~pinna/Java/ Cours Intro : IntroJava2009.ppt Cours 2 : Cours2Java2009.PPT Cours Algo : algo2009.ppt Cours Algo suite : algoSuite2009.ppt