Sensibilisation à l’Algorithmique
Algorithme Permet de résoudre un problème donné ex: Trouver la crue minimale et la crue maximale à partir d’un ensemble de relevés Procédure de calcul bien définie Séquence d'instructions élémentaires termine en un temps fini prend une ou des valeur(s) en entrée donne une ou des valeur(s) en sortie
Etude de cas – Fil rouge Gestion des relevés d’une crue d’une rivière Un relevé comprend : La hauteur de la crue Le point de relevé La date du relevé L’heure du relevé L’auteur du relevé Un identifiant de relevé On stocke et analyse un ensemble de relevés
Exemple Exemple de problème à résoudre Trouver la crue minimale et/ou la crue maximale à partir d’un ensemble de relevés Input: liste non triée de relevés Output: liste des relevés correspondant à la crue minimale ou maximale Algo: ???
Types de problèmes Tris d'éléments d'une liste (trier les relevés) Recherches d'un élément (trouver la hauteur de la crue à une heure donnée à un point donné) Calculs (calculer la moyenne de la crue, identifier les points critiques….) Algorithmes exacts / d'approximation chaînes de carctères codant la séquences de gènes du génome humain séquençage de l'ADN Séquençage du génome humain En biochimie, le séquençage consiste à déterminer l'ordre linéaire des composants d'une macromolécule (les acides aminés d'une protéine, etc.). En génétique, le séquençage concerne la détermination de la séquence des gènes voire des chromosomes, voire du génome complet. Ce qui techniquement revient à effectuer le séquençage de l'ADN constituant ces gènes ou ces chromosomes. algo sur graphes: modélisent pb réels: réseaux de communication ,jeux, pb du voyageur de commerce, pb de coloration de graphes pour planification d'évènements... pb combinatoires: explosion combinatoire, pas d'algo en temps raisonnable, sauf exception géométriques: graphisque, robotique: trouver la paire la plus proche, trouver le polygone convexe le plus petit numérique: systèmes d'équation, évaluation de fonctions, calcul intégral, etc. suppose représentation des nombres, approximations
Algorithme et Programme Un algorithme est implémenté dans un langage de programmation Un même algorithme peut être implémenté dans différents langages (Java, C, Python, Caml, ...) Pseudo-code
Structure de Données Moyen de stocker et organiser les données d'un algorithme accès aux données modification, mise à jour des données Tableaux nombre max de relevés est connu (le tableau incomplet) Listes la liste contient toujours le nombre de relevés courant, on ne connait pas forcément le nombre max de relevés Sets : notion d’ensemble Les relevés n’ont pas besoin d’être retrouvés selon un ordre Maps : un index unique Les relevés peuvent être retrouvés directement à partir du nom de l’auteur Piles, files : gestion des accès aux données Graphes, arbres, arbres binaires de recherche tableau/liste: taille fixe ou non set: ensemble non ordonné d'éléments distincts opérations: test d'appartenance, union, intersection si on prend un super-ensemble, on représente un set par une suite de 0 et de 1 selon que l'élément est dans le super set ou pas dictionnaires ou map: recherche d'un élément, ajout, suppression système de clés uniques
Structures de contrôle Structures de contrôle conditionnelle Si cond Alors instr FinSi Si cond Alors instr sinon instr FinSi (imbrications possibles) Structures de contrôle itératives TantQue cond Faire instr FinTantQue variantes
Itérations int i = 0; while(i<10){ System.out.println(“Coucou”); }
Itérations int i = 0; do{ System.out.println(“Coucou”); i +=1; }while(i<10); for (i=0; i<10; i++) System.out.println(“Coucou”);
Tableaux Déclaration et allocation mémoire d’un tableau de 10 entiers int [] hauteurs = new int[10]; Accès au premier élément : hauteurs[0] Accès au dernier élément : hauteurs[hauteurs.length -1] i ième élément : hauteurs[i-1] init./modif. d'un élément: hauteurs[i] = 3;
Tableaux valeur tableau[i] / indice i recherche du (des) élément(s) vérifiant une certaine propriété vérification de la présence ou l'absence d'une certaine valeur dans le tableau recherche de l'indice dans le tableau d'une valeur donné tri du tableau selon un certain critère
Exemple d’Itération int i = 0; int somme=0; while(i<hauteurs.length){ somme=somme+hauteurs[i]; } int max=hauteurs[0]; for (int i=1; i<hauteurs.length; i++){ if (max < hauteurs[i]) max=hauteurs[i];
Matrices Tableau de tableaux : int [][] matrice = new int[10][15]; élément en ligne i et colonne j : matrice[i][j] Matrice carrée : int [][] matriceCarree = new int[7][7];
La classe ArrayList : Liste Déclaration et allocation mémoire ArrayList<Integer> hauteurs; hauteurs = new ArrayList<Integer>(); ArrayList<Releve> releves; releves = new ArrayList<Releve>(); Ne peuvent contenir que des objets Accès au premier élément : releves.get(0) dernier élément : releves.get(liste.size()-1) i ième élément : releves.get(i-1)
La classe ArrayList : Listes ajout d'un élt: releves.add(new Releve(3,100,10,0,”26/04/2003”) ); modif d'un élt: hauteurs.set(i,new Integer(4)); suppression d'un élt: releves.remove(i); mêmes algos que sur les tableaux
Exemple d’Itération int i = 0; int somme=0; while(i<hauteurs.size()){ somme=somme+hauteurs.get(i).value(); } int max=hauteurs.get(0).value(); for (int i=1; i<hauteurs.size(); i++){ if (max < hauteurs.get(i).value()) max=hauteurs.get(i).value();
Paires d'objets : Maps Déclaration et allocation mémoire HashMap<String,String> surnoms; surnoms = new HashMap<String,String>(); HashMap<String,Releve> releves; releves = new HashMap<String,Releve>(); paires clé/valeur, clés uniques ajout d'un couple clé/valeur : surnoms.put(“tartampion”, “dupont”); releves.put(“Martin”, new Releve(3,100,10,0,”26/04/2003”)) suppression d'un couple clé/valeur : releves.remove(“Martin”);
Maps plus de premier, dernier, i ième élément, récupération d'une valeur associée à une clé : Releve r = releves.get(“martin”); récupération directe de la valeur associée à une clé : get de l'information de présence/absence d'une valeur: releves.containsKey(“dupont”); d'une clé : releves.containsValue(r);
ensemble non ordonné d'objet : Sets Déclaration et allocation mémoire 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”);
Exemple d’Itération Non Adaptées int i = 0; int somme=0; while(i<hauteurs.size()){ somme=somme+hauteurs.get(i).value(); } int max=hauteurs.get(0).value(); for (int i=1; i<hauteurs.size(); i++){ if (max < hauteurs.get(i).value()) max=hauteurs.get(i).value(); Non Adaptées
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.
Piles et Files Ordonnancements particuliers des éléments d'un tableau ou d'une liste Pile : empiler/dépiler des éléments File : enfiler /défiler des éléments :