Sensibilisation à l’Algorithmique et structure de données

Slides:



Advertisements
Présentations similaires
Explorer un espace d’états
Advertisements

Tris.
Introduction: Concepts de la programmation
Algorithmique (suite)
Algorithmique et Programmation DEUG 2 Sciences Economiques 2004/2005
Algorithmique et Programmation
Fonctions & procédures
Structures de données et complexité
Sensibilisation à l’Algorithmique
Au programme du jour …. Un peu plus de structures de données
Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
Algorithmique Résume.
Cours n° 9 Conception et Programmation à Objets
Cours n° 8 Conception et Programmation à Objets
La programmation générique avec la STL EIUMLV - Informatique et Réseaux 99 Benoît ROMAND.
Approfondissement du langage
(Classes prédéfinies – API Java)
JAV - TD 6 Structures de données JAVA
Calcul numérique (avec Maple)
8. Les tableaux P. Costamagna – ISEN N1.
Traitement Co-Séquentiel: Appariment et Fusion de Plusieurs Listes
Utilisation des tableaux
Les bases de l’Algorithmique
Conception et analyse des algorithmes
Références Bibliographiques
ALGORITHMES RECURSIFS
Structures collectives en Java
Structures de données linéaires
Introduction à l’algorithmique
Section XI Traitement de fichiers
Les éléments de base de l’algorithmique
ALGORITHMIQUE Plan du cours Généralités -définition -importance
Bibliothèque standard du C++
Programmation linéaire
SQL Partie 3 : (LID : Langage d'interrogation de données)
Structures de données IFT-2000
Coloration gap sommet identifiante de graphes
Introduction à l’algorithmique
Rappels Java.
Semaine #1 INF135 par Frédérick Henri.
IFT Complexité et NP-complétude
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é.
Chapitre 9 Les sous-programmes.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Standard Template Library
Les Algorithmes de Tri Introduction Tri par Sélection
Heuristiques C. Recherche de la meilleure branche . Branch And Bound
Le langage C Structures de données
ALGORITHME DE TRI Le tri par insertion.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
JavaScript.
TD0 - Rappels. Acquis du programme 1 ère année Analyser et modéliser : un problème, une situation ; Imaginer et concevoir : une solution algorithmique.
Cours 7 Classes locales Clonage Divers: tableaux.
Tables de compilation pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
La programmation.
CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.
ISBN Chapitre 10 L'implémentation des sous- programmes.
Cours LCS N°4 Présenté par Mr: LALLALI
Démarche de résolution
Introduction au langage C : Structures de contrôle 1 ère année Génie Informatique Dr Daouda Traoré Université de Ségou
1. Spoon Christophe Delagarde, septembre 1998 I.U.T., Université de la Méditerrainée 2.
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
Algorithmique Tableaux de données
Algorithmique Conditions et Itérations Cours de BTS/CPI 1ère année Algo – Prog CPI/BTS1 – M. Dravet – 17/09/2003 Dernière modification: 17/09/2003.
Seconde 8 Module 7 M. FELT 03/11/ Module 7: Algorithmique #2  Objectifs:  AlgoBox.  Définition d’un algorithme.  Affectation de variable. 
Algorithmique Boucles et Itérations
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
ALGORITHME ET PROGRAMMATION RÉVISION Informatique et Sciences du Numérique.
Transcription de la présentation:

Sensibilisation à l’Algorithmique et structure de données

Algorithme Permet de résoudre un problème donné ex: Trouver le salaire minimal et le salaire maximal d’un ensemble de salariés Trier les salariés par ordre d’arrivée dans l’entreprise…. 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

Pour résoudre un problème Identifier les données à manipuler: Il faut donc stocker les salariés dans une structure de données permettant leur manipulation Il faut donc décrire un salarié avec les informations nécessaires et suffisantes : salaire, date, nom, prénom, service Définir l’état initial du problème Une liste de salariés Définir l’état final : selon le sous problème

Exemple Exemple de problème à résoudre Trouver les salariés touchant le salaire minimal Input: liste non triée de salariés Output: liste des salariés correspondant au salaire minimal Algo: 1. trouver le salaire minimal Parcourir la liste salarié par salarié et si le salaire est inférieur au salaire précédent alors c’est provisoirement le salaire minimal 2. construire la liste résultat Parcourir la liste salarié par salarié et si le salaire est égal au salaire minimal alors ajouter le salarie à la liste résultat

Types de problèmes Tris d'éléments d'une liste (trier les salariés) Recherches d'un élément (trouver le salarié à partir de son nom) Calculs (calculer la moyenne des salaires par service, ….) 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

Structures 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 Packages : java.lang et java.util Tableaux nombre max de données est connu (le tableau peut être incomplet) Listes la liste contient toujours le nombre de données courant, on ne connait pas forcément le nombre max 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 Données Sets : notion d’ensemble Maps : un index unique Les données n’ont pas besoin d’être retrouvées selon un ordre Maps : un index unique Les données peuvent être retrouvées directement à partir d’un index unique (nom – prénom du salarié) 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 conditionnelles 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 (int 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;

Exemples d’algo sur lesTableaux Calcul de la moyenne des valeurs stockées dans le tableau 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]; 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<Salarie> lesSalaries; lesSalaries = new ArrayList<Salarie>(); Ne peuvent contenir que des objets Accès au premier élément : lesSalaries.get(0) Dernier élément : lesSalaries.get(liste.size()-1) i ième élément : lesSalaries.get(i-1)

La classe ArrayList : Listes ajout d'un élt: lesSalaries.add( new Salarie (”Dery”, ”AM”, ”RAINBOW”,2000); modif d'un élt: hauteurs.set(i,new Integer(4)); suppression d'un élt: lesSalaries.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(); i++; } 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();

Validité d'un algorithme Précondition doit être vérifiée avant un traitement donné, garantit que la possibilité de déroulement du traitement. Postcondition doit être vérifiée après le déroulement du traitement, garantit que le traitement a bien permis de réaliser ce pourquoi il a été réalisé. Invariant condition qui est toujours vraie, caractérise l'état interne de tout ou partie d'un algo.

Analyse d'un algorithme Complexité: mesure de son efficacité Taille mémoire nécessaire à son exécution Temps d'exécution nécessaire dans le meilleur des cas dans le pire des cas en moyenne Exemple: recherche d'un élément dans une liste? Exemple: recherche du plus grand élément d'une liste?

Efficacité d'un algorithme Temps d'exécution fonction de la taille des données en entrée choix du bon paramètre taille d'une liste, degré d'un polynôme taille d'une matrice? nombre de noeuds, profondeur, largeur d'un graphe? nombre de mots d'un fichier ou nombre de caractères? fonction du nombre de fois où une opération de base est répétée dans l'algorithme

Efficacité d'un algorithme Temps d'exécution: T(n) = C(n) * t C(n) nombre de fois où l'opération de base de l'algorithme est exécutée t temps d'exécution de cette opération de base Ordre de grandeur: C(n) n2 Complexité : 1 log n n n log n n2 n3 2n n!

Validité d'une boucle Invariant de boucle Initialisation Conservation Montrer que I est vrai avant d'entrer dans la boucle Conservation Montrer que si C et I sont vrais, alors après la liste d'instructions, I est encore vrai. Terminaison On en déduit que (I et non C) est vrai à la sortie de la boucle (si la boucle termine).

Fact(n)‏ i ← 1; fact ← 1 { Invariant: fact = i ! et i ≤ n } TantQue i < n Faire i ← i + 1 fact ← fact * i FinTantQue (fact = i ! et i ≤ n ) et non(i<n) retourner fact

Calcul du pgcd PGCD(a,b) n <- a; m <- b; TantQue m != 0 Faire r <- n mod m n <- m m <- r FinTantQue retourner n

PGCD(a, b) n <- a; m <- b; { Invariant : pgcd(a,b)=pgcd(n,m) et n>=0 et m>=0 } TantQue m != 0 Faire r <- n mod m n <- m m <- r { pgcd(a,b)=pgcd(m,n) et m>=0 et n>0 } FinTantQue // pgcd(a,b)=pgcd(n,m) et n>=0 et m=0 // Donc n=pgcd(a,b)