Introduction Tableaux / Vecteurs Listes chaînées Un principe général Quelques algorithmes de tri À faire pour lundi prochain. Tableaux VS Listes



Documents pareils
1 Recherche en table par balayage

# 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>

Architecture des Systèmes d Information Architecture des Systèmes d Information

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

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

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

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Les deux points les plus proches

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

ARBRES BINAIRES DE RECHERCHE

Cours 1 : La compilation

Algorithmique I. Algorithmique I p.1/??

Cours d initiation à la programmation en C++ Johann Cuenin

Le langage C. Séance n 4

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

Algorithmique, Structures de données et langage C

Représentation d un entier en base b

Logiciel Libre Cours 3 Fondements: Génie Logiciel

PROJET ALGORITHMIQUE ET PROGRAMMATION II

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

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

STAGE IREM 0- Premiers pas en Python

Quelques éléments de compilation en C et makefiles

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

TP 1. Prise en main du langage Python

TP3 : Manipulation et implantation de systèmes de fichiers 1

Quelques algorithmes simples dont l analyse n est pas si simple

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

TP, première séquence d exercices.

Classes et Objets en Ocaml.

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)

Mise en œuvre des serveurs d application

TP1 : Initiation à Java et Eclipse

Traitement des données avec Microsoft EXCEL 2010

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

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

4. Les structures de données statiques

Exo7. Matrice d une application linéaire. Corrections d Arnaud Bodin.

Structure fonctionnelle d un SGBD

Traduction des Langages : Le Compilateur Micro Java

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

Travaux Dirigés n 1 : chaînes de caractères

MIS 102 Initiation à l Informatique

Machines virtuelles Cours 1 : Introduction

Initiation à la programmation en Python

Microsoft Excel 2000 Fonctions avancées

Chapitre 1 I:\ Soyez courageux!

Chap III : Les tableaux

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

Chapitre 7. Récurrences

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

Algorithmique et Programmation

Algorithmes récursifs

EXCEL TUTORIEL 2012/2013

Générer du code à partir d une description de haut niveau

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Resolution limit in community detection

Chapitre 5 : Flot maximal dans un graphe

Représentation des Nombres

Cours 1 : Qu est-ce que la programmation?

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

Instructions d installation de IBM SPSS Statistics pour Windows (mono-utilisateur)

Approche Contract First

La Clé informatique. Formation Excel XP Aide-mémoire

Utiliser un tableau de données

Quelques Algorithmes simples

M06/5/COMSC/SP1/FRE/TZ0/XX INFORMATIQUE NIVEAU MOYEN ÉPREUVE 1. Mardi 2 mai 2006 (après-midi) 1 heure 30 minutes INSTRUCTIONS DESTINÉES AUX CANDIDATS

Définition des Webservices Ordre de paiement par . Version 1.0

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files


Fonctions de deux variables. Mai 2011

Initiation. àl algorithmique et à la programmation. en C

UE C avancé cours 1: introduction et révisions

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

Recherche dans un tableau

Théorie et codage de l information

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

Bases de données documentaires et distribuées Cours NFE04

Les structures. Chapitre 3

Création d une SIGNATURE ANIMÉE avec PHOTOFILTRE 7

Bases de programmation. Cours 5. Structurer les données

EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version /11/05

Les structures de données. Rajae El Ouazzani

Introduction à MATLAB R

Chapitre VI- La validation de la composition.

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

OPTION SCIENCES BELLE-ISLE-EN-TERRE

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

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Excel 2007 Niveau 3 Page 1

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

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

Les arbres binaires de recherche

Transcription:

Tableaux VS Listes

Tableaux VS Listes Petit chapitre.

Plan Introduction Tableaux / Vecteurs Définition abstraite Qu a-t-on fait avec des vecteurs? Que peut-on faire avec des vecteurs? Listes chaînées Définition abstraite Qu a-t-on fait avec des listes? Que peut-on faire avec des listes? Un principe général Quelques algorithmes de tri Tri par sélection Tri rapide (tri par pivot) Tri par fusion Tri à bulles Tri par insertion

Pourquoi deux structures en Caml? Listes : Insertion possible d un élément. Accès au k e élément en O(k). Tableaux : Modification de la longueur impossible. Accès au k e élément en O(1). Alors que les listes de Python permettent la modification de taille et l accès aux éléments à coût constant!

Pourquoi deux structures en Caml? Listes : Insertion possible d un élément. Accès au k e élément en O(k). Tableaux : Modification de la longueur impossible. Accès au k e élément en O(1). Alors que les listes de Python permettent la modification de taille et l accès aux éléments à coût constant! Alors quoi? C est Caml qui est tout nul?

Pourquoi deux structures en Caml? Les listes et les tableaux sont des structures de bas niveau qui sont déjà impémentées dans les langages de l industrie (C, C++, Java...) et qu on peut implémenter facilement dans tout langage.

Pourquoi deux structures en Caml? Les listes et les tableaux sont des structures de bas niveau qui sont déjà impémentées dans les langages de l industrie (C, C++, Java...) et qu on peut implémenter facilement dans tout langage. Les listes de Python correspondent à une autre structure de données : les tableaux redimensionnables qui est moins élémentaire.

Pourquoi deux structures en Caml? Les listes et les tableaux sont des structures de bas niveau qui sont déjà impémentées dans les langages de l industrie (C, C++, Java...) et qu on peut implémenter facilement dans tout langage. Les listes de Python correspondent à une autre structure de données : les tableaux redimensionnables qui est moins élémentaire.

Vouloir le beurre et l argent du beurre : pas raisonnable. Je remets le dessin d avant-hier pour le rentabiliser.

Vouloir le beurre et l argent du beurre : pas raisonnable. 1. Lorsqu on définit un tableau, on réserve un certain nombre de cases mémoires adjacentes dont l emplacement physique est connu. On connait donc précisément l adresse mémoire de chaque élément mais les cases mémoires adjacentes sont peut-être occupées pour autre chose : on ne peut pas les utiliser. 2. Après avoir défini une liste, on peut à tout moment rajouter un élément qui devient l élément de tête de la liste, on indique alors pas un pointeur où chercher la suite de la liste... mais ce n est plus nécessairement dans des cases mémoires contigües. Il faut suivre successivement les k 1 premiers pointeurs pour accéder au k e élément.

Mais alors comment il fait Python? On l a dit, les listes de Python correspondent en fait à une troisième structure de données : les tableaux redimensionnables.

Mais alors comment il fait Python? On l a dit, les listes de Python correspondent en fait à une troisième structure de données : les tableaux redimensionnables. En fait il y a une petite triche : l accès au n e élément est seulement presque toujours en O(1).

Un extrait du programme officiel de l option Sauf que voilà :

Un extrait du programme officiel de l option Sauf que voilà : J ai pas le droit d en parler...

Un extrait du programme officiel de l option Sauf que voilà : J ai pas le droit d en parler... Bon on en dira quand même quelques mots, mais à la fin...

Introduction Plan Tableaux / Vecteurs Définition abstraite Qu a-t-on fait avec des vecteurs? Que peut-on faire avec des vecteurs? Listes chaînées Définition abstraite Qu a-t-on fait avec des listes? Que peut-on faire avec des listes? Un principe général Quelques algorithmes de tri Tri par sélection Tri rapide (tri par pivot) Tri par fusion Tri à bulles Tri par insertion

Le type a vect Pour tout type a, on définit le type a vect des tableaux (en Caml on dit plutôt vecteurs) d éléments de type a. Spécificités : 1. Un vecteur T a une longueur donnée n qui n est pas modifiable. 2. Les n éléments de T sont du même type a (cela correspond donc effectivement aux vecteurs vus pour l instant en maths). 3. L accès et la modification du k e élément de T est en O(1). On a vu la syntaxe des opérations permettant de manipuler des tableaux dans le TP2 (cf aide-mémoire de Michel Quercia).

Introduction Plan Tableaux / Vecteurs Définition abstraite Qu a-t-on fait avec des vecteurs? Que peut-on faire avec des vecteurs? Listes chaînées Définition abstraite Qu a-t-on fait avec des listes? Que peut-on faire avec des listes? Un principe général Quelques algorithmes de tri Tri par sélection Tri rapide (tri par pivot) Tri par fusion Tri à bulles Tri par insertion

Correction du TP2! (Dernier exo.) Objectif : trier un vecteur T de longueur n. Le tri par sélection consiste à : Déterminer l élément maximal parmi T.(0),..., T.(n-1) ; Permuter cet élément avec T.(n-1) ; Recommencer sur T.(0),..., T.(n-2) ; etc. (C est un tri en place : on ne crée pas un tableau trieé à partir du tableau de départ, on trie directement le tableau de départ.) On l implémente!

Introduction Plan Tableaux / Vecteurs Définition abstraite Qu a-t-on fait avec des vecteurs? Que peut-on faire avec des vecteurs? Listes chaînées Définition abstraite Qu a-t-on fait avec des listes? Que peut-on faire avec des listes? Un principe général Quelques algorithmes de tri Tri par sélection Tri rapide (tri par pivot) Tri par fusion Tri à bulles Tri par insertion

Exo! Écrire une fonction d arguments deux entiers m et n et de résultat un vecteur de longueur n dont les éléments sont des entiers tirés au hasard entre 0 et m 1.

Exo! 1. Que fait concat vect? 2. Écrire my concat vect.

Exo! Écrire une fonction d argument un entier n et qui calcule F n, de complexité linéaire ou logarithmique.

Introduction Plan Tableaux / Vecteurs Définition abstraite Qu a-t-on fait avec des vecteurs? Que peut-on faire avec des vecteurs? Listes chaînées Définition abstraite Qu a-t-on fait avec des listes? Que peut-on faire avec des listes? Un principe général Quelques algorithmes de tri Tri par sélection Tri rapide (tri par pivot) Tri par fusion Tri à bulles Tri par insertion

Le type a list Pour tout type a, on définit le type a list des listes d éléments de type a de façon récursive : une a liste L est 1. ou bien la liste vide [] 2. ou bien un couple formé d un élément de type a (la tête de L) et d un pointeur vers une a liste (la queue de L). On a vu la syntaxe des opérations permettant de manipuler des listes dans le TP3 (cf aide-mémoire de Michel Quercia).

Introduction Plan Tableaux / Vecteurs Définition abstraite Qu a-t-on fait avec des vecteurs? Que peut-on faire avec des vecteurs? Listes chaînées Définition abstraite Qu a-t-on fait avec des listes? Que peut-on faire avec des listes? Un principe général Quelques algorithmes de tri Tri par sélection Tri rapide (tri par pivot) Tri par fusion Tri à bulles Tri par insertion

Correction du TP3! (Avant-dernier exo.) Écrire une fonction MAX : a list a qui prend en argument une liste et donne comme résultat le plus grand des éléments de cette liste.

Correction du TP3! (Dernier exo.) Le tri rapide (tri par pivot) consiste, pour trier une liste L, à : Sélectionner l élément de tête de la liste p ; Parcourir la queue de la liste et produire deux sous-listes L1 et L2 formées respectivements des éléments de L plus petits que p et des éléments de L plus grands que p ; Trier récursivement L1 et L2 (ci-dessous on note encore L1 et L2 les listes triées) ; Retourner la liste L1@(p : :L2). Les cas d une liste vide ou réduite à un seul élément étant des cas d arrêt. On l implémente!

Introduction Plan Tableaux / Vecteurs Définition abstraite Qu a-t-on fait avec des vecteurs? Que peut-on faire avec des vecteurs? Listes chaînées Définition abstraite Qu a-t-on fait avec des listes? Que peut-on faire avec des listes? Un principe général Quelques algorithmes de tri Tri par sélection Tri rapide (tri par pivot) Tri par fusion Tri à bulles Tri par insertion

Exo! Écrire une fonction nth elem : a list int a qui prend en argument une liste L et un entier n et donne comme résultat le n e élément de cette liste. Le comportement de nth elem n est pas spécifié si on a n>list length L. Si de tels arguments provoquent une erreur, tant mieux.

Exo! 1. Que fait @? 2. Écrire my concat list. 3. Quelle complexité? Pourquoi est-ce nécessairement couteux?

Exo! 1. Que fait rev? 2. Écrire my rev en utilisant @. Quelle complexité? 3. Écrire my efficient rev de complexité linéaire.

Implémentation des algorithmes 1. De par leurs spécificités, les tableaux sont naturellement adaptés à des traitements. 2. De par leurs spécificités, les listes sont naturellement adaptées à des traitements.

Implémentation des algorithmes 1. De par leurs spécificités, les tableaux sont naturellement adaptés à des traitements itératifs. 2. De par leurs spécificités, les listes sont naturellement adaptées à des traitements récursifs.

Implémentation des algorithmes Illustration du principe général : 1. Essayer d implémenter l algorithme de tri par sélection sur les listes. C est plus dur. 2. Essayer d implémenter l algorithme de tri rapide (tri par pivot) sur les vecteurs. C est plus dur.

Et les tableaux redimensionnables? On en dit quand même quelques mots (au tableau).

Introduction Plan Tableaux / Vecteurs Définition abstraite Qu a-t-on fait avec des vecteurs? Que peut-on faire avec des vecteurs? Listes chaînées Définition abstraite Qu a-t-on fait avec des listes? Que peut-on faire avec des listes? Un principe général Quelques algorithmes de tri Tri par sélection Tri rapide (tri par pivot) Tri par fusion Tri à bulles Tri par insertion

L algorithme et une implémentation On vient de revoir tout ça.

Complexité dans le pire des cas Déjà vu dans le chapitre précédent. C est quoi?

Introduction Plan Tableaux / Vecteurs Définition abstraite Qu a-t-on fait avec des vecteurs? Que peut-on faire avec des vecteurs? Listes chaînées Définition abstraite Qu a-t-on fait avec des listes? Que peut-on faire avec des listes? Un principe général Quelques algorithmes de tri Tri par sélection Tri rapide (tri par pivot) Tri par fusion Tri à bulles Tri par insertion

L algorithme et une implémentation On vient de revoir tout ça.

Complexité dans le pire des cas Au tableau!

Complexité dans le pire des cas Situation un peu désagréable : parmi les pires cas, il y a le cas où

Complexité dans le pire des cas Situation un peu désagréable : parmi les pires cas, il y a le cas où la liste est déjà triée.

Introduction Plan Tableaux / Vecteurs Définition abstraite Qu a-t-on fait avec des vecteurs? Que peut-on faire avec des vecteurs? Listes chaînées Définition abstraite Qu a-t-on fait avec des listes? Que peut-on faire avec des listes? Un principe général Quelques algorithmes de tri Tri par sélection Tri rapide (tri par pivot) Tri par fusion Tri à bulles Tri par insertion

L algorithme Le tri par fusion consiste, pour trier une liste (ou un vecteur) à : Diviser la liste (/ le vecteur) en deux moitiés ; Trier récursivement chacune des deux moitiés ; Fusionner les deux moitiés triées pour reconstituer la liste (/ le vecteur) triée.

Exemple Au tableau!

Implémentation Au fait, plutôt liste ou plutôt vecteur?

Implémentation Au fait, plutôt liste ou plutôt vecteur? L algorithme est

Implémentation Au fait, plutôt liste ou plutôt vecteur? L algorithme est récursif donc

Implémentation Au fait, plutôt liste ou plutôt vecteur? L algorithme est récursif donc plutôt liste (mais on peut faire vecteur).

Implémentation DM05!

Complexité dans le pire des cas Au tableau!

Introduction Plan Tableaux / Vecteurs Définition abstraite Qu a-t-on fait avec des vecteurs? Que peut-on faire avec des vecteurs? Listes chaînées Définition abstraite Qu a-t-on fait avec des listes? Que peut-on faire avec des listes? Un principe général Quelques algorithmes de tri Tri par sélection Tri rapide (tri par pivot) Tri par fusion Tri à bulles Tri par insertion

L algorithme Le tri à bulles consiste, pour trier une liste (ou un vecteur) à : Parcourir la liste (/ le vecteur) en permutant deux éléments consécutif à chaque fois qu ils ne sont pas dans le bon ordre ; Recommencer sur les n-1 premiers éléments de la liste (/ du vecteur) ; etc.

Exemple Au tableau!

Implémentation Au fait, plutôt liste ou plutôt vecteur?

Implémentation Au fait, plutôt liste ou plutôt vecteur? L algorithme est

Implémentation Au fait, plutôt liste ou plutôt vecteur? L algorithme est a priori itératif donc

Implémentation Au fait, plutôt liste ou plutôt vecteur? L algorithme est a priori itératif donc plutôt vecteur. On obtient néanmoins facilement une variante sur les listes car

Implémentation Au fait, plutôt liste ou plutôt vecteur? L algorithme est a priori itératif donc plutôt vecteur. On obtient néanmoins facilement une variante sur les listes car on ne permute que des éléments contigüs. h 1 :: h 2 :: t h 2 :: h 1 :: t.

Implémentation DM05!

Complexité dans le pire des cas Au tableau!

Introduction Plan Tableaux / Vecteurs Définition abstraite Qu a-t-on fait avec des vecteurs? Que peut-on faire avec des vecteurs? Listes chaînées Définition abstraite Qu a-t-on fait avec des listes? Que peut-on faire avec des listes? Un principe général Quelques algorithmes de tri Tri par sélection Tri rapide (tri par pivot) Tri par fusion Tri à bulles Tri par insertion

L algorithme Le tri par insertion consiste, pour trier une liste (ou un vecteur) à parcourir les éléments liste (/ le vecteur) en insérant successivement chaque élément à sa place dans la liste déjà triée des éléments précédents (initialement vide).

Exemple Au tableau!

Implémentation Au fait, plutôt liste ou plutôt vecteur?

Implémentation Au fait, plutôt liste ou plutôt vecteur? Chaque structure a des avantages et des inconvénients vis-à-vis de cette méthode.

Implémentation DM05!

Complexité dans le pire des cas Au tableau!

À faire pour lundi prochain DM05!