53
Chapitre 1: Listes Christophe Morvan Universit´ e Paris-est, Marne-la-Vall´ ee 8 septembre 2015 Christophe Morvan Listes 8 septembre 2015 1 / 27

Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Chapitre 1: Listes

Christophe Morvan

Universite Paris-est, Marne-la-Vallee

8 septembre 2015

Christophe Morvan Listes 8 septembre 2015 1 / 27

Page 2: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Plan

1 Exemples

2 Definition – Interface

3 Implementations

4 Algorithmes classiques

5 Utilisation (Exemples)

Christophe Morvan Listes 8 septembre 2015 2 / 27

Page 3: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Preambule

• La plupart des chapitres reprendront une structure similaire au planindique precedemment.

• Nous utiliserons une syntaxe semblable a celle de Java pour presenterles exemples ou les signatures de fonctions. Neanmoins, le contenu dece cours n’est pas propre a Java.

• Les types generiques seront beaucoup utilises.

Christophe Morvan Listes 8 septembre 2015 3 / 27

Page 4: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Exemples

Progression

1 Exemples

2 Definition – Interface

3 Implementations

4 Algorithmes classiques

5 Utilisation (Exemples)

Christophe Morvan Listes 8 septembre 2015 4 / 27

Page 5: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Exemples

Premier exemple

Types de base

• Caracteres

• Entier (differentes tailles)

• Flottants

• Autres...

Tableau

La structure la plus simple pour memorier des collections est constituee dutableau, une serie d’enregistrements contigus en memoire.

Christophe Morvan Listes 8 septembre 2015 5 / 27

Page 6: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Exemples

Premier exemple

Types de base

• Caracteres

• Entier (differentes tailles)

• Flottants

• Autres...

Tableau

La structure la plus simple pour memorier des collections est constituee dutableau, une serie d’enregistrements contigus en memoire.

Christophe Morvan Listes 8 septembre 2015 5 / 27

Page 7: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Exemples

Problemes des tableaux

Problemes des tableaux

• Agrandir/reduire

• Decalage

• Insertion

Solution : la liste

La liste est une structure de donnee permettant de stocker des collectiond’objets (en general de meme type).

Christophe Morvan Listes 8 septembre 2015 6 / 27

Page 8: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Exemples

Problemes des tableaux

Problemes des tableaux

• Agrandir/reduire

• Decalage

• Insertion

Solution : la liste

La liste est une structure de donnee permettant de stocker des collectiond’objets (en general de meme type).

Christophe Morvan Listes 8 septembre 2015 6 / 27

Page 9: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Exemples

Problemes des tableaux

Problemes des tableaux

• Agrandir/reduire

• Decalage

• Insertion

Solution : la liste

La liste est une structure de donnee permettant de stocker des collectiond’objets (en general de meme type).

Christophe Morvan Listes 8 septembre 2015 6 / 27

Page 10: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Exemples

Problemes des tableaux

Problemes des tableaux

• Agrandir/reduire

• Decalage

• Insertion

Solution : la liste

La liste est une structure de donnee permettant de stocker des collectiond’objets (en general de meme type).

Christophe Morvan Listes 8 septembre 2015 6 / 27

Page 11: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

Progression

1 Exemples

2 Definition – Interface

3 Implementations

4 Algorithmes classiques

5 Utilisation (Exemples)

Christophe Morvan Listes 8 septembre 2015 7 / 27

Page 12: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

Definitions

Soit T un type quelconque.

Definition 1 (Recursive)

Une liste de T est, soit la liste vide, soit composee d’une tete de liste detype T avec une queue de liste, de type liste de T.

Definition 2 (sequentielle)

Une liste de T est une suite d’elements de type T, ainsi qu’un pointeur versun element distingue, l’element courant.

Christophe Morvan Listes 8 septembre 2015 8 / 27

Page 13: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

Definitions

Soit T un type quelconque.

Definition 1 (Recursive)

Une liste de T est, soit la liste vide, soit composee d’une tete de liste detype T avec une queue de liste, de type liste de T.

Definition 2 (sequentielle)

Une liste de T est une suite d’elements de type T, ainsi qu’un pointeur versun element distingue, l’element courant.

Christophe Morvan Listes 8 septembre 2015 8 / 27

Page 14: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

Interface recursive

Interface recursive – ListR<T>

• static nil : la liste vide

• static ListR<T> cons (T head , ListR<T> tail) : construitla liste avec head comme tete de liste et tail comme queue de liste.

• boolean isEmpty() : fournit true lorsque la liste courante est vide

• T car() : fournit comme resultat la tete de liste de la liste courante.

• ListR<T> cdr () : fournit comme resultat la queue de liste de laliste courante.

Exemple

ListR<Integer> l 1=ListR.nil(), l 2=ListR.cons(59, l 1);

l 2 = ListR.cons(32, l 2); l 1 = l 2.cdr();

int val = 17 + l 2.car());

Christophe Morvan Listes 8 septembre 2015 9 / 27

Page 15: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

Interface sequentielle

Interface Sequentielle – ListS<T>

• Constructeur classique.

• boolean isEmpty() : fournit true lorsque la liste courante est vide

• void add(T elem) : ajoute elem apres l’element courant

• T current() : fournit l’element courant

• boolean hasNext() / boolean hasPred() : fournit truelorsque l’element courant possede un successeur/predecesseur

• void next() / void pred() : deplace l’element courant sur sonsuccesseur/predecesseur

• void remove() : supprime l’element courant, le nouvel elementcourant est son predecesseur, a defaut son successeur.

• void onHead() / void onTail() : l’element courant devient latete/queue de la liste.

Christophe Morvan Listes 8 septembre 2015 10 / 27

Page 16: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

Exemple

Exemples sequentiels

ListeS<Integer> l 1=new ListeS<Integer>();

l 1.add(59); l 1.add(32);

l 1.pred(); l 1.remove();

System.out.println(l 1.current());

Affichage ?

32

Christophe Morvan Listes 8 septembre 2015 11 / 27

Page 17: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

Exemple

Exemples sequentiels

ListeS<Integer> l 1=new ListeS<Integer>();

l 1.add(59); l 1.add(32);

l 1.pred(); l 1.remove();

System.out.println(l 1.current());

Affichage ? 32

Christophe Morvan Listes 8 septembre 2015 11 / 27

Page 18: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

Variantes classiques

Pile (Stack) – LIFO

Les piles des cas particuliers de listes avec des acces restreints. Ajout etretrait d’element exclusivement en tete de liste. En general pas denavigation dans la pile.LIFO : Last In Fist Out

File (Queue) – FIFO

Les files sont des cas particuliers de listes avec des acces restreints. Lesinsertions sont faites en tete de liste et les retraits sont faits en queue deliste. En general pas de navigation dans la file.FIFO : First In First Out

Christophe Morvan Listes 8 septembre 2015 12 / 27

Page 19: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

Variantes classiques

Pile (Stack) – LIFO

Les piles des cas particuliers de listes avec des acces restreints. Ajout etretrait d’element exclusivement en tete de liste. En general pas denavigation dans la pile.LIFO : Last In Fist Out

File (Queue) – FIFO

Les files sont des cas particuliers de listes avec des acces restreints. Lesinsertions sont faites en tete de liste et les retraits sont faits en queue deliste. En general pas de navigation dans la file.FIFO : First In First Out

Christophe Morvan Listes 8 septembre 2015 12 / 27

Page 20: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

API Java : les collections

Collection

Queue

PriorityQueue Deque

ArrayDeque LinkedList

List

ArrayList Vector

Stack

Set

HashSet

LinkedHashSet

SortedSet

TreeSet

Classe concrete

interface

Christophe Morvan Listes 8 septembre 2015 13 / 27

Page 21: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

Vue d’ensemble

Les collections sont rassemblees dans java.util

Interfaces

Generale : Collection<T> ensembles d’objets avec ou sans repetitions

Specifiques :

• List<T> : listes (repetitions)

• SortedSet<T> : ensembles tries

• Queue<T>/Dequeue<T> : files (simple/double)

• Set<T> : ensembles (pas de repetitions)

Exemple

Collection<Integer> col = new ArrayList<Integer>();

List<String> li = new LinkedList<String>();

Christophe Morvan Listes 8 septembre 2015 14 / 27

Page 22: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

Vue d’ensemble

Les collections sont rassemblees dans java.util

Interfaces

Generale : Collection<T> ensembles d’objets avec ou sans repetitions

Specifiques :

• List<T> : listes (repetitions)

• SortedSet<T> : ensembles tries

• Queue<T>/Dequeue<T> : files (simple/double)

• Set<T> : ensembles (pas de repetitions)

Exemple

Collection<Integer> col = new ArrayList<Integer>();

List<String> li = new LinkedList<String>();

Christophe Morvan Listes 8 septembre 2015 14 / 27

Page 23: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

Vue d’ensemble

Les collections sont rassemblees dans java.util

Interfaces

Generale : Collection<T> ensembles d’objets avec ou sans repetitionsSpecifiques :

• List<T> : listes (repetitions)

• SortedSet<T> : ensembles tries

• Queue<T>/Dequeue<T> : files (simple/double)

• Set<T> : ensembles (pas de repetitions)

Exemple

Collection<Integer> col = new ArrayList<Integer>();

List<String> li = new LinkedList<String>();

Christophe Morvan Listes 8 septembre 2015 14 / 27

Page 24: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

Vue d’ensemble

Les collections sont rassemblees dans java.util

Interfaces

Generale : Collection<T> ensembles d’objets avec ou sans repetitionsSpecifiques :

• List<T> : listes (repetitions)

• SortedSet<T> : ensembles tries

• Queue<T>/Dequeue<T> : files (simple/double)

• Set<T> : ensembles (pas de repetitions)

Exemple

Collection<Integer> col = new ArrayList<Integer>();

List<String> li = new LinkedList<String>();

Christophe Morvan Listes 8 septembre 2015 14 / 27

Page 25: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

Collection<T>

Methodes

• boolean add (T elem) : ajoute l’element elem

• boolean remove (Object o) : supprime une instance de l’elemento de la collection

• boolean contains (Object o) : verifie la presence de o

• int size() : donne la taille

• boolean isEmpty() : est-elle vide ?

• Iterator<T> iterator() : fournit un iterateur sur la collectioncourante.

Christophe Morvan Listes 8 septembre 2015 15 / 27

Page 26: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

List<T>

Methodes

• int indexOf (Object o) : position de l’element o (−1 si absent)

• T get (int i) : fournit l’element a la position i

• T set (int i, T elem) : fournit l’element a la position i et leremplace par elem

Exemple

List<String> li = new LinkedList<String>();

li.add("Bonjour");li.add("Bonsoir");

li.set(1,"Bye");

Christophe Morvan Listes 8 septembre 2015 16 / 27

Page 27: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Definition – Interface

List<T>

Methodes

• int indexOf (Object o) : position de l’element o (−1 si absent)

• T get (int i) : fournit l’element a la position i

• T set (int i, T elem) : fournit l’element a la position i et leremplace par elem

Exemple

List<String> li = new LinkedList<String>();

li.add("Bonjour");li.add("Bonsoir");

li.set(1,"Bye");

Christophe Morvan Listes 8 septembre 2015 16 / 27

Page 28: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Implementations

Progression

1 Exemples

2 Definition – Interface

3 Implementations

4 Algorithmes classiques

5 Utilisation (Exemples)

Christophe Morvan Listes 8 septembre 2015 17 / 27

Page 29: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Implementations

Implementations

Deux grandes familles d’implementations.

Par tableau

Idee : un tableau contient les elements de la liste, accompagne de quelquesautres attributs : la taille du tableau et celle de la liste, l’indice del’element courant.Point cle : lorsqu’on ajoute un nouvel element dans la liste et que letableau est sature, on agrandit la taille du tableau. On diminue sa taillelorsque le nombre d’elements dans la liste est trop petit.

Par chaine (liste – doublement – chaınee)

Idee : chaque element de la liste connaıt l’adresse de son successeur.

Christophe Morvan Listes 8 septembre 2015 18 / 27

Page 30: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Implementations

Implementations

Deux grandes familles d’implementations.

Par tableau

Idee : un tableau contient les elements de la liste, accompagne de quelquesautres attributs : la taille du tableau et celle de la liste, l’indice del’element courant.Point cle : lorsqu’on ajoute un nouvel element dans la liste et que letableau est sature, on agrandit la taille du tableau. On diminue sa taillelorsque le nombre d’elements dans la liste est trop petit.

Par chaine (liste – doublement – chaınee)

Idee : chaque element de la liste connaıt l’adresse de son successeur.

Christophe Morvan Listes 8 septembre 2015 18 / 27

Page 31: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Implementations

Implementations

Deux grandes familles d’implementations.

Par tableau

Idee : un tableau contient les elements de la liste, accompagne de quelquesautres attributs : la taille du tableau et celle de la liste, l’indice del’element courant.Point cle : lorsqu’on ajoute un nouvel element dans la liste et que letableau est sature, on agrandit la taille du tableau. On diminue sa taillelorsque le nombre d’elements dans la liste est trop petit.

Par chaine (liste – doublement – chaınee)

Idee : chaque element de la liste connaıt l’adresse de son successeur.

Christophe Morvan Listes 8 septembre 2015 18 / 27

Page 32: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Implementations

Schema d’implementation – 1

Un maillonclass Link<T>{

/* En general, c’est une classe interne */

T elem;

Link<T> next;

/* Liste doublement chainee : deux liens par maillon next - pred */

public Link(T elem){

this.elem =elem;

next=null;

}

public Link(T elem, Link<T> next){

this.elem =elem;

this.next=next;

}

/* Accesseurs publics : getElem()/getNext()

setElem(T elem)/setNext(Link<T> next;)

*/

}

Christophe Morvan Listes 8 septembre 2015 19 / 27

Page 33: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Implementations

Schema d’implementation – 2

Une listeclass ListC<T>{

Link<T> head,tail,current;

int size;

public List<T>(){

head=current=tail=null; size=0;

}

public boolean isEmpty(){

return head==null;

}

public void add (T elem){ /* Apres current */

this.size++;

if (this.isEmpty())head=current=tail=new Link<T>(elem);

else {

current.next = new Link<T>(elem, current.next);

if (current==tail) tail=current.next;

}

/* Autres methodes */ }

Christophe Morvan Listes 8 septembre 2015 20 / 27

Page 34: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Progression

1 Exemples

2 Definition – Interface

3 Implementations

4 Algorithmes classiques

5 Utilisation (Exemples)

Christophe Morvan Listes 8 septembre 2015 21 / 27

Page 35: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Recursivite

Observation

Lorsqu’une structure peut se definir de facon recursive, il est interessant deformuler les algorithmes de facon recursive.

Schema general

algorithme (objetRec)Cas d’arret, valeur de retour sans appel recursifCas recurrent, appel recursif sur la sous-stucture de objetRec

Synthese du resultat avec le resultat recursif et l’element courant.

Recherche simpleboolean rechRec(ListR<T> list, T elem){

if (list.isEmpty())return false;

if (elem == list.car())return true;

else return rechRec(list.cdr(), elem);}

/*return (!list.isEmpty())&&((elem == list.car())||

rechRec(list.cdr(), elem))*/

Christophe Morvan Listes 8 septembre 2015 22 / 27

Page 36: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Recursivite

Observation

Lorsqu’une structure peut se definir de facon recursive, il est interessant deformuler les algorithmes de facon recursive.

Schema general

algorithme (objetRec)Cas d’arret, valeur de retour sans appel recursifCas recurrent, appel recursif sur la sous-stucture de objetRec

Synthese du resultat avec le resultat recursif et l’element courant.

Recherche simpleboolean rechRec(ListR<T> list, T elem){

if (list.isEmpty())return false;

if (elem == list.car())return true;

else return rechRec(list.cdr(), elem);}

/*return (!list.isEmpty())&&((elem == list.car())||

rechRec(list.cdr(), elem))*/Christophe Morvan Listes 8 septembre 2015 22 / 27

Page 37: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Tri a bulles

Tri le plus naıfPerformances mediocres (pour un algorithme de tri)

Schema

On pose n egal a la taille de la liste

1) Chercher l’element le plus grand de la liste parmis les n premierespositions

2) Deplacer cet element a la position n

3) Si n > 1, reprendre l’etape 1) avec n = n − 1

Complexite ?

n + (n − 1) + · · · + 2 =

(n(n + 1)/2) − 1

Christophe Morvan Listes 8 septembre 2015 23 / 27

Page 38: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Tri a bulles

Tri le plus naıfPerformances mediocres (pour un algorithme de tri)

Schema

On pose n egal a la taille de la liste

1) Chercher l’element le plus grand de la liste parmis les n premierespositions

2) Deplacer cet element a la position n

3) Si n > 1, reprendre l’etape 1) avec n = n − 1

Complexite ?

n + (n − 1) + · · · + 2 =

(n(n + 1)/2) − 1

Christophe Morvan Listes 8 septembre 2015 23 / 27

Page 39: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Tri a bulles

Tri le plus naıfPerformances mediocres (pour un algorithme de tri)

Schema

On pose n egal a la taille de la liste

1) Chercher l’element le plus grand de la liste parmis les n premierespositions

2) Deplacer cet element a la position n

3) Si n > 1, reprendre l’etape 1) avec n = n − 1

Complexite ?

n + (n − 1) + · · · + 2 =

(n(n + 1)/2) − 1

Christophe Morvan Listes 8 septembre 2015 23 / 27

Page 40: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Tri a bulles

Tri le plus naıfPerformances mediocres (pour un algorithme de tri)

Schema

On pose n egal a la taille de la liste

1) Chercher l’element le plus grand de la liste parmis les n premierespositions

2) Deplacer cet element a la position n

3) Si n > 1, reprendre l’etape 1) avec n = n − 1

Complexite ?

n + (n − 1) + · · · + 2 =

(n(n + 1)/2) − 1

Christophe Morvan Listes 8 septembre 2015 23 / 27

Page 41: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Tri a bulles

Tri le plus naıfPerformances mediocres (pour un algorithme de tri)

Schema

On pose n egal a la taille de la liste

1) Chercher l’element le plus grand de la liste parmis les n premierespositions

2) Deplacer cet element a la position n

3) Si n > 1, reprendre l’etape 1) avec n = n − 1

Complexite ?

n + (n − 1) + · · · + 2 =(n(n + 1)/2) − 1

Christophe Morvan Listes 8 septembre 2015 23 / 27

Page 42: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Tri fusion

Forme de tri particulierement adapte aux listes.Exemple typique de diviser pour regner.

Schema – Tri

On pose n egal a la taille de la liste

1) Si n == 1 la liste est triee.

2) Sinon, partager la liste en deux listes de n/2 elements

3) Trier chacune des deux listes (appel recursif)

4) Fusionner les deux listes triees

Schema – Fusion

1) Realiser un parcours simultane des deux listes. Ajouter en fin de listeresultat le plus petit des deux.

2) Lorsqu’une des deux listes est terminee ajouter la seconde liste a lasuite de la liste resultat.

Christophe Morvan Listes 8 septembre 2015 24 / 27

Page 43: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Tri fusion

Forme de tri particulierement adapte aux listes.Exemple typique de diviser pour regner.

Schema – Tri

On pose n egal a la taille de la liste

1) Si n == 1 la liste est triee.

2) Sinon, partager la liste en deux listes de n/2 elements

3) Trier chacune des deux listes (appel recursif)

4) Fusionner les deux listes triees

Schema – Fusion

1) Realiser un parcours simultane des deux listes. Ajouter en fin de listeresultat le plus petit des deux.

2) Lorsqu’une des deux listes est terminee ajouter la seconde liste a lasuite de la liste resultat.

Christophe Morvan Listes 8 septembre 2015 24 / 27

Page 44: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Tri fusion

Forme de tri particulierement adapte aux listes.Exemple typique de diviser pour regner.

Schema – Tri

On pose n egal a la taille de la liste

1) Si n == 1 la liste est triee.

2) Sinon, partager la liste en deux listes de n/2 elements

3) Trier chacune des deux listes (appel recursif)

4) Fusionner les deux listes triees

Schema – Fusion

1) Realiser un parcours simultane des deux listes. Ajouter en fin de listeresultat le plus petit des deux.

2) Lorsqu’une des deux listes est terminee ajouter la seconde liste a lasuite de la liste resultat.

Christophe Morvan Listes 8 septembre 2015 24 / 27

Page 45: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Complexite fusion

Analyse

1) Partages de la liste

O(ln(n))

2) Fusion

O(n)

3) Au total

O(n ln(n))

Christophe Morvan Listes 8 septembre 2015 25 / 27

Page 46: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Complexite fusion

Analyse

1) Partages de la liste O(ln(n))

2) Fusion

O(n)

3) Au total

O(n ln(n))

Christophe Morvan Listes 8 septembre 2015 25 / 27

Page 47: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Complexite fusion

Analyse

1) Partages de la liste O(ln(n))

2) Fusion

O(n)

3) Au total

O(n ln(n))

Christophe Morvan Listes 8 septembre 2015 25 / 27

Page 48: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Complexite fusion

Analyse

1) Partages de la liste O(ln(n))

2) Fusion O(n)

3) Au total

O(n ln(n))

Christophe Morvan Listes 8 septembre 2015 25 / 27

Page 49: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Complexite fusion

Analyse

1) Partages de la liste O(ln(n))

2) Fusion O(n)

3) Au total

O(n ln(n))

Christophe Morvan Listes 8 septembre 2015 25 / 27

Page 50: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Algorithmes classiques

Complexite fusion

Analyse

1) Partages de la liste O(ln(n))

2) Fusion O(n)

3) Au total O(n ln(n))

Christophe Morvan Listes 8 septembre 2015 25 / 27

Page 51: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Utilisation (Exemples)

Progression

1 Exemples

2 Definition – Interface

3 Implementations

4 Algorithmes classiques

5 Utilisation (Exemples)

Christophe Morvan Listes 8 septembre 2015 26 / 27

Page 52: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Utilisation (Exemples)

Quelques exemples

Liste

• Liste de clients

• Liste d’items selectionnes

• Liste d’observateurs dans un patron observateur

• Listes des composants dans le patron composite

• ...

Pile/File

• Files d’attentes

• Files de priorites

• File de successeurs (parcours en largeur)

• Pile de successeurs (parcours en profondeur)

Christophe Morvan Listes 8 septembre 2015 27 / 27

Page 53: Chapitre 1: Listescmorvan/ens/fichiers/algo/Cours1.pdf · Nous utiliserons une syntaxe semblable a celle de Java pour pr esenter les exemples ou les signatures de fonctions. N eanmoins,

Utilisation (Exemples)

Quelques exemples

Liste

• Liste de clients

• Liste d’items selectionnes

• Liste d’observateurs dans un patron observateur

• Listes des composants dans le patron composite

• ...

Pile/File

• Files d’attentes

• Files de priorites

• File de successeurs (parcours en largeur)

• Pile de successeurs (parcours en profondeur)

Christophe Morvan Listes 8 septembre 2015 27 / 27