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!