Algorithmique Programmation Objet Python



Documents pareils
Les structures de données. Rajae El Ouazzani

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Initiation à la programmation en Python

Recherche dans un tableau

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

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

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Définitions. Numéro à préciser. (Durée : )

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

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

Cours Programmation Système

STAGE IREM 0- Premiers pas en Python

Algorithmique, Structures de données et langage C

1 CRÉER UN TABLEAU. IADE Outils et Méthodes de gestion de l information

4. Groupement d objets

I. Introduction aux fonctions : les fonctions standards

Compte-rendu de projet de Système de gestion de base de données

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Programmation C++ (débutant)/instructions for, while et do...while

Bernard HAMM, Évelyne LAVOISIER

Langage Java. Classe de première SI

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Conventions d écriture et outils de mise au point

Introduction à MATLAB R

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Cours d Algorithmique et de Langage C v 3.0

Java Licence Professionnelle CISII,

Les arbres binaires de recherche

Structures dynamiques Listes chaînées

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Utilisation d objets : String et ArrayList

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Les classes en Python

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Cours 1 : La compilation

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Introduction : présentation de la Business Intelligence

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

CAC: Un algorithme d arc-consistance. configurable, générique et adaptatif.

Web Science. Master 1 IFI. Andrea G. B. Tettamanzi. Université de Nice Sophia Antipolis Département Informatique andrea.tettamanzi@unice.

Programmer en JAVA. par Tama

TP Bases de données réparties

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Algorithmique et Programmation, IMA

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

Mysql. Les requêtes préparées Prepared statements

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Organigramme / Algorigramme Dossier élève 1 SI

Débuter avec Excel. Excel

Cours d algorithmique pour la classe de 2nde

Structure fonctionnelle d un SGBD

Le stockage local de données en HTML5

Arbres binaires de recherche

Optimiser le référencement naturel de son site web

DETERMINER LA LARGEUR DE PAGE D'UN SITE et LES RESOLUTIONS d'ecran

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Cours Informatique Master STEP

Chapitre 2 Devine mon nombre!

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

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

Présentation du langage et premières fonctions

Conception de circuits numériques et architecture des ordinateurs

Application 1- VBA : Test de comportements d'investissements

Plan du cours. Historique du langage Nouveautés de Java 7

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

Introduction à JDBC. Accès aux bases de données en Java

# 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 I. Algorithmique I p.1/??

Chapitre 1 : Introduction aux bases de données

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

Modes opératoires pour le chiffrement symétrique

Génie Logiciel avec Ada. 4 février 2013

GPA770 Microélectronique appliquée Exercices série A

Algorithmes récursifs

Présentation du PL/SQL

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Programme d Accès Communautaire / Atelier 4 Initiation à Microsoft Excel PLAN DE COURS 3 MICROSOFT EXCEL 4 LANCER EXCEL 4

Licence Sciences et Technologies Examen janvier 2010


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

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

MIS 102 Initiation à l Informatique

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

1 Recherche en table par balayage

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation


Architecture des ordinateurs. Environnement Windows : sauvegarde

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Traitement de texte : Quelques rappels de quelques notions de base

TP 1. Prise en main du langage Python

Comment créer des rapports de test professionnels sous LabVIEW? NIDays 2002

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Support de TD ArcGIS Introduction à l automatisation et au développement avec ArcGIS 10.1 JEAN-MARC GILLIOT e année ingénieur

Partie publique / Partie privée. Site statique site dynamique. Base de données.

Généralités sur le Langage Java et éléments syntaxiques.

Transcription:

Algorithmique Programmation Objet Python Andrea G. B. Tettamanzi Université de Nice Sophia Antipolis Département Informatique andrea.tettamanzi@unice.fr Andrea G. B. Tettamanzi, 2015 1

CM - Séance 7 Listes et itérateurs Andrea G. B. Tettamanzi, 2015 2

Plan Indirection et pointeurs Listes simplement chaînées Listes doublement chaînées Listes en Python Itérateurs Andrea G. B. Tettamanzi, 2015 3

Introduction Les tableaux sont très pratiques, mais ils ont un gros défaut Insertion et élimination d'éléments sont des opérations O(n)! Il nous faut une structure de données pour laquelle ces opérations soient plus performantes On peut obtenir une telle structure en utilisant l'indirection Andrea G. B. Tettamanzi, 2015 4

Indirection L'idée de l'indirection est d'utiliser la valeur d'une variable pour indiquer la position d'une autre variable (dans un tableau ou en mémoire) Nous avons déjà rencontré cette idée avec les variables index : i 3 T 2 3 5 7 11 Andrea G. B. Tettamanzi, 2015 5

Pointeurs Un pointeur est un type de données dont la valeur fait référence (référence) directement à (pointe vers) une autre valeur. Un pointeur référence une valeur située quelque part d autre en mémoire, habituellement en utilisant son adresse La mémoire est un grand tableau, donc un pointeur est une sorte de variable index de la mémoire Obtenir la valeur vers laquelle un pointeur pointe est appelé «déréférencer le pointeur». Un pointeur qui ne pointe vers aucune valeur aura la valeur nil Andrea G. B. Tettamanzi, 2015 6

Liste chaînée Une liste chaînée désigne une structure de données représentant une collection ordonnée et de taille arbitraire d'éléments. L'accès aux éléments d'une liste se fait de manière séquentielle chaque élément permet l'accès au suivant (contrairement au cas du tableau dans lequel l'accès se fait de manière absolue, par adressage direct de chaque cellule dudit tableau). Un élément contient un accès vers une donnée Le principe de la liste chaînée est que chaque élément possède, en plus de la donnée, des pointeurs vers les éléments qui lui sont logiquement adjacents dans la liste. Liste simplement chaînée : un seul pointeur vers l'élément suivant Liste doublement chaînée : pointeurs vers précédent et suivant Andrea G. B. Tettamanzi, 2015 7

Liste (simplement) chaînée lst 2 3 7 5 Andrea G. B. Tettamanzi, 2015 8

Liste chaînée Étant donnée une liste L L.premier désigne le premier élément de la liste nil désigne l absence d élément Liste simplement chaînée : elt.donnée désigne la donnée associée à l élément elt elt.suivant désigne l'élément suivant de la liste Liste doublement chaînée : elt.précédent désigne l'élément précédent de la liste Andrea G. B. Tettamanzi, 2015 9

Remarque historique La représentation de listes chaînées à l aide du diagramme avec une flèche vers le suivant a été proposé par Newell and Shaw dans l article "Programming the Logic Theory Machine" Proc. WJCC, February 1957. Newell et Simon ont obtenu l ACM Turing Award en 1975 pour avoir "made basic contributions to artificial intelligence, the psychology of human cognition, and list processing". Andrea G. B. Tettamanzi, 2015 10

Liste : opérations Trois opérations principales Parcours de la liste Ajout d un élément Suppression d un élément A partir de là, d autres opérations vont être obtenues : recherche d une donnée, Remplacement, concaténation de liste, fusion de listes, etc. Andrea G. B. Tettamanzi, 2015 11

Liste vs. Tableau Le principal avantage des listes sur les tableaux L ordre des éléments de la liste peut être différent de leur ordre en mémoire. Les listes chaînées vont permettre l ajout ou la suppression d un élément en n importe quel endroit de la liste en temps constant. En revanche, certaines opérations peuvent devenir coûteuses, comme la recherche d un élément contenant une certaine donnée. Pas de recherche dichotomique dans une liste : on ne peut pas atteindre le ième élément sans parcourir! Andrea G. B. Tettamanzi, 2015 12

Liste : parcours entier nombreelements(l) compte 0; elt L.premier tant que elt nil compte compte + 1 elt elt.suivant renvoyer compte Andrea G. B. Tettamanzi, 2015 13

Liste : ajout d'un élément On ajoute un élément elt au début de la liste. On suppose qu il n est pas déjà dans la liste (sinon que se passet-il?) Principes : Le premier de la liste deviendra elt Mais où est le premier? Il devient le suivant de elt Attention à l ordre de mise à jour! On ne doit pas perdre le premier. Donc Le suivant de elt est mis à jour Puis le premier de la liste Andrea G. B. Tettamanzi, 2015 14

Liste : ajout d'un élément ajouteaudebut(elt, L) # elt n'est pas dans L elt.suivant L.premier L.premier elt Andrea G. B. Tettamanzi, 2015 15

Liste : insertion d'un élément lst 2 3 p elt 5 11 7 Andrea G. B. Tettamanzi, 2015 16

Liste : insertion d'un élément insèreaprès(elt, p) # elt n'est pas dans L # p est dans L elt.suivant p.suivant p.suivant elt Andrea G. B. Tettamanzi, 2015 17

Liste : suppression d'un élément lst 2 3 p elt 5 11 7 Andrea G. B. Tettamanzi, 2015 18

Liste : suppression d'un élément supprime(elt, p, L) # elt est dans L, # p est son précédent si elt = L.premier L.premier elt.suivant sinon si elt = p.suivant p.suivant elt.suivant Andrea G. B. Tettamanzi, 2015 19

Liste doublement chaînée lst 2 3 7 5 Andrea G. B. Tettamanzi, 2015 20

Liste doublement chaînée Les opérations principales changes pour prendre en compte le fait que chaque élément pointe au précédent ainsi qu'au suivant Parcours On peut parcourir la liste en avant et en arrière Insertion et suppression Il faut modifier aussi les pointeurs au précédent Andrea G. B. Tettamanzi, 2015 21

Liste double : ajout d'un élément ajouteaudebut(elt, L) # elt n'est pas dans L elt.suivant L.premier Si L.premier nil L.premier.précédent elt elt.précédent nil L.premier elt Andrea G. B. Tettamanzi, 2015 22

Liste double : insertion d'un élément insèreaprès(elt, p) # elt n'est pas dans L # p est dans L elt.suivant p.suivant elt.précédent p si p.suivant nil p.suivant.précédent elt p.suivant elt Andrea G. B. Tettamanzi, 2015 23

Liste double : suppression d'un élément supprime(elt, L) # elt est dans L s elt.suivant; p elt.précédent si p = nil L.premier s sinon p.suivant s si s = nil L.dernier p sinon s.précédent p Andrea G. B. Tettamanzi, 2015 24

Listes simplement chaînées en Python Ce que Python appelle «liste» c'est en effet un tableau! Comment est-ce qu'on peut réaliser des listes chaînées en Python, alors? Il y a deux manières possibles En utilisant les tuples et un style de programmation fonctionnel En utilisant les objets et un style de programmation orienté objet Andrea G. B. Tettamanzi, 2015 25

Listes en Python : style fonctionnel La brique de base pour construire une liste est une tuple contenant deux éléments : La tête de liste (ce qu'on appelle CAR en Lisp) La queue de liste (ce qu'on appelle CDR en Lisp) La liste vide est représentée par None. def mklist(*args): result = None for element in reversed(args): result = (element, result) return result mklist = lambda *args: reduce(lambda lst, el: cons(el, lst), reversed(args), None) Andrea G. B. Tettamanzi, 2015 26

Listes en Python : style fonctionnel cons = lambda el, lst: (el, lst) car = lambda lst: lst[0] if lst else lst cdr = lambda lst: lst[1] if lst else lst nth = lambda n, lst: nth(n-1, cdr(lst)) if n > 0 else car(lst) length = lambda lst, count=0: length(cdr(lst), count+1) if lst else count Andrea G. B. Tettamanzi, 2015 27

Listes en Python : style orienté objet class ListNode: def init (self, cargo=none, next=none): self.car = cargo self.cdr = next def str (self): return str(self.car) +, + str(self.cdr) Andrea G. B. Tettamanzi, 2015 28

Itérateur Un itérateur est un objet qui permet de parcourir tous les éléments contenus dans un autre objet, le plus souvent un conteneur (liste, arbre, etc). Un synonyme d'itérateur est curseur, notamment dans le contexte des bases de données. Un itérateur dispose essentiellement de deux primitives : accéder à l'élément en cours dans le conteneur, se déplacer vers l'élément suivant. Il faut aussi pouvoir créer un itérateur sur le premier élément ; ainsi que déterminer à tout moment si l'itérateur a épuisé la totalité des éléments du conteneur. Diverses implémentations peuvent également offrir des comportements supplémentaires. Andrea G. B. Tettamanzi, 2015 29

Le but d'un itérateur Itérateur permettre à son utilisateur de parcourir le conteneur, c'est-àdire d'accéder séquentiellement à tous ses éléments pour leur appliquer un traitement, isoler l'utilisateur de la structure interne du conteneur, potentiellement complexe. Avantage : le conteneur peut stocker les éléments de la façon qu'il veut, tout en permettant à l'utilisateur de le traiter comme une simple liste d éléments. Le plus souvent l'itérateur est conçu en même temps que la classe-conteneur qu'il devra parcourir, et ce sera le conteneur lui-même qui créera et distribuera les itérateurs pour accéder à ses éléments Andrea G. B. Tettamanzi, 2015 30

Itérateur : avantages On utilise souvent un index dans une simple boucle, pour accéder séquentiellement à tous les éléments, notamment d'un tableau; l'utilisation des itérateurs a certains avantages: Un simple compteur dans une boucle n'est pas adapté à toutes les structures de données, en particulier celles qui n'ont pas de méthode d'accès à un élément quelconque celles dont l'accès à un élément quelconque est très lent (c'est le cas des listes chaînées et des arbres). Andrea G. B. Tettamanzi, 2015 31

Itérateur : avantages Les itérateurs fournissent un moyen cohérent d'itérer sur toutes sortes de structures de données, rendant ainsi le code client plus lisible, réutilisable, et robuste même en cas de changement dans l'organisation de la structure de données. Un itérateur peut implanter des restrictions additionnelles sur l'accès aux éléments, par exemple pour empêcher qu'un élément soit «sauté», ou qu'un même élément soit visité deux fois. Andrea G. B. Tettamanzi, 2015 32

Itérateur Un itérateur peut dans certains cas permettre que le conteneur soit modifié, sans être invalidé pour autant. Par exemple, après qu'un itérateur s'est positionné derrière le premier élément, il est possible d'insérer d'autres éléments au début du conteneur avec des résultats prévisibles. Avec un index on aurait plus de problèmes, parce que la valeur de l'index devrait elle aussi être modifiée en conséquence. Important : il est indispensable de bien consulter la documentation d'un itérateur pour savoir dans quels cas il est invalidé ou non. Andrea G. B. Tettamanzi, 2015 33

Itérateur Cela permet de faire des algorithmes sans connaître la structure de données sous-jacente. On recherche un plus court chemin dans un graphe : On ne sait pas comment le graphe est représenté. Cela ne nous empêche pas de faire un algorithme efficace Andrea G. B. Tettamanzi, 2015 34

Itérateurs en Python Objets itérables Listes, chaînes de caractères, tuples, dictionnaires et fichiers Objet des classes ayant une méthode iter () ou getitem(). Quand la fonction primitive iter() est appliquée à un objet itérable, elle renvoie un itérateur L'instruction for applique iter() implicitement, en coulisse Un itérateur est un objet qui expose la méthode next () La fonction primitive next() appliquée à un itérateur renvoie le prochain élément ou lance l'exception StopIteration si l'itérateur est épuisé. Andrea G. B. Tettamanzi, 2015 35

Générateurs Les générateurs sont des fonctions spéciales qui renvoient un itérateur Elles sont écrites comme des fonctions normales, sauf qu'elles utilisent l'instruction yield pour renvoyer le prochain élément Un générateur simple peut être codé comme expression, en utilisant la syntaxe : expression for variables in objet_itérable Exemples : def reverse(data): for index in range(len(data)-1, -1, -1): yield data[index] sum(i*i for i in range(10)) Andrea G. B. Tettamanzi, 2015 36

Merci de votre attention Andrea G. B. Tettamanzi, 2015 37