H. Richard – 11.09.2014 Elodie Laine – 24.09.2015 Initiation à la programmation impérative et algorithmique Cours 5 – Tableaux Largement inspiré des cours.

Slides:



Advertisements
Présentations similaires
Les Structures.
Advertisements

Tris.
Chap. 4 Recherche en Table
Algorithmique (suite)
Portée des variables VBA & Excel
Fonctions & procédures
Introduction à l’Algorithmique
Sensibilisation à l’Algorithmique et structure de données
Calculs de complexité d'algorithmes
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.
Algorithmique Résume.
Les Algorithmes de tri.
Exercices Algorithmiques
1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.
Tableaux Certains problèmes nécessitent beaucoup de variables du même type. Exemple : relevé de températures matin et soir dans 10 villes pour 10 jours.
Chap. 1 Structures séquentielles : listes linéaires
8. Les tableaux P. Costamagna – ISEN N1.
Algorithme et programmation
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
Initiation à la programmation et algorithmique cours 3
Lycée Louis Vincent SEANCE 6 Python Les listes Lundi 25 novembre 2013.
Utilisation des tableaux
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
Les bases de l’Algorithmique
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Partie 1 Etude de l'existant
Les éléments de base de l’algorithmique
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Methode de Tri efficace
Les fichiers indexés (Les B-arbres)
Structures de données IFT Abder Alikacem La classe vector Édition Septembre 2009 Département dinformatique et de génie logiciel.
Ensembles Définition d’un ensemble. Opérations sur les ensembles. Accès, suppression et ajout d’éléments d’un ensemble. Fonctions permettant de manipuler.
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Une nouvelle structure de données : les tableaux
Efficacité des algorithmes
Plan cours La notion de pointeur et d’adresse mémoire.
ALGORITHME DE TRI Le tri par insertion.
Chapitre 6 Les traitements avancés
Algorithmes de tri et de recherche
Programmation linéaire en nombres entiers
Cours 4 - Trois algorithmes de recherche dans un tableau
Structures de contrôle
Structures simples et tableaux Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
1 1 Huitième journée Quelques algorithmes. 2 Définition Description des tâches pour que celles-ci soient aisément programmables Différent d’une méthode.
Organisation des données Introduction à la programmation Traitements simples Affectation Parcours Définition du tableau Les Tableaux Mise en situation.
Cours LCS N°4 Présenté par Mr: LALLALI
Introduction au langage C : Structures de contrôle 1 ère année Génie Informatique Dr Daouda Traoré Université de Ségou
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
Module algorithmique et programmation
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Cours 5 - Trois algorithmes de tri d'un tableau
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
La pile de crêpes.
Scripts et fonctions Instructions de contrôle
Algorithmique Tableaux de données
Structures de données IFT-2000
Introduction à l’utilitaire
Objets et Actions Élémentaires.
LES TABLEAUX Définition: Création d’un tableau:
Algorithmique Boucles et Itérations
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
L'exécution d'un programme nécessite l'utilisation des ressources de l'ordinateur : temps de calcul pour exécuter les opérations, et l'occupation de la.
L ES INSTRUCTIONS DE L ECTURE, E CRITURE ET A FFECTATION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université.
BASE DE L’ALGORITHMIE.  Un système d’instructions.  Pour résoudre d’un problème ou d’une classe de problèmes  Recette de cuisine pour faire un gâteau.
ALGORITHME ET PROGRAMMATION RÉVISION Informatique et Sciences du Numérique.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Complexité algorithmique
Initiation à la programmation impérative et algorithmique
Transcription de la présentation:

H. Richard – Elodie Laine – Initiation à la programmation impérative et algorithmique Cours 5 – Tableaux Largement inspiré des cours : Vercouter, Del Mondo & Delestre, Hérault, Mainguenaud (INSA de Rouen)

H. Richard – D’une variable par valeur… BooléenCaractère Entier Types simples dénombrables Types simples indénombrables Réel Chaîne de caractères … à plusieurs valeurs pour une variable Types complexes…? Comment gérer un ensemble de valeurs ? valeur 1valeur 2valeur 3 Elodie Laine –

H. Richard –  Exemple : Calcul de la moyenne d’un ensemble de nombres fonction calculerMoyenne(n1,n2,n3,n4,n5 : Reel) : Reel Declaration resultat : Reel debut resultat ← n1+n2+n3+n4+n5 resultat ← resultat / 5 retourner resultat fin Inconvénient : cet algorithme est très peu flexible car le nombre de variables dont on peut calculer la moyenne est fixe (en l’occurrence 5). Une variable par valeur Elodie Laine –

H. Richard –  Exemple : Calcul de la moyenne d’un ensemble de nombres fonction calculerMoyenne(n1,n2,n3,n4,n5 : Reel) : Reel Declaration resultat : Reel, nb : Entier debut resultat ← 0 nb ← 0 si n1 ≠ -1 alors resultat ← resultat + n1 nb ← nb + 1 finsi si n2 ≠ -1 alors resultat ← resultat + n2 nb ← nb + 1 finsi … retourner resultat / nb fin Inconvénient : pour une réutilisation maximale de l’algorithme, il sera nécessaire de définir un grand nombre de variables (espace mémoire requis important). Nombre de variables surdimensionné Elodie Laine –

H. Richard –  Exemple : Calcul de la moyenne d’un ensemble de nombres fonction calculerEtAfficherMoyenne(): None Declaration uneNote, i : Entier somme, nbEleves : Reel debut somme ← 0 ecrire(“Nombre d’eleves :”) lire(nbEleves) pour i ← 1 a nbEleves faire ecrire(“Note de l’eleve numero ”,i,“ : ”) lire(uneNote) somme ← somme + uneNote finpour ecrire(“La moyenne est de :”, somme/nbEleves) fin Variable d’accumulation Inconvénient : l’utilisation de cette fonction impose un appel systématique à l’interface avec l’utilisateur, et interdit toute opération ultérieure sur les nombres. Calcul interactif Elodie Laine –

H. Richard – Un tableau est un type complexe de données permettant de représenter plusieurs valeurs dans une même variable Définition Un tableau est caractérisé par : une taille déterminée un unique type de données pour toutes ses valeurs Propriétés Les tableaux Elodie Laine –

H. Richard – l’opérateur [ ] permet d’accéder à une valeur spécifique du tableau l’affectation copie toutes les valeurs d’un tableau dans un autre les opérateurs = et ≠ testent si toutes les valeurs de deux tableaux sont égales ou différentes les opérateurs sur les valeurs du tableau sont ceux du type de données Opérateurs Les tableaux Elodie Laine –

H. Richard – La taille d’un tableau est définie strictement lors de sa déclaration par un intervalle, qui indique les indices valides pour les valeurs du tableau. Les bornes de l’intervalle sont des constantes. Par exemple, un tableau d’entiers défini sur l’intervalle contiendra 16 valeurs entières indicées de 5 à 20. Intervalle de déclaration L’indice sert à désigner une valeur spécifique du tableau. En reprenant l’exemple ci-dessus, soit tab une variable de ce type de tableau, tab[6] désignera une valeur entière stockée en deuxième position dans le tableau (celle d’indice 6). Indices Déclaration d’un tableau Elodie Laine –

H. Richard – tab : Tableau [1..26] de Reel  déclare une variable de type tableau de 26 réels  les indices valides vont de 1 à 26 tab2 : Tableau [5..15] de Caractere  déclare une variable de type tableau de 16 caractères  les indices valides vont de 5 à 15 Pseudo-code La déclaration d’un type spécifique facilite l’écriture Type Notes = Tableau [1..26] de Reel  définit un nouveau type appelé Notes, qui est un tableau de 26 réels tab3 : Notes  déclare une variable de type Notes (tableau de 26 réels)  les indices valides vont de 1 à 26 Définition de type Déclaration d’un tableau Elodie Laine –

H. Richard – On accède à la i ème valeur d’un tableau en utilisant la syntaxe suivante : nom_de_la_variable[indice] Soit tab un tableau de 10 entiers (tab : Tableau[1..10] d’Entier) : tab[2] ← -5 met la valeur -5 dans la 2 ème case du tableau a ← tab[2] met la valeur de la 2 ème case du tableau dans la variable (entier) a lire(tab[1]) met l’entier saisi par l’utilisateur au clavier dans la 1 ère case du tableau ecrire(tab[1]) affiche la valeur de la 1 ère case du tableau Accès et affectation Elodie Laine –

H. Richard – Declaration : tab : Tableau[3..5] de Reel debut tab[3] ← 2.3 tab[4] ← -3.6 tab[5] ← tab[3] fin tab : Exemple : affectation & représentation Elodie Laine –

H. Richard – Constante MAX = 100 Type Notes = Tableau[1..MAX] de Reel fonction saisirNotes() : None Declaration i : Entier debut repeter ecrire(“Nombre d’eleves (maximum ”,MAX,“) :”) lire(nbEleves) jusqu’a ce que nbEleves > 0 et nbEleves ≤ MAX pour i ← 1 a nbEleves faire ecrire(“Note de l’eleve numero ”,i, “ :”) lire(lesNotes[i]) finpour fin Exemple : remplissage Elodie Laine –

H. Richard – fonction calculerMoyenne(lesNotes : Notes, nbEleves : Entier) : Reel Declaration i : Entier, somme : Reel debut somme ← 0 pour i ← 1 a nbEleves faire somme ← somme + lesNotes[i] finpour retourner somme/nbEleves fin Exemple : calcul de moyenne Elodie Laine –

H. Richard – Le dépassement de tableau se produit lors de l’accès à un indice n’existant pas. Declaration : tab : Tableau [1..10] de Reel debut tab[11] ← 3.4 fin Dépassement L’effet d’un dépassement de tableau peut : provoquer une erreur à l’exécution (arrêt du programme) modifier de manière aléatoire d’autres variables n’avoir aucun effet Effet Exemple : dépassement de tableau Elodie Laine –

H. Richard – Contrairement aux tableaux, les tuples python peuvent contenir des éléments de types différents Le tuple est une structure de données non modifiable représentant une collection d’élements. Il se construit à l’aide de parenthèses. Les tuples tup = (1,2) tup[1] 1 in tup tup + tup for i in tup: print(i)  2, l’indexation commence à zéro  True, test d’appartenance d’un élément  (1,2,1,2), concaténation de tuples  1 2, parcours du tuple Les tableaux en Python (1) Elodie Laine –

H. Richard – Contrairement aux tableaux, les listes python peuvent contenir des éléments de types différents La liste est une structure de données modifiable représentant une collection d’éléments. Elle se construit à l’aide de crochets. Les listes arr = [1,2,3,4,5,6,7,8,9,10,11,12] arr[0] = 7 arr.append(42) arr[0:6] arr[0:6:2]  [7,2,3,4… modification d’un élément  …10,11,12,42] ajout d’un élément à la fin  [1,2,3,4,5,6] sous-tableau  [1,3,5] extraction en tranches Les tableaux en Python (2) Elodie Laine –

H. Richard – Contrairement aux tableaux, les tableaux numpy peuvent contenir des éléments de types différents Les tableaux de la bibliothèque numpy possèdent les même propriétés que les listes (tableaux python par défaut), mais se comportent différemment vis-à-vis des opérations arithmétiques. Ceci leur confère un intérêt particulier pour la manipulation de vecteurs. Les tableaux de la bibliothèque numpy nar = numpy.array([1,2,3,4]) arr + arr arr * arr  [2,4,6,8], addition et non pas concaténation  [1,4,9,16] multiplication élément à élément Les tableaux en Python (3) Elodie Laine –

H. Richard – Notion de complexité algorithmique Parcours de tableaux Insertion/Suppression de valeurs Recherche dans un tableau non trié Algorithmes simples sur les tableaux Elodie Laine –

H. Richard – La complexité est le critère principal de qualité d’un programme. Elle correspond au nombre d’opérations nécessaires lors de l’exécution de l’algorithme, indépendamment des capacités matérielles de la machine d’exécution. Elle est fonction de la taille du problème n Elle est notée Ο dans le pire des cas, Ω dans le cas moyen, θ dans le meilleur des cas Complexité algorithmique Complexité Elodie Laine –

H. Richard – Complexité Ο(1) – constante (ex. : une suite séquentielle d’instructions) Ο(logn) – logarithme (ex. : boucle qui divise n à chaque itération) Ο(n) – linéaire (ex. : simple parcours complet d’un tableau) Ο(n²) – quadratique (ex. : boucle imbriquée dans une boucle) Valeurs classiques Elodie Laine –

H. Richard – Il consiste à parcourir systématiquement les éléments d’un tableau, dans le but d’effectuer une opération donnée (modification, affichage, lecture…). Dans certains cas, le parcours pourra être seulement partiel : Il est possible de ne pas considérer tous les éléments Le parcours peut être interrompu avant la fin Parcours séquentiel Parcours d’un tableau Elodie Laine –

H. Richard – On dispose d’un tableau de réels où chaque élément correspond à un événement de duplication, fusion ou perte de gènes dans un génome donné. On souhaite calculer le nombre de gènes (en supposant qu’il était de 10 avant la première opération). Calcul de taille de génome Constante MAX = 100 Type TabReels = Tableau[1..MAX] de Reel fonction calculeNbGenes (evenements : TabReels, taille : Entier) : Reel Declaration nbGenes : Reel, i : Entier debut nbGenes ← 10 pour i ← 1 a taille faire nbGenes ← nbGenes + evenements[i] finpour retourner nbGenes fin Exemple : Parcours ascendant (1) Elodie Laine –

H. Richard – On souhaite calculer le nombre total de gènes perdus. Calcul des pertes de gènes fonction calculeNbGenesPerdus (evenements : TabReels, taille : Entier) : Reel Declaration NbGenesPerdus : Reel, i : Entier debut nbGenesPerdus ← 0 pour i ← 1 a taille faire si evenements[i] < 0 alors nbGenesPerdus ← nbGenesPerdus +evenements[i] finsi finpour retourner nbGenesPerdus fin Exemple : Parcours ascendant (2) Elodie Laine –

H. Richard – On souhaite afficher les évolutions de la taille du génome depuis la taille actuelle jusqu’à sa valeur initiale. Afficher les évolutions de taille fonction affichageEvol (evenements : TabReels, taille : Entier) : None Declaration NbGenes : Reel, i : Entier debut nbGenes ← calculeNbGenes(evenements, taille) pour i ← taille a 1 faire nbGenes ← nbGenes - evenements[i] ecrire(nbGenes) finpour fin Exemple : Parcours descendant Elodie Laine –

H. Richard – L’ajout d’un élément en fin de tableau nécessite de modifier, au plus, deux variables : la valeur après le dernier indice utilisé la taille du tableau Ajout en fin de tableau fonction ajoutEnFin(val : Reel, evenements : TabReels, taille : Entier) : None debut si taille < MAX alors taille ← taille + 1 evenements[taille] ← val finsi fin Exemple : Ajout/Retrait d’élément (1) Elodie Laine –

H. Richard – Le retrait d’un élément en fin de tableau nécessite de modifier, au plus, deux variables : la valeur correspondant au dernier indice utilisé la taille du tableau Retrait en fin de tableau fonction retraitEnFin(evenements : TabReels, taille : Entier) : None debut si taille > 0 alors taille ← taille - 1 finsi fin Exemple : Ajout/Retrait d’élément (2) Elodie Laine –

H. Richard – Pour modifier le tableau à une position pos différente de la dernière utilisée, il faut : modifier la taille du tableau déclarer toutes les valeurs situées entre pos et la fin du tableau éventuellement ajouter la nouvelle valeur à pos Ajout à une position quelconque fonction ajout(val : Reel, pos : Entier, evenements : TabReels, taille : Entier) : None debut si (taille < MAX) ET (pos ≥ 1) ET (pos ≤ taille) alors pour i ← taille a pos faire evenements[i+1] ← evenements[i] finpour evenements[pos] ← val taille ← taille + 1 finsi fin Exemple : Ajout/Retrait d’élément (3) Elodie Laine –

H. Richard – Pour modifier le tableau à une position pos différente de la dernière utilisée, il faut : modifier la taille du tableau déclarer toutes les valeurs situées entre pos et la fin du tableau éventuellement ajouter la nouvelle valeur à pos Retrait à une position quelconque fonction retrait(val : Reel, pos : Entier, evenements : TabReels, taille : Entier) : None Declaration i : Entier debut si (pos ≥ 1) ET (pos < taille) alors pour i ← pos a taille - 1 faire evenements[i] ← evenements[i+1] finpour taille ← taille - 1 finsi fin Exemple : Ajout/Retrait d’élément (4) Elodie Laine –

H. Richard – par indice par valeur par critères Type de recherche C’est le plus simple. On accède directement à la valeur de l’indice souhaité par l’opérateur []. Ex : pour accéder à l’événement d’indice 3 evenements[3] Recherche par indice Exemple : Recherche d’élément (1) Elodie Laine –

H. Richard – On souhaite trouver le dernier indice d’une valeur donnée. Recherche par valeur fonction recherche(val : Reel, evenements : TabReels, taille : Entier) : Entier Declaration i,resultat : Entier debut resultat ← 0 pour i ← 1 a taille faire si evenements[i] = val alors resultat ← i finsi finpour retourner resultat fin Exemple : Recherche d’élément (2) Elodie Laine –

H. Richard – Un tableau trié est un tableau dont les valeurs sont stockées dans l’ordre qui correspond à celui de leur type de données selon la règle suivante : si tab[i] < tab[j] alors i < j. La réciproque est-elle vraie ? Principe Initialement : Exécution d’une fonction de tri Après exécution : Tableaux triés Elodie Laine –

H. Richard – On considère que le tableau est initialement trié (par ex. tableau vide) Chaque fois qu’une valeur doit être ajoutée, on cherche dans le tableau l’indice i d’une valeur immédiatement supérieure Si une telle valeur n’existe pas, on ajoute la nouvelle valeur à la fin du tableau Si elle existe, on ajoute la nouvelle valeur à la position i Principe Tri par insertion (1) Elodie Laine –

H. Richard – fonction ajoutTrie(val : Reel, evenements : TabReels, taille : Entier) : None Declaration pos : Entier debut si taille < MAX alors pos ← taille + 1 tant que (pos > 1) ET (evenements[pos - 1] > val) faire evenements[pos] ← evenements[pos - 1] pos ← pos - 1 fintantque evenements[pos] ← val taille ← taille + 1 finsi fin Tri par insertion (2) Elodie Laine –

H. Richard – Parcours de tableaux triés Insertion/suppression de valeurs dans un tableau trié Recherche dans un tableau trié Algorithmes sur les tableaux triés Elodie Laine –

H. Richard – Dans un cas général, les algorithmes sont les mêmes que pour les tableaux non triés. Dans un cas spécifique, les algorithmes donnés précédemment en exemple sont-ils valides ? Optimisés ? calculeNbGenes calculeNbGenesPerdus affichageEvol Parcours ascendant et descendant Parcours d’un tableau trié (1) Elodie Laine –

H. Richard – On souhaite calculer le nombre total de gènes perdus. Calcul des pertes de gènes fonction calculeNbGenesPerdus (evenements : TabReels, taille : Entier) : Reel Declaration NbGenesPerdus : Reel, i : Entier debut nbGenesPerdus ← 0 i ← 1 tant que (i ≤ taille) ET (evenements[i] < 0) faire nbGenesPerdus ← nbGenesPerdus +evenements[i] i ← i + 1 fintantque retourner nbGenesPerdus fin Parcours d’un tableau trié (2) Elodie Laine –

H. Richard – L’ajout d’une valeur peut se faire : par la fonction du tri par insertion, ou en fin de tableau, suivi de l’exécution d’un algorithme de tri Ajout Dans un cas général, les algorithmes sont les mêmes que pour les tableaux non triés. Retrait Ajout/Retrait dans un tableau trié Elodie Laine –

H. Richard – Aussi simple que pour des tableaux non triés. Par indice Si le critère a un lien avec l’ordre des valeurs, la recherche peut être améliorée. Par critères La propriété de tri est utilisée pour diviser l’espace de recherche par deux après chaque test. Par dichotomie Recherche dans un tableau trié Elodie Laine –

H. Richard – Un tableau est un type complexe de données permettant de représenter plusieurs valeurs dans une même variable. Les valeurs d’un tableau sont spécifiquement désignées par un indice. On accède directement à la valeur de l’indice souhaité en utilisant l’opérateur []. En Python, les types de données assimilables aux tableaux sont les tuples, les listes et les tableaux de la bibliothèque numpy. La complexité d’un algorithme est le nombre d’opérations nécessaires à son exécution. Pour ajouter ou retirer une valeur à un tableau, il est nécessaire de le parcourir. Un tableau trié est un tableau dont les valeurs sont ordonnées selon la règle suivante : si tab[i] < tab[j] alors i < j. Conclusion Elodie Laine –

H. Richard – Elodie Laine –

H. Richard – La propriété de tri est utilisée pour diviser l’espace de recherche par deux après chaque test. Principe 1)On cherche une valeur x dans un tableau de N valeurs triées 2)On compare x à la valeur située à l’indice N/2 3)Tant que x est différent de cette valeur, on recommence la recherche, en se concentrant sur la première ou la seconde moitié du tableau (selon que x est plus petit ou plus grand que la valeur testée) 4)L’algorithme s’arrête quand x a été trouvé ou quand l’espace de recherche n’est plus divisible Déroulement Recherche par dichotomie (1) Elodie Laine –

H. Richard – fonction rechercheDichotomie(val : Reel, E/S evenements : TabReels, taille : Entier) : Entier Declaration min,max,pos,res : Entier debut res ← 0 min ← 0 max ← taille tant que max > min faire pos ← (min + max + 1) div 2 si evenements[pos] < val alors min ← pos sinon si evenements[pos] > val alors max ← pos – 1 sinon res ← pos max ← min – 1 finsi fintantque retourner res fin Recherche par dichotomie (2) Elodie Laine –