SlideShare une entreprise Scribd logo
1  sur  77
Télécharger pour lire hors ligne
DUT SRC – IUT de Marne-la-Vallée
          18/01/2012
    INF220 - Algorithmique




      Cours 1
  Récursivité et tris




                                   Philippe Gambette
Organisation pratique

 • Contact
 - Courriel : philippe.gambette@gmail.com
   (INF220 doit apparaître dans le sujet du courriel).
 - Avant ou après le cours.
 - Possibilité de poser des questions, de demander des exercices
 supplémentaires d'entrainement.
 • Notes et devoirs
 Chez soi :
     - Projet Monopoly : exercices à trous à remplir au plus tard la veille des
     cours/TP/TD pour vous inciter à travailler régulièrement et corriger vos
     erreurs. Annonce sur IRIS 6 jours avant.
 Pendant les cours :
    - Note globale de TP à la fin du semestre, prenant en compte votre
    avancée à chaque séance.
    - Devoir final le 18 juin.
Sources

 • Cours de Jean-François Berdjugin à l'IUT de Grenoble
 http://berdjugin.com/enseignements/inf/inf220/
 • Cours de Xavier Heurtebise à l'IUT de Provence
 http://x.heurtebise.free.fr
 • Le livre de Java premier langage, d'A. Tasso
 • http://xkcd.com, http://xkcd.free.fr
Plan des cours du semestre

 • Récursivité
 • Tris
 • Notions de complexité
 • Listes
 • Arbres
Plan des cours du semestre

 • Récursivité
 • Tris                    cours 1

 • Notions de complexité
 • Listes
                           cours 2
 • Arbres
Plan du cours 1 – Récursivité et tris

 • Introduction à la récursivité
 • Traces d'exécution de fonctions récursives
 • Les tris
 • Le tri par sélection
 • Le tri à bulles
 • Complexité des tris
Plan du cours 1 – Récursivité et tris

 • Introduction à la récursivité
 • Traces d'exécution de fonctions récursives
 • Les tris
 • Le tri par sélection
 • Le tri à bulles
 • Complexité des tris
Récursivité

 2 façons de le voir :
 • Une mise en abyme
 • Une baguette magique algorithmique
Récursivité

 • Une mise en abyme


                 La “minute xkcd” - Jeu de rôle sur table




                       http://xkcd.com/244
                       http://xkcd.free.fr?id=244
Récursivité

 • Une mise en abyme




                                                                http://www.apprendre-en-ligne.net/blog/index.php/2008/03/29/916-mise-en-abyme




 Photo Ethan Clements
 http://ethanclements.blogspot.com/2010/07/mise-en-abyme.html
Récursivité

 • Une mise en abyme




                                                                http://www.apprendre-en-ligne.net/blog/index.php/2008/03/29/916-mise-en-abyme



                                                                Comment dessiner ces images ?



 Photo Ethan Clements
 http://ethanclements.blogspot.com/2010/07/mise-en-abyme.html
Récursivité

 • Une mise en abyme




                                                                http://www.apprendre-en-ligne.net/blog/index.php/2008/03/29/916-mise-en-abyme



                                                                Comment dessiner ces images ?
                                                                L'image contient une plus petite version
                                                                d'elle-même.
 Photo Ethan Clements
 http://ethanclements.blogspot.com/2010/07/mise-en-abyme.html
Récursivité

 • Une mise en abyme




                                                                http://www.apprendre-en-ligne.net/blog/index.php/2008/03/29/916-mise-en-abyme



                                                                Comment dessiner ces images ?
                                                                Pour dessiner la grande image, j'utilise le
                                                                dessin de l'image en plus petit.
 Photo Ethan Clements
 http://ethanclements.blogspot.com/2010/07/mise-en-abyme.html
Récursivité

 • Une baguette magique algorithmique
 Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que
 je sais construire le premier objet, alors je sais construire tous les objets.
Récursivité

 • Une baguette magique algorithmique
 Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que
 je sais construire le premier objet, alors je sais construire tous les objets.


 Exemple des factorielles :

 factorielle(1) = 1

 factorielle(2) = 1x2 = 2

 factorielle(3) = 1x2x3 = 6

 factorielle(4) = 1x2x3x4 = 24
 ...
Récursivité

 • Une baguette magique algorithmique
 Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que
 je sais construire le premier objet, alors je sais construire tous les objets.


 Exemple des factorielles :
                                      Initialisation :
 factorielle(1) = 1

 factorielle(2) = 1x2 = 2             Formule d'hérédité :

 factorielle(3) = 1x2x3 = 6

 factorielle(4) = 1x2x3x4 = 24
 ...
Récursivité

 • Une baguette magique algorithmique
 Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que
 je sais construire le premier objet, alors je sais construire tous les objets.


 Exemple des factorielles :
                                      Initialisation :
 factorielle(1) = 1                   factorielle(1) = 1

 factorielle(2) = 1x2 = 2             Formule d'hérédité :
                                      factorielle(n) = … factorielle(n-1) ...
 factorielle(3) = 1x2x3 = 6

 factorielle(4) = 1x2x3x4 = 24
 ...
Récursivité

 • Une baguette magique algorithmique
 Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que
 je sais construire le premier objet, alors je sais construire tous les objets.


 Exemple des factorielles :
                                      Initialisation :
 factorielle(1) = 1                   factorielle(1) = 1

 factorielle(2) = 1x2 = 2             Formule d'hérédité :
                                      factorielle(n) = factorielle(n-1) x n
 factorielle(3) = 1x2x3 = 6

 factorielle(4) = 1x2x3x4 = 24
 ...
Récursivité

 • Une baguette magique algorithmique
 Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que
 je sais construire le premier objet, alors je sais construire tous les objets.


 Exemple des factorielles :
                                      Initialisation :
 factorielle(1) = 1    x2             factorielle(1) = 1

 factorielle(2) = 1x2 = 2             Formule d'hérédité :
                                      factorielle(n) = factorielle(n-1) x n
 factorielle(3) = 1x2x3 = 6

 factorielle(4) = 1x2x3x4 = 24
 ...
Récursivité

 • Une baguette magique algorithmique
 Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que
 je sais construire le premier objet, alors je sais construire tous les objets.


 Exemple des factorielles :
                                      Initialisation :
 factorielle(1) = 1    x2             factorielle(1) = 1

 factorielle(2) = 1x2 = 2 x3          Formule d'hérédité :
                                      factorielle(n) = factorielle(n-1) x n
 factorielle(3) = 1x2x3 = 6
                               x4
 factorielle(4) = 1x2x3x4 = 24
 ...
Récursivité

 • Une baguette magique algorithmique
 Exemple des factorielles :
 - la première factorielle est 1
 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n


                        Algorithme factorielle
                        Entrées :
                        Type de sortie :
                        Variable :
                        Début




                        Fin
Récursivité

 • Une baguette magique algorithmique
 Exemple des factorielles :
 - la première factorielle est 1
 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n


                        Algorithme factorielle
                        Entrées : entier n
                        Type de sortie : entier
                        Variable : entier resultat
                        Début
                             si n=1 alors :
                                    resultat ← 1
                             sinon :
                                    resultat ← n x factorielle(n-1)
                             renvoyer resultat
                        Fin
Récursivité

 • Une baguette magique algorithmique
 Exemple des factorielles :
 - la première factorielle est 1
 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n


                        Algorithme factorielle
                        Entrées : entier n
                        Type de sortie : entier
                        Variable : entier resultat
                        Début
                             si n=1 alors :
                                    resultat ← 1
                             sinon :                          entier
                                    resultat ← n x factorielle(n-1)
                             renvoyer resultat         entier
                        Fin
Récursivité

 • Une baguette magique algorithmique
 Exemple des factorielles :
 - la première factorielle est 1
 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n
                                                version non récursive :
  Algorithme factorielle                         Algorithme factorielle
  Entrées : entier n                             Entrées : entier n
  Type de sortie : entier                        Type de sortie : entier
  Variable : entier resultat                     Variable : entier resultat
  Début                                          Début
       si n=1 alors :                                 resultat ← 1
              resultat ← 1                            Pour i de 2 à n faire :
       sinon :                                               resultat ← i x resultat
              resultat ← n x factorielle(n-1)         FinPour
       renvoyer resultat                              renvoyer resultat
  Fin                                            Fin
Plan du cours 1 – Récursivité et tris

 • Introduction à la récursivité
 • Traces d'exécution de fonctions récursives
 • Les tris
 • Le tri par sélection
 • Le tri à bulles
 • Complexité des tris
Récursivité

 • Une baguette magique algorithmique
 Exemple des factorielles :
 - la première factorielle est 1
 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n


  Algorithme factorielle                        Trace de factorielle(4) :
  Entrées : entier n
  Type de sortie : entier                                            ?
  Variable : entier resultat                                  factorielle(4)
  Début
       si n=1 alors :
              resultat ← 1
       sinon :
              resultat ← n x factorielle(n-1)
       renvoyer resultat
  Fin
Récursivité

 • Une baguette magique algorithmique
 Exemple des factorielles :
 - la première factorielle est 1
 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n


  Algorithme factorielle                        Trace de factorielle(4) :
  Entrées : entier n
  Type de sortie : entier                                            ?
  Variable : entier resultat                                  factorielle(4)
  Début
       si n=1 alors :                                                ?
              resultat ← 1                                    factorielle(3)
       sinon :
              resultat ← n x factorielle(n-1)
       renvoyer resultat
  Fin
Récursivité

 • Une baguette magique algorithmique
 Exemple des factorielles :
 - la première factorielle est 1
 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n


  Algorithme factorielle                        Trace de factorielle(4) :
  Entrées : entier n
  Type de sortie : entier                                            ?
  Variable : entier resultat                                  factorielle(4)
  Début
       si n=1 alors :                                                ?
              resultat ← 1                                    factorielle(3)
       sinon :
              resultat ← n x factorielle(n-1)                        ?
       renvoyer resultat                                      factorielle(2)
  Fin
                                                                     ?
                                                              factorielle(1)
Récursivité

 • Une baguette magique algorithmique
 Exemple des factorielles :
 - la première factorielle est 1
 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n


  Algorithme factorielle                        Trace de factorielle(4) :
  Entrées : entier n
  Type de sortie : entier                                            24
  Variable : entier resultat                                  factorielle(4)
  Début
       si n=1 alors :                                                6
              resultat ← 1                                    factorielle(3)
       sinon :
              resultat ← n x factorielle(n-1)                        2
       renvoyer resultat                                      factorielle(2)
  Fin
                                                                     1
                                                              factorielle(1)
Récursivité

 Même concept que la preuve par récurrence



   La “minute mathématique”
   Théorème : Je sais monter une échelle
Récursivité

 Même concept que la preuve par récurrence



   La “minute mathématique”
   Théorème : Je sais monter une échelle


   Démonstration :
   Initialisation : je sais monter depuis le sol jusqu'au premier barreau.
   Hérédité : si je sais monter jusqu'au (n-1)-ième barreau, je saurai
   monter jusqu'au n-ième barreau.
Un autre algorithme récursif

 La multiplication
 Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que
 je sais construire le premier objet, alors je sais construire tous les objets.


 Pour calculer a x n :                                Exemple :
                                                      ax0=0
 Initialisation :                                                ?
                                                      ax1=a
                                                                  ?
                                                      a x 2 = 2a
                                                      a x 3 = 3a ?
 Formule d'hérédité :
Un autre algorithme récursif

 La multiplication
 Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que
 je sais construire le premier objet, alors je sais construire tous les objets.


 Pour calculer a x n :                                Exemple :
                                                      ax0=0
 Initialisation :                                                ?
                                                      ax1=a
                                                                  ?
 ax0=                                                 a x 2 = 2a
                                                      a x 3 = 3a ?
 Formule d'hérédité :
 a x n = … a x (n-1) …
Un autre algorithme récursif

 La multiplication
 Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que
 je sais construire le premier objet, alors je sais construire tous les objets.


 Pour calculer a x n :                                Exemple :
                                                      3x0=0
 Initialisation :                                                +3
                                                      3x1=3
                                                                  +3
 ax0=                                                 3x2=6
                                                      3x3=9       +3
 Formule d'hérédité :                                 3 x 4 = 12
 a x n = … a x (n-1) …
Un autre algorithme récursif

 La multiplication
 Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que
 je sais construire le premier objet, alors je sais construire tous les objets.


 Pour calculer a x n :
 Initialisation :
 ax0=0
 Formule d'hérédité :
 a x n = a x (n-1) + a
Un autre algorithme récursif

 La multiplication
 Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que
 je sais construire le premier objet, alors je sais construire tous les objets.

                                       Algorithme produit
 Pour calculer a x n :                 Entrées :
                                       Type de sortie :
 Initialisation :                      Variable :
                                       Début
 ax0=0
 Formule d'hérédité :
 a x n = a x (n-1) + a
                                       Fin
Un autre algorithme récursif

 La multiplication
 Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que
 je sais construire le premier objet, alors je sais construire tous les objets.

                                       Algorithme produit
 Pour calculer a x n :                 Entrées : entiers a et n
                                       Type de sortie : entier
 Initialisation :                      Variable : entier resultat
                                       Début
 ax0=0                                      si n=0 alors :
                                                   resultat ← 0
 Formule d'hérédité :                       sinon :
                                                   resultat ← produit(a,n-1) + a
 a x n = a x (n-1) + a                      renvoyer resultat
                                       Fin
Récursivité

  Le labyrinthe et les robots tueurs :
  10 personnes dans un labyrinthe poursuivies par des robots tueurs. Si on
  appuie sur le bouton stop dans les 5 minutes, les robots sont désactivés.
Récursivité

  Le labyrinthe et les robots tueurs :
  10 personnes dans un labyrinthe poursuivies par des robots tueurs. Si on
  appuie sur le bouton stop dans les 5 minutes, les robots sont désactivés.


        d2                           d4       Algorithme TrouveBouton
  d1                                          Entrées : entier nombrePersonnes,


                                d5
                                              flottant tempsRestant,
       d3




                                              chaîne de caractères direction
                                              Type de sortie : booléen
                         d7




                    d6
Récursivité

     Le labyrinthe et les robots tueurs :
     10 personnes dans un labyrinthe poursuivies par des robots tueurs. Si on
     appuie sur le bouton stop dans les 5 minutes, les robots sont désactivés.


       d2                           d4       Algorithme trouveBouton
d1                                           Entrées : entier nombrePersonnes, flottant

                               d5
                                             tempsRestant, chaîne de caractères direction
     d3




                                             Type de sortie : booléen

                                             Si on trouve le bouton à temps, on appuie
                                             dessus, et l'algorithme renvoie VRAI. Si on
                                             trouve une intersection, le groupe se sépare
                                             en deux. Si on ne trouve pas le bouton à
                                             temps, on renvoie FAUX.
                         d7




                    d6
Récursivité
                                                Algorithme trouveBouton
                                                Entrées : entier nombrePersonnes, flottant
                                                tempsRestant, chaîne de caractères direction
                                                Type de sortie : booléen

                                                Si on trouve le bouton à temps, on appuie dessus,
                                                et l'algorithme renvoie VRAI. Si on trouve une
                                                intersection, le groupe se sépare en deux. Si on ne
                                                trouve pas le bouton à temps, on renvoie FAUX.


Que renvoie trouveBouton(10,5,”d1”) ?

                        Il faut faire la trace de trouveBouton(10,5,”d1”).
Récursivité
                                                 Algorithme trouveBouton
                                                 Entrées : entier nombrePersonnes, flottant
                                                 tempsRestant, chaîne de caractères direction
                                                 Type de sortie : booléen

                                                 Si on trouve le bouton à temps, on appuie dessus,
                                                 et l'algorithme renvoie VRAI. Si on trouve une
                                                 intersection, le groupe se sépare en deux. Si on ne
                                                 trouve pas le bouton à temps, on renvoie FAUX.


Que renvoie trouveBouton(10,5,”d1”) ?                                   Arbre d'exécution de
                                                                        trouveBouton(10,5,”d1”).
                                        trouveBouton(10,5,”d1”)



               trouveBouton(5,4.5,”d2”)                    trouveBouton(5,4.5,”d3”)



trouveBouton(2,4,”d4”)       trouveBouton(3,4,”d5”)
Récursivité
                                                 Algorithme trouveBouton
                                                 Entrées : entier nombrePersonnes, flottant
                                                 tempsRestant, chaîne de caractères direction
                                                 Type de sortie : booléen

                                                 Si on trouve le bouton à temps, on appuie dessus,
                                                 et l'algorithme renvoie VRAI. Si on trouve une
                                                 intersection, le groupe se sépare en deux. Si on ne
                                                 trouve pas le bouton à temps, on renvoie FAUX.


Que renvoie trouveBouton(10,5,”d1”) ?                                   Arbre d'exécution de
                                                                        trouveBouton(10,5,”d1”).
                                        trouveBouton(10,5,”d1”)



                trouveBouton(5,4.5,”d2”)                   trouveBouton(5,4.5,”d3”)

         FAUX
trouveBouton(3,4,”d4”)       trouveBouton(2,4,”d5”)
Récursivité
                                                 Algorithme trouveBouton
                                                 Entrées : entier nombrePersonnes, flottant
                                                 tempsRestant, chaîne de caractères direction
                                                 Type de sortie : booléen

                                                 Si on trouve le bouton à temps, on appuie dessus,
                                                 et l'algorithme renvoie VRAI. Si on trouve une
                                                 intersection, le groupe se sépare en deux. Si on ne
                                                 trouve pas le bouton à temps, on renvoie FAUX.


Que renvoie trouveBouton(10,5,”d1”) ?                                   Arbre d'exécution de
                                                    VRAI
                                                                        trouveBouton(10,5,”d1”).
                                        trouveBouton(10,5,”d1”)

                              VRAI

                trouveBouton(5,4.5,”d2”)                   trouveBouton(5,4.5,”d3”)

         FAUX                             VRAI
trouveBouton(3,4,”d4”)       trouveBouton(2,4,”d5”)
Récursivité
                                                 Algorithme trouveBouton
                                                 Entrées : entier nombrePersonnes, flottant
                                                 tempsRestant, chaîne de caractères direction
                                                 Type de sortie : booléen

                                                 Si on trouve le bouton à temps, on appuie dessus,
                                                 et l'algorithme renvoie VRAI. Si on trouve une
                                                 intersection, le groupe se sépare en deux. Si on ne
                                                 trouve pas le bouton à temps, on renvoie FAUX.


Que renvoie trouveBouton(10,5,”d1”) ?                                    Arbre d'exécution de
                                                    VRAI
                                                                         trouveBouton(10,5,”d1”).
                                        trouveBouton(10,5,”d1”)

                              VRAI                                FAUX

                trouveBouton(5,4.5,”d2”)                   trouveBouton(5,4.5,”d3”)

         FAUX                             VRAI              FAUX               FAUX
trouveBouton(3,4,”d4”)       trouveBouton(2,4,”d5”)

                                            trouveBouton(3,3.7,”d6”)      trouveBouton(2,3.7,”d7”)
Plan du cours 1 – Récursivité et tris

 • Introduction à la récursivité
 • Traces d'exécution de fonctions récursives
 • Les tris
 • Le tri par sélection
 • Le tri à bulles
 • Complexité des tris
Principe d'un algorithme de tri

 Entrée :
 Ensemble d'éléments tous comparables deux à deux par un ordre ≤
 Sortie :
 Éléments triés selon cet ordre, du plus petit au plus grand


 Ensemble d'éléments : quel type ?
Principe d'un algorithme de tri

 Entrée :
 Ensemble d'éléments tous comparables deux à deux par un ordre ≤
 Sortie :
 Éléments triés selon cet ordre, du plus petit au plus grand


 Ensemble d'éléments : quel type ?
 Type pour stocker plusieurs éléments ?
Principe d'un algorithme de tri

 Entrée :
 Ensemble d'éléments tous comparables deux à deux par un ordre ≤
 Sortie :
 Éléments triés selon cet ordre, du plus petit au plus grand


 Ensemble d'éléments : quel type ?
 Type pour stocker plusieurs éléments ?
 → un tableau !
 → autres structures de données au prochain cours.
Principe d'un algorithme de tri

 Entrée :
 Ensemble d'éléments tous comparables deux à deux par un ordre ≤
 Sortie :
 Éléments triés selon cet ordre, du plus petit au plus grand


 Ensemble d'éléments         Ordre                Tous comparables deux à deux ?

 tableau d'entiers           plus petit

 tableau de chaînes          lexicographique
 de caractères               (du dictionnaire)

 tableau de cartes à jouer   2 ≤ 3 ≤ … ≤ 10 ≤
                             V≤D≤R≤1

 tableau de cartes à jouer   ♣ ≤ ♦ ≤ ♥ ≤ ♠ puis
                             2 ≤ 3 ≤ … ≤ 10 ≤
                             V≤D≤R≤1
Principe d'un algorithme de tri

 Entrée :
 Ensemble d'éléments tous comparables deux à deux par un ordre ≤
 Sortie :
 Éléments triés selon cet ordre, du plus petit au plus grand


 Ensemble d'éléments         Ordre                Tous comparables deux à deux ?

 tableau d'entiers           plus petit           oui : 1 ≤ 2, 2 ≤ 3, 1 ≤ 3...

 tableau de chaînes          lexicographique      oui : a ≤ b, char ≤ charles, char ≤ chat...
 de caractères               (du dictionnaire)

 tableau de cartes à jouer   2 ≤ 3 ≤ … ≤ 10 ≤     non : 5♣ incomparable avec 5♠
                             V≤D≤R≤1

 tableau de cartes à jouer   ♣ ≤ ♦ ≤ ♥ ≤ ♠ puis   oui : A♣ ≤ 5♠, 5♠ ≤ 6♠, ...
                             2 ≤ 3 ≤ … ≤ 10 ≤
                             V≤D≤R≤1
Principe d'un algorithme de tri

 Entrée :
 Ensemble d'éléments tous comparables deux à deux par un ordre ≤
 Sortie :
 Éléments triés selon cet ordre, du plus petit au plus grand


 Exemple avec un tableau d'entiers :
 5   3      1   8   5   2   9                1   2    3   5    5   8      9

                                           En anglais : trié = sorted
                                                        trier = to sort
Principe d'un algorithme de tri

 Entrée :
 Ensemble d'éléments tous comparables deux à deux par un ordre ≤
 Sortie :
 Éléments triés selon cet ordre, du plus petit au plus grand


 Exemple avec un tableau d'entiers :
 5    3     1    8     5    2     9            1   2    3    5   5    8      9

                                              En anglais : trié = sorted
 Algorithme inferieurOuEgal
                                                           trier = to sort
 Entrées : ?
 Type de sortie : ?

 Exemple : inferieurOuEgal(5,8) renvoie ...
Principe d'un algorithme de tri

 Entrée :
 Ensemble d'éléments tous comparables deux à deux par un ordre ≤
 Sortie :
 Éléments triés selon cet ordre, du plus petit au plus grand


 Exemple avec un tableau d'entiers :
 5    3     1    8     5     2   9              1   2    3    5   5    8      9

                                               En anglais : trié = sorted
 Algorithme inferieurOuEgal
                                                            trier = to sort
 Entrées : deux entiers a et b
 Type de sortie : booléen

 Exemple : inferieurOuEgal(5,8) renvoie VRAI
Plan du cours 1 – Récursivité et tris

 • Introduction à la récursivité
 • Traces d'exécution de fonctions récursives
 • Les tris
 • Le tri par sélection
 • Le tri à bulles
 • Complexité des tris
Tri par sélection (ou tri par extraction)

  Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième
  case (comprise) et on l'échange avec l'élément de la i-ième case.
Tri par sélection (ou tri par extraction)

   La “minute culturelle”




                     http://www.youtube.com/watch?v=Ns4TPTC8whw
Tri par sélection (ou tri par extraction)

  Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième
  case (comprise) et on l'échange avec l'élément de la i-ième case.
  Exemple avec un tableau d'entiers :
                             5   3      1   8   5   2   9
                             i vaut 1
Tri par sélection (ou tri par extraction)

  Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième
  case (comprise) et on l'échange avec l'élément de la i-ième case.
  Exemple avec un tableau d'entiers :
                             5   3    1   8    5    2   9
                             1   3    5   8    5    2   9
Tri par sélection (ou tri par extraction)

  Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième
  case (comprise) et on l'échange avec l'élément de la i-ième case.
  Exemple avec un tableau d'entiers :
                             5   3    1   8    5    2   9
                             1   3    5   8    5    2   9
                             1   2    5   8    5    3   9
                             1   2    3   8    5    5   9
                             1   2    3   5    8    5   9
                             1   2    3   5    5    8   9
                             1   2    3   5    5    8   9
  Tri en place :
  on arrive à trier le tableau sans avoir besoin de créer un nouveau tableau.
Tri par sélection (ou tri par extraction)

  Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième
  case (comprise) et on l'échange avec l'élément de la i-ième case.
  Exemple avec un tableau d'entiers :
      5    3   1    8   5    2   9      Algorithme positionMinimum
                                        Entrée : tableau d'entiers tab, entier debut
      1    3   5    8   5    2   9      Type de sortie : entier
                                        Variables : entiers position, i et min
      1    2   5    8   5    3   9      Début

      1    2   3    8   5    5   9
      1    2   3    5   8    5   9
      1    2   3    5   5    8   9
      1    2   3    5   5    8   9


                                        Fin
Tri par sélection (ou tri par extraction)

  Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième
  case (comprise) et on l'échange avec l'élément de la i-ième case.
  Exemple avec un tableau d'entiers :
      5    3   1    8   5    2   9      Algorithme positionMinimum
                                        Entrée : tableau d'entiers tab, entier debut
      1    3   5    8   5    2   9      Type de sortie : entier
                                        Variables : entiers position, i et min
      1    2   5    8   5    3   9      Début
                                          position ← debut
      1    2   3    8   5    5   9        min ← Case(tab,debut)
                                          i ← debut
      1    2   3    5   8    5   9        Tant que i≤Longueur(tab) faire :
                                              si Case(tab,i)<min alors :
      1    2   3    5   5    8   9              position ← i
                                                min ← Case(tab,i)
      1    2   3    5   5    8   9            i ← i+1
                                          Fin Tant que
                                          renvoyer position
                                        Fin
Tri par sélection (ou tri par extraction)

  Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième
  case (comprise) et on l'échange avec l'élément de la i-ième case.
  Exemple avec un tableau d'entiers :
      5    3   1    8   5    2   9      Algorithme triSelection
                                        Entrée : tableau d'entiers tab
      1    3   5    8   5    2   9      Type de sortie : tableau d'entiers
                                        Variables : entiers i, temp, posMin
      1    2   5    8   5    3   9      Début

      1    2   3    8   5    5   9
      1    2   3    5   8    5   9
      1    2   3    5   5    8   9
      1    2   3    5   5    8   9



                                        Fin
Tri par sélection (ou tri par extraction)

  Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième
  case (comprise) et on l'échange avec l'élément de la i-ième case.
  Exemple avec un tableau d'entiers :
      5    3   1    8   5    2   9      Algorithme triSelection
                                        Entrée : tableau d'entiers tab
      1    3   5    8   5    2   9      Type de sortie : tableau d'entiers
                                        Variables : entiers i, temp, posMin
      1    2   5    8   5    3   9      Début
                                          i←1
      1    2   3    8   5    5   9        Tant que i<Longueur(tab) faire :
                                            posMin ← positionMinimum(tab,i)
      1    2   3    5   8    5   9          //posMin peut être égal à i
                                            temp ← Case(tab,i)
      1    2   3    5   5    8   9          Case(tab,i) ← Case(tab,posMin)
                                            Case(tab,posMin) ← temp
      1    2   3    5   5    8   9          i ← i+1
                                          Fin Tant que
                                          renvoyer tab
                                        Fin
Plan du cours 1 – Récursivité et tris

 • Introduction à la récursivité
 • Traces d'exécution de fonctions récursives
 • Les tris
 • Le tri par sélection
 • Le tri à bulles
 • Complexité des tris
Tri à bulles

  Idée : tant que le tableau n'est pas trié, on le parcourt en effectuant
  l'opération suivante à la i-ième case : si elle est supérieure à la suivante, on les
  échange.
  Exemple avec un tableau d'entiers :
      5    3    1   8    5    2   9
Tri à bulles

  Idée : tant que le tableau n'est pas trié, on le parcourt en effectuant
  l'opération suivante à la i-ième case : si elle est supérieure à la suivante, on les
  échange.
  Exemple avec un tableau d'entiers :
  Étape 1 :
  5 3 1 8 5 2 9
  3   5    1      8   5   2   9
  3   1    5      8   5   2   9
  3   1    5      8   5   2   9
  3   1    5      5   8   2   9
  3   1    5      5   2   8   9
  3   1    5      5   2   8   9

 Tableau trié ?
Tri à bulles

  Idée : tant que le tableau n'est pas trié, on le parcourt en effectuant
  l'opération suivante à la i-ième case : si elle est supérieure à la suivante, on les
  échange.
  Exemple avec un tableau d'entiers :
  Étape 1 :                           Étape 2 :
  5 3 1 8 5 2 9                       3 1 5             5     2   8   9
  3   5    1      8   5   2   9           1    3   5    5     2   8   9
                                                        ...
  3   1    5      8   5   2   9           1    3   5    5     2   8   9
  3   1    5      8   5   2   9           1    3   5    2     5   8   9
                                                        ...
  3   1    5      5   8   2   9           1    3   5    2     5   8   9
  3   1    5      5   2   8   9
  3   1    5      5   2   8   9

 Tableau trié ?
Tri à bulles

  Idée : tant que le tableau n'est pas trié, on le parcourt en effectuant
  l'opération suivante à la i-ième case : si elle est supérieure à la suivante, on les
  échange.
  Exemple avec un tableau d'entiers :
  Étape 2 :                           Étape 3 :
  3 1 5 5 2 8 9                       1 3 5                  2     5   8   9
                                                             ...
  1   3    5   5     2   8    9           1    3   5         2     5   8   9
               ...
  1   3    5   5     2   8    9           1    3   2         5     5   8   9
                                                       ...
  1   3    5   2     5   8    9           1    3   2         5     5   8   9
               ...
  1   3    5   2     5   8    9
  Tableau trié ?
Tri à bulles

  Idée : tant que le tableau n'est pas trié, on le parcourt en effectuant
  l'opération suivante à la i-ième case : si elle est supérieure à la suivante, on les
  échange.
  Exemple avec un tableau d'entiers :
  Étape 3 :                           Étape 4 :
  1 3 5 2 5 8 9                       1 3 2              5     5   8   9
             ...
  1 3 5 2 5 8 9                       1 3 2              5     5   8   9
  1   3    2 5      5    8    9           1      2   3   5     5   8   9
           ...                                           ...
  1   3    2 5      5    8    9           1      2   3   5     5   8   9
  Tableau trié ?                          Tableau trié ?
                                          Oui.
Plan du cours 1 – Récursivité et tris

 • Introduction à la récursivité
 • Traces d'exécution de fonctions récursives
 • Les tris
 • Le tri par sélection
 • Le tri à bulles
 • Complexité des tris
Complexité des tris

 Combien de comparaisons ? (lié au temps d'exécution de l'algorithme)
 Sur un exemple ou dans le pire des cas, pour n éléments.
 Tri à bulles
 Dans tous les cas : ≤ n étapes, n-1 comparaisons par étape
 donc ≤ n x (n-1) comparaisons au total
 Tri par sélection
 Pour n éléments : n étapes, n-i comparaisons par étape pour trouver le min
Complexité des tris

 Combien de comparaisons ? (lié au temps d'exécution de l'algorithme)
 Sur un exemple ou dans le pire des cas, pour n éléments.
 Tri à bulles
 Dans tous les cas : ≤ n étapes, n-1 comparaisons par étape
 donc ≤ n x (n-1) comparaisons au total
 Tri par sélection
 Pour n éléments : n étapes, n-i comparaisons par étape pour trouver le min
                     étape 1 : n-1 comparaisons
                     étape 2 : n-2 comparaisons

                     …

                     étape n-2 : 2 comparaisons
                     étape n-1 : 1 comparaison
                     étape n : 0 comparaison
Complexité des tris

 Combien de comparaisons ? (lié au temps d'exécution de l'algorithme)
 Sur un exemple ou dans le pire des cas, pour n éléments.
 Tri à bulles
 Dans tous les cas : ≤ n étapes, n-1 comparaisons par étape
 donc ≤ n x (n-1) comparaisons au total
 Tri par sélection
 Pour n éléments : n étapes, n-i comparaisons par étape pour trouver le min
                     étape 1 : n-1 comparaisons
                     étape 2 : n-2 comparaisons

                     …
                                                  nombre total de comparaisons =
                                                  nombre de carrés du triangle noir
                     étape n-2 : 2 comparaisons
                     étape n-1 : 1 comparaison
                     étape n : 0 comparaison
Complexité des tris

 Combien de comparaisons ? (lié au temps d'exécution de l'algorithme)
 Sur un exemple ou dans le pire des cas, pour n éléments.
 Tri à bulles
 Dans tous les cas : ≤ n étapes, n-1 comparaisons par étape
 donc ≤ n x (n-1) comparaisons au total
 Tri par sélection
 Pour n éléments : n étapes, n-i comparaisons par étape pour trouver le min
                     étape 1 : n-1 comparaisons
                     étape 2 : n-2 comparaisons

                     …
                                                  nombre total de comparaisons =
                                                  nombre de carrés du triangle noir =
                     étape n-2 : 2 comparaisons
                                                  nombre de carrés du rectangle divisé par 2 =
                     étape n-1 : 1 comparaison
                     étape n : 0 comparaison
Complexité des tris

   Combien de comparaisons ? (lié au temps d'exécution de l'algorithme)
   Sur un exemple ou dans le pire des cas, pour n éléments.
   Tri à bulles
   Dans tous les cas : ≤ n étapes, n-1 comparaisons par étape
   donc ≤ n x (n-1) comparaisons au total
   Tri par sélection
   Pour n éléments : n étapes, n-i comparaisons par étape pour trouver le min
                       étape 1 : n-1 comparaisons
                       étape 2 : n-2 comparaisons

                       …
     n                                              nombre total de comparaisons =
carrés                                              nombre de carrés du triangle noir =
                       étape n-2 : 2 comparaisons
                                                    nombre de carrés du rectangle divisé par 2 =
                       étape n-1 : 1 comparaison
                                                    n(n-1)/2
                       étape n : 0 comparaison
          n-1 carrés
Complexité des tris

 Combien de comparaisons ? (lié au temps d'exécution de l'algorithme)
 Sur un exemple ou dans le pire des cas, pour n éléments.
 Tri à bulles
 Dans le pire des cas (tableau trié dans le sens inverse) : n x (n-1) comparaisons
 Dans le meilleur cas (tableau trié) : n-1 comparaisons
 Tri par sélection
 Dans tous les cas : n x (n-1)/2 comparaisons

Contenu connexe

Tendances

Mathématiques - Formule d'inversion de Pascal
Mathématiques - Formule d'inversion de PascalMathématiques - Formule d'inversion de Pascal
Mathématiques - Formule d'inversion de PascalLoïc Dilly
 
Sommation séries entières
Sommation séries entièresSommation séries entières
Sommation séries entièresLoïc Dilly
 
Mathématiques - Fonction génératrice
Mathématiques - Fonction génératriceMathématiques - Fonction génératrice
Mathématiques - Fonction génératriceLoïc Dilly
 
Mathématiques - Formule du crible
Mathématiques - Formule du cribleMathématiques - Formule du crible
Mathématiques - Formule du cribleLoïc Dilly
 
Plongement de mots :Modèle basé sur les réseaux de neurones
Plongement de mots :Modèle basé sur les réseaux de neuronesPlongement de mots :Modèle basé sur les réseaux de neurones
Plongement de mots :Modèle basé sur les réseaux de neuronesserge sonfack
 
Cours9 programmation linéaire
Cours9 programmation linéaireCours9 programmation linéaire
Cours9 programmation linéaireAroussia Othmen
 
Cours developpements limites
Cours   developpements limitesCours   developpements limites
Cours developpements limiteshassan1488
 
traitement de signal cours
traitement de signal cours traitement de signal cours
traitement de signal cours sarah Benmerzouk
 
Fórmulas elementales de derivación
Fórmulas elementales de derivaciónFórmulas elementales de derivación
Fórmulas elementales de derivaciónLuis Castañeda
 
De Runnable & synchronized à parallele() et atomically()
De Runnable & synchronized à parallele() et atomically()De Runnable & synchronized à parallele() et atomically()
De Runnable & synchronized à parallele() et atomically()Lorraine JUG
 

Tendances (13)

Mathématiques - Formule d'inversion de Pascal
Mathématiques - Formule d'inversion de PascalMathématiques - Formule d'inversion de Pascal
Mathématiques - Formule d'inversion de Pascal
 
Sommation séries entières
Sommation séries entièresSommation séries entières
Sommation séries entières
 
Mathématiques - Fonction génératrice
Mathématiques - Fonction génératriceMathématiques - Fonction génératrice
Mathématiques - Fonction génératrice
 
Mathématiques - Formule du crible
Mathématiques - Formule du cribleMathématiques - Formule du crible
Mathématiques - Formule du crible
 
Fonctions logarithmes
Fonctions logarithmesFonctions logarithmes
Fonctions logarithmes
 
Plongement de mots :Modèle basé sur les réseaux de neurones
Plongement de mots :Modèle basé sur les réseaux de neuronesPlongement de mots :Modèle basé sur les réseaux de neurones
Plongement de mots :Modèle basé sur les réseaux de neurones
 
Proglin
ProglinProglin
Proglin
 
Cours9 programmation linéaire
Cours9 programmation linéaireCours9 programmation linéaire
Cours9 programmation linéaire
 
Cours developpements limites
Cours   developpements limitesCours   developpements limites
Cours developpements limites
 
traitement de signal cours
traitement de signal cours traitement de signal cours
traitement de signal cours
 
Fórmulas elementales de derivación
Fórmulas elementales de derivaciónFórmulas elementales de derivación
Fórmulas elementales de derivación
 
De Runnable & synchronized à parallele() et atomically()
De Runnable & synchronized à parallele() et atomically()De Runnable & synchronized à parallele() et atomically()
De Runnable & synchronized à parallele() et atomically()
 
B slides 11
B slides 11B slides 11
B slides 11
 

En vedette

Algorithmique
AlgorithmiqueAlgorithmique
Algorithmiqueelharraj
 
Ch1 Algorthmique Avancée - Rappel & Notions de Base
Ch1 Algorthmique Avancée - Rappel & Notions de BaseCh1 Algorthmique Avancée - Rappel & Notions de Base
Ch1 Algorthmique Avancée - Rappel & Notions de Baselotfibenromdhane
 
INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3PGambette
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite completChahrawoods Dmz
 

En vedette (8)

Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
Chapitre 1 rappel
Chapitre 1   rappelChapitre 1   rappel
Chapitre 1 rappel
 
Dc 1
Dc 1Dc 1
Dc 1
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
algorithmique
algorithmiquealgorithmique
algorithmique
 
Ch1 Algorthmique Avancée - Rappel & Notions de Base
Ch1 Algorthmique Avancée - Rappel & Notions de BaseCh1 Algorthmique Avancée - Rappel & Notions de Base
Ch1 Algorthmique Avancée - Rappel & Notions de Base
 
INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite complet
 

Plus de PGambette

Correction de la question 5 de l'exercice 2 du TD3 (M1202)
Correction de la question 5 de l'exercice 2 du TD3 (M1202)Correction de la question 5 de l'exercice 2 du TD3 (M1202)
Correction de la question 5 de l'exercice 2 du TD3 (M1202)PGambette
 
M1202 Algorithmique & programmation Java - Cours 1 2013
M1202 Algorithmique & programmation Java - Cours 1 2013M1202 Algorithmique & programmation Java - Cours 1 2013
M1202 Algorithmique & programmation Java - Cours 1 2013PGambette
 
INF120 - Algo DUT SRC1 - Cours 4 (2012)
INF120 - Algo DUT SRC1 - Cours 4 (2012)INF120 - Algo DUT SRC1 - Cours 4 (2012)
INF120 - Algo DUT SRC1 - Cours 4 (2012)PGambette
 
INF120 - Algo DUT SRC1 - Cours 3 (2012)
INF120 - Algo DUT SRC1 - Cours 3 (2012)INF120 - Algo DUT SRC1 - Cours 3 (2012)
INF120 - Algo DUT SRC1 - Cours 3 (2012)PGambette
 
INF120 - Algo DUT SRC1 - Cours 1 (2012)
INF120 - Algo DUT SRC1 - Cours 1 (2012)INF120 - Algo DUT SRC1 - Cours 1 (2012)
INF120 - Algo DUT SRC1 - Cours 1 (2012)PGambette
 
INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3PGambette
 
INF240 - Bases de données DUT SRC1 - Cours 2
INF240 - Bases de données DUT SRC1 - Cours 2INF240 - Bases de données DUT SRC1 - Cours 2
INF240 - Bases de données DUT SRC1 - Cours 2PGambette
 
INF240 - Bases de données DUT SRC1 - Cours 1
INF240 - Bases de données DUT SRC1 - Cours 1INF240 - Bases de données DUT SRC1 - Cours 1
INF240 - Bases de données DUT SRC1 - Cours 1PGambette
 
INF220 - Algo DUT SRC1 - Cours 2
INF220 - Algo DUT SRC1 - Cours 2INF220 - Algo DUT SRC1 - Cours 2
INF220 - Algo DUT SRC1 - Cours 2PGambette
 
INF120 - Algo DUT SRC1 - Cours 5
INF120 - Algo DUT SRC1 - Cours 5INF120 - Algo DUT SRC1 - Cours 5
INF120 - Algo DUT SRC1 - Cours 5PGambette
 
INF120 - Algo DUT SRC1 - Cours 4
INF120 - Algo DUT SRC1 - Cours 4INF120 - Algo DUT SRC1 - Cours 4
INF120 - Algo DUT SRC1 - Cours 4PGambette
 
INF120 - Algo DUT SRC1 - Cours 1
INF120 - Algo DUT SRC1 - Cours 1INF120 - Algo DUT SRC1 - Cours 1
INF120 - Algo DUT SRC1 - Cours 1PGambette
 

Plus de PGambette (12)

Correction de la question 5 de l'exercice 2 du TD3 (M1202)
Correction de la question 5 de l'exercice 2 du TD3 (M1202)Correction de la question 5 de l'exercice 2 du TD3 (M1202)
Correction de la question 5 de l'exercice 2 du TD3 (M1202)
 
M1202 Algorithmique & programmation Java - Cours 1 2013
M1202 Algorithmique & programmation Java - Cours 1 2013M1202 Algorithmique & programmation Java - Cours 1 2013
M1202 Algorithmique & programmation Java - Cours 1 2013
 
INF120 - Algo DUT SRC1 - Cours 4 (2012)
INF120 - Algo DUT SRC1 - Cours 4 (2012)INF120 - Algo DUT SRC1 - Cours 4 (2012)
INF120 - Algo DUT SRC1 - Cours 4 (2012)
 
INF120 - Algo DUT SRC1 - Cours 3 (2012)
INF120 - Algo DUT SRC1 - Cours 3 (2012)INF120 - Algo DUT SRC1 - Cours 3 (2012)
INF120 - Algo DUT SRC1 - Cours 3 (2012)
 
INF120 - Algo DUT SRC1 - Cours 1 (2012)
INF120 - Algo DUT SRC1 - Cours 1 (2012)INF120 - Algo DUT SRC1 - Cours 1 (2012)
INF120 - Algo DUT SRC1 - Cours 1 (2012)
 
INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3
 
INF240 - Bases de données DUT SRC1 - Cours 2
INF240 - Bases de données DUT SRC1 - Cours 2INF240 - Bases de données DUT SRC1 - Cours 2
INF240 - Bases de données DUT SRC1 - Cours 2
 
INF240 - Bases de données DUT SRC1 - Cours 1
INF240 - Bases de données DUT SRC1 - Cours 1INF240 - Bases de données DUT SRC1 - Cours 1
INF240 - Bases de données DUT SRC1 - Cours 1
 
INF220 - Algo DUT SRC1 - Cours 2
INF220 - Algo DUT SRC1 - Cours 2INF220 - Algo DUT SRC1 - Cours 2
INF220 - Algo DUT SRC1 - Cours 2
 
INF120 - Algo DUT SRC1 - Cours 5
INF120 - Algo DUT SRC1 - Cours 5INF120 - Algo DUT SRC1 - Cours 5
INF120 - Algo DUT SRC1 - Cours 5
 
INF120 - Algo DUT SRC1 - Cours 4
INF120 - Algo DUT SRC1 - Cours 4INF120 - Algo DUT SRC1 - Cours 4
INF120 - Algo DUT SRC1 - Cours 4
 
INF120 - Algo DUT SRC1 - Cours 1
INF120 - Algo DUT SRC1 - Cours 1INF120 - Algo DUT SRC1 - Cours 1
INF120 - Algo DUT SRC1 - Cours 1
 

Dernier

Présentation de lancement de la SAE203 - MMI S2
Présentation de lancement de la SAE203 - MMI S2Présentation de lancement de la SAE203 - MMI S2
Présentation de lancement de la SAE203 - MMI S2JeanLucHusson
 
Formation M2i - Femmes entrepreneures : soyez actrices du changement
Formation M2i - Femmes entrepreneures : soyez actrices du changementFormation M2i - Femmes entrepreneures : soyez actrices du changement
Formation M2i - Femmes entrepreneures : soyez actrices du changementM2i Formation
 
Semaine de la Passion de Jésus-Christ.pptx
Semaine de la Passion de Jésus-Christ.pptxSemaine de la Passion de Jésus-Christ.pptx
Semaine de la Passion de Jésus-Christ.pptxMartin M Flynn
 
La Projection orthogonale en dessin technique
La Projection orthogonale en dessin techniqueLa Projection orthogonale en dessin technique
La Projection orthogonale en dessin techniquessuser4dbdf2
 
Rapport projet de fin d'études licence PFE
Rapport projet de fin d'études licence PFERapport projet de fin d'études licence PFE
Rapport projet de fin d'études licence PFEAhmam Abderrahmane
 
Exercice de FLE pour enfants sur les transports et les prépositions
Exercice de FLE pour enfants sur les transports et les prépositionsExercice de FLE pour enfants sur les transports et les prépositions
Exercice de FLE pour enfants sur les transports et les prépositionslaetitiachassagne
 
Planning de la semaine du 25 mars au 2 avril 2024
Planning de la semaine du 25 mars au 2 avril 2024Planning de la semaine du 25 mars au 2 avril 2024
Planning de la semaine du 25 mars au 2 avril 2024frizzole
 

Dernier (7)

Présentation de lancement de la SAE203 - MMI S2
Présentation de lancement de la SAE203 - MMI S2Présentation de lancement de la SAE203 - MMI S2
Présentation de lancement de la SAE203 - MMI S2
 
Formation M2i - Femmes entrepreneures : soyez actrices du changement
Formation M2i - Femmes entrepreneures : soyez actrices du changementFormation M2i - Femmes entrepreneures : soyez actrices du changement
Formation M2i - Femmes entrepreneures : soyez actrices du changement
 
Semaine de la Passion de Jésus-Christ.pptx
Semaine de la Passion de Jésus-Christ.pptxSemaine de la Passion de Jésus-Christ.pptx
Semaine de la Passion de Jésus-Christ.pptx
 
La Projection orthogonale en dessin technique
La Projection orthogonale en dessin techniqueLa Projection orthogonale en dessin technique
La Projection orthogonale en dessin technique
 
Rapport projet de fin d'études licence PFE
Rapport projet de fin d'études licence PFERapport projet de fin d'études licence PFE
Rapport projet de fin d'études licence PFE
 
Exercice de FLE pour enfants sur les transports et les prépositions
Exercice de FLE pour enfants sur les transports et les prépositionsExercice de FLE pour enfants sur les transports et les prépositions
Exercice de FLE pour enfants sur les transports et les prépositions
 
Planning de la semaine du 25 mars au 2 avril 2024
Planning de la semaine du 25 mars au 2 avril 2024Planning de la semaine du 25 mars au 2 avril 2024
Planning de la semaine du 25 mars au 2 avril 2024
 

INF220 - Algo DUT SRC1 - Cours 1

  • 1. DUT SRC – IUT de Marne-la-Vallée 18/01/2012 INF220 - Algorithmique Cours 1 Récursivité et tris Philippe Gambette
  • 2. Organisation pratique • Contact - Courriel : philippe.gambette@gmail.com (INF220 doit apparaître dans le sujet du courriel). - Avant ou après le cours. - Possibilité de poser des questions, de demander des exercices supplémentaires d'entrainement. • Notes et devoirs Chez soi : - Projet Monopoly : exercices à trous à remplir au plus tard la veille des cours/TP/TD pour vous inciter à travailler régulièrement et corriger vos erreurs. Annonce sur IRIS 6 jours avant. Pendant les cours : - Note globale de TP à la fin du semestre, prenant en compte votre avancée à chaque séance. - Devoir final le 18 juin.
  • 3. Sources • Cours de Jean-François Berdjugin à l'IUT de Grenoble http://berdjugin.com/enseignements/inf/inf220/ • Cours de Xavier Heurtebise à l'IUT de Provence http://x.heurtebise.free.fr • Le livre de Java premier langage, d'A. Tasso • http://xkcd.com, http://xkcd.free.fr
  • 4. Plan des cours du semestre • Récursivité • Tris • Notions de complexité • Listes • Arbres
  • 5. Plan des cours du semestre • Récursivité • Tris cours 1 • Notions de complexité • Listes cours 2 • Arbres
  • 6. Plan du cours 1 – Récursivité et tris • Introduction à la récursivité • Traces d'exécution de fonctions récursives • Les tris • Le tri par sélection • Le tri à bulles • Complexité des tris
  • 7. Plan du cours 1 – Récursivité et tris • Introduction à la récursivité • Traces d'exécution de fonctions récursives • Les tris • Le tri par sélection • Le tri à bulles • Complexité des tris
  • 8. Récursivité 2 façons de le voir : • Une mise en abyme • Une baguette magique algorithmique
  • 9. Récursivité • Une mise en abyme La “minute xkcd” - Jeu de rôle sur table http://xkcd.com/244 http://xkcd.free.fr?id=244
  • 10. Récursivité • Une mise en abyme http://www.apprendre-en-ligne.net/blog/index.php/2008/03/29/916-mise-en-abyme Photo Ethan Clements http://ethanclements.blogspot.com/2010/07/mise-en-abyme.html
  • 11. Récursivité • Une mise en abyme http://www.apprendre-en-ligne.net/blog/index.php/2008/03/29/916-mise-en-abyme Comment dessiner ces images ? Photo Ethan Clements http://ethanclements.blogspot.com/2010/07/mise-en-abyme.html
  • 12. Récursivité • Une mise en abyme http://www.apprendre-en-ligne.net/blog/index.php/2008/03/29/916-mise-en-abyme Comment dessiner ces images ? L'image contient une plus petite version d'elle-même. Photo Ethan Clements http://ethanclements.blogspot.com/2010/07/mise-en-abyme.html
  • 13. Récursivité • Une mise en abyme http://www.apprendre-en-ligne.net/blog/index.php/2008/03/29/916-mise-en-abyme Comment dessiner ces images ? Pour dessiner la grande image, j'utilise le dessin de l'image en plus petit. Photo Ethan Clements http://ethanclements.blogspot.com/2010/07/mise-en-abyme.html
  • 14. Récursivité • Une baguette magique algorithmique Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que je sais construire le premier objet, alors je sais construire tous les objets.
  • 15. Récursivité • Une baguette magique algorithmique Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que je sais construire le premier objet, alors je sais construire tous les objets. Exemple des factorielles : factorielle(1) = 1 factorielle(2) = 1x2 = 2 factorielle(3) = 1x2x3 = 6 factorielle(4) = 1x2x3x4 = 24 ...
  • 16. Récursivité • Une baguette magique algorithmique Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que je sais construire le premier objet, alors je sais construire tous les objets. Exemple des factorielles : Initialisation : factorielle(1) = 1 factorielle(2) = 1x2 = 2 Formule d'hérédité : factorielle(3) = 1x2x3 = 6 factorielle(4) = 1x2x3x4 = 24 ...
  • 17. Récursivité • Une baguette magique algorithmique Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que je sais construire le premier objet, alors je sais construire tous les objets. Exemple des factorielles : Initialisation : factorielle(1) = 1 factorielle(1) = 1 factorielle(2) = 1x2 = 2 Formule d'hérédité : factorielle(n) = … factorielle(n-1) ... factorielle(3) = 1x2x3 = 6 factorielle(4) = 1x2x3x4 = 24 ...
  • 18. Récursivité • Une baguette magique algorithmique Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que je sais construire le premier objet, alors je sais construire tous les objets. Exemple des factorielles : Initialisation : factorielle(1) = 1 factorielle(1) = 1 factorielle(2) = 1x2 = 2 Formule d'hérédité : factorielle(n) = factorielle(n-1) x n factorielle(3) = 1x2x3 = 6 factorielle(4) = 1x2x3x4 = 24 ...
  • 19. Récursivité • Une baguette magique algorithmique Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que je sais construire le premier objet, alors je sais construire tous les objets. Exemple des factorielles : Initialisation : factorielle(1) = 1 x2 factorielle(1) = 1 factorielle(2) = 1x2 = 2 Formule d'hérédité : factorielle(n) = factorielle(n-1) x n factorielle(3) = 1x2x3 = 6 factorielle(4) = 1x2x3x4 = 24 ...
  • 20. Récursivité • Une baguette magique algorithmique Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que je sais construire le premier objet, alors je sais construire tous les objets. Exemple des factorielles : Initialisation : factorielle(1) = 1 x2 factorielle(1) = 1 factorielle(2) = 1x2 = 2 x3 Formule d'hérédité : factorielle(n) = factorielle(n-1) x n factorielle(3) = 1x2x3 = 6 x4 factorielle(4) = 1x2x3x4 = 24 ...
  • 21. Récursivité • Une baguette magique algorithmique Exemple des factorielles : - la première factorielle est 1 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n Algorithme factorielle Entrées : Type de sortie : Variable : Début Fin
  • 22. Récursivité • Une baguette magique algorithmique Exemple des factorielles : - la première factorielle est 1 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n Algorithme factorielle Entrées : entier n Type de sortie : entier Variable : entier resultat Début si n=1 alors : resultat ← 1 sinon : resultat ← n x factorielle(n-1) renvoyer resultat Fin
  • 23. Récursivité • Une baguette magique algorithmique Exemple des factorielles : - la première factorielle est 1 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n Algorithme factorielle Entrées : entier n Type de sortie : entier Variable : entier resultat Début si n=1 alors : resultat ← 1 sinon : entier resultat ← n x factorielle(n-1) renvoyer resultat entier Fin
  • 24. Récursivité • Une baguette magique algorithmique Exemple des factorielles : - la première factorielle est 1 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n version non récursive : Algorithme factorielle Algorithme factorielle Entrées : entier n Entrées : entier n Type de sortie : entier Type de sortie : entier Variable : entier resultat Variable : entier resultat Début Début si n=1 alors : resultat ← 1 resultat ← 1 Pour i de 2 à n faire : sinon : resultat ← i x resultat resultat ← n x factorielle(n-1) FinPour renvoyer resultat renvoyer resultat Fin Fin
  • 25. Plan du cours 1 – Récursivité et tris • Introduction à la récursivité • Traces d'exécution de fonctions récursives • Les tris • Le tri par sélection • Le tri à bulles • Complexité des tris
  • 26. Récursivité • Une baguette magique algorithmique Exemple des factorielles : - la première factorielle est 1 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n Algorithme factorielle Trace de factorielle(4) : Entrées : entier n Type de sortie : entier ? Variable : entier resultat factorielle(4) Début si n=1 alors : resultat ← 1 sinon : resultat ← n x factorielle(n-1) renvoyer resultat Fin
  • 27. Récursivité • Une baguette magique algorithmique Exemple des factorielles : - la première factorielle est 1 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n Algorithme factorielle Trace de factorielle(4) : Entrées : entier n Type de sortie : entier ? Variable : entier resultat factorielle(4) Début si n=1 alors : ? resultat ← 1 factorielle(3) sinon : resultat ← n x factorielle(n-1) renvoyer resultat Fin
  • 28. Récursivité • Une baguette magique algorithmique Exemple des factorielles : - la première factorielle est 1 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n Algorithme factorielle Trace de factorielle(4) : Entrées : entier n Type de sortie : entier ? Variable : entier resultat factorielle(4) Début si n=1 alors : ? resultat ← 1 factorielle(3) sinon : resultat ← n x factorielle(n-1) ? renvoyer resultat factorielle(2) Fin ? factorielle(1)
  • 29. Récursivité • Une baguette magique algorithmique Exemple des factorielles : - la première factorielle est 1 - pour passer de factorielle(n-1) à factorielle(n), je multiplie par n Algorithme factorielle Trace de factorielle(4) : Entrées : entier n Type de sortie : entier 24 Variable : entier resultat factorielle(4) Début si n=1 alors : 6 resultat ← 1 factorielle(3) sinon : resultat ← n x factorielle(n-1) 2 renvoyer resultat factorielle(2) Fin 1 factorielle(1)
  • 30. Récursivité Même concept que la preuve par récurrence La “minute mathématique” Théorème : Je sais monter une échelle
  • 31. Récursivité Même concept que la preuve par récurrence La “minute mathématique” Théorème : Je sais monter une échelle Démonstration : Initialisation : je sais monter depuis le sol jusqu'au premier barreau. Hérédité : si je sais monter jusqu'au (n-1)-ième barreau, je saurai monter jusqu'au n-ième barreau.
  • 32. Un autre algorithme récursif La multiplication Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que je sais construire le premier objet, alors je sais construire tous les objets. Pour calculer a x n : Exemple : ax0=0 Initialisation : ? ax1=a ? a x 2 = 2a a x 3 = 3a ? Formule d'hérédité :
  • 33. Un autre algorithme récursif La multiplication Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que je sais construire le premier objet, alors je sais construire tous les objets. Pour calculer a x n : Exemple : ax0=0 Initialisation : ? ax1=a ? ax0= a x 2 = 2a a x 3 = 3a ? Formule d'hérédité : a x n = … a x (n-1) …
  • 34. Un autre algorithme récursif La multiplication Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que je sais construire le premier objet, alors je sais construire tous les objets. Pour calculer a x n : Exemple : 3x0=0 Initialisation : +3 3x1=3 +3 ax0= 3x2=6 3x3=9 +3 Formule d'hérédité : 3 x 4 = 12 a x n = … a x (n-1) …
  • 35. Un autre algorithme récursif La multiplication Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que je sais construire le premier objet, alors je sais construire tous les objets. Pour calculer a x n : Initialisation : ax0=0 Formule d'hérédité : a x n = a x (n-1) + a
  • 36. Un autre algorithme récursif La multiplication Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que je sais construire le premier objet, alors je sais construire tous les objets. Algorithme produit Pour calculer a x n : Entrées : Type de sortie : Initialisation : Variable : Début ax0=0 Formule d'hérédité : a x n = a x (n-1) + a Fin
  • 37. Un autre algorithme récursif La multiplication Si je sais construire le n-ième objet à partir du (n-1)-ième objet, et que je sais construire le premier objet, alors je sais construire tous les objets. Algorithme produit Pour calculer a x n : Entrées : entiers a et n Type de sortie : entier Initialisation : Variable : entier resultat Début ax0=0 si n=0 alors : resultat ← 0 Formule d'hérédité : sinon : resultat ← produit(a,n-1) + a a x n = a x (n-1) + a renvoyer resultat Fin
  • 38. Récursivité Le labyrinthe et les robots tueurs : 10 personnes dans un labyrinthe poursuivies par des robots tueurs. Si on appuie sur le bouton stop dans les 5 minutes, les robots sont désactivés.
  • 39. Récursivité Le labyrinthe et les robots tueurs : 10 personnes dans un labyrinthe poursuivies par des robots tueurs. Si on appuie sur le bouton stop dans les 5 minutes, les robots sont désactivés. d2 d4 Algorithme TrouveBouton d1 Entrées : entier nombrePersonnes, d5 flottant tempsRestant, d3 chaîne de caractères direction Type de sortie : booléen d7 d6
  • 40. Récursivité Le labyrinthe et les robots tueurs : 10 personnes dans un labyrinthe poursuivies par des robots tueurs. Si on appuie sur le bouton stop dans les 5 minutes, les robots sont désactivés. d2 d4 Algorithme trouveBouton d1 Entrées : entier nombrePersonnes, flottant d5 tempsRestant, chaîne de caractères direction d3 Type de sortie : booléen Si on trouve le bouton à temps, on appuie dessus, et l'algorithme renvoie VRAI. Si on trouve une intersection, le groupe se sépare en deux. Si on ne trouve pas le bouton à temps, on renvoie FAUX. d7 d6
  • 41. Récursivité Algorithme trouveBouton Entrées : entier nombrePersonnes, flottant tempsRestant, chaîne de caractères direction Type de sortie : booléen Si on trouve le bouton à temps, on appuie dessus, et l'algorithme renvoie VRAI. Si on trouve une intersection, le groupe se sépare en deux. Si on ne trouve pas le bouton à temps, on renvoie FAUX. Que renvoie trouveBouton(10,5,”d1”) ? Il faut faire la trace de trouveBouton(10,5,”d1”).
  • 42. Récursivité Algorithme trouveBouton Entrées : entier nombrePersonnes, flottant tempsRestant, chaîne de caractères direction Type de sortie : booléen Si on trouve le bouton à temps, on appuie dessus, et l'algorithme renvoie VRAI. Si on trouve une intersection, le groupe se sépare en deux. Si on ne trouve pas le bouton à temps, on renvoie FAUX. Que renvoie trouveBouton(10,5,”d1”) ? Arbre d'exécution de trouveBouton(10,5,”d1”). trouveBouton(10,5,”d1”) trouveBouton(5,4.5,”d2”) trouveBouton(5,4.5,”d3”) trouveBouton(2,4,”d4”) trouveBouton(3,4,”d5”)
  • 43. Récursivité Algorithme trouveBouton Entrées : entier nombrePersonnes, flottant tempsRestant, chaîne de caractères direction Type de sortie : booléen Si on trouve le bouton à temps, on appuie dessus, et l'algorithme renvoie VRAI. Si on trouve une intersection, le groupe se sépare en deux. Si on ne trouve pas le bouton à temps, on renvoie FAUX. Que renvoie trouveBouton(10,5,”d1”) ? Arbre d'exécution de trouveBouton(10,5,”d1”). trouveBouton(10,5,”d1”) trouveBouton(5,4.5,”d2”) trouveBouton(5,4.5,”d3”) FAUX trouveBouton(3,4,”d4”) trouveBouton(2,4,”d5”)
  • 44. Récursivité Algorithme trouveBouton Entrées : entier nombrePersonnes, flottant tempsRestant, chaîne de caractères direction Type de sortie : booléen Si on trouve le bouton à temps, on appuie dessus, et l'algorithme renvoie VRAI. Si on trouve une intersection, le groupe se sépare en deux. Si on ne trouve pas le bouton à temps, on renvoie FAUX. Que renvoie trouveBouton(10,5,”d1”) ? Arbre d'exécution de VRAI trouveBouton(10,5,”d1”). trouveBouton(10,5,”d1”) VRAI trouveBouton(5,4.5,”d2”) trouveBouton(5,4.5,”d3”) FAUX VRAI trouveBouton(3,4,”d4”) trouveBouton(2,4,”d5”)
  • 45. Récursivité Algorithme trouveBouton Entrées : entier nombrePersonnes, flottant tempsRestant, chaîne de caractères direction Type de sortie : booléen Si on trouve le bouton à temps, on appuie dessus, et l'algorithme renvoie VRAI. Si on trouve une intersection, le groupe se sépare en deux. Si on ne trouve pas le bouton à temps, on renvoie FAUX. Que renvoie trouveBouton(10,5,”d1”) ? Arbre d'exécution de VRAI trouveBouton(10,5,”d1”). trouveBouton(10,5,”d1”) VRAI FAUX trouveBouton(5,4.5,”d2”) trouveBouton(5,4.5,”d3”) FAUX VRAI FAUX FAUX trouveBouton(3,4,”d4”) trouveBouton(2,4,”d5”) trouveBouton(3,3.7,”d6”) trouveBouton(2,3.7,”d7”)
  • 46. Plan du cours 1 – Récursivité et tris • Introduction à la récursivité • Traces d'exécution de fonctions récursives • Les tris • Le tri par sélection • Le tri à bulles • Complexité des tris
  • 47. Principe d'un algorithme de tri Entrée : Ensemble d'éléments tous comparables deux à deux par un ordre ≤ Sortie : Éléments triés selon cet ordre, du plus petit au plus grand Ensemble d'éléments : quel type ?
  • 48. Principe d'un algorithme de tri Entrée : Ensemble d'éléments tous comparables deux à deux par un ordre ≤ Sortie : Éléments triés selon cet ordre, du plus petit au plus grand Ensemble d'éléments : quel type ? Type pour stocker plusieurs éléments ?
  • 49. Principe d'un algorithme de tri Entrée : Ensemble d'éléments tous comparables deux à deux par un ordre ≤ Sortie : Éléments triés selon cet ordre, du plus petit au plus grand Ensemble d'éléments : quel type ? Type pour stocker plusieurs éléments ? → un tableau ! → autres structures de données au prochain cours.
  • 50. Principe d'un algorithme de tri Entrée : Ensemble d'éléments tous comparables deux à deux par un ordre ≤ Sortie : Éléments triés selon cet ordre, du plus petit au plus grand Ensemble d'éléments Ordre Tous comparables deux à deux ? tableau d'entiers plus petit tableau de chaînes lexicographique de caractères (du dictionnaire) tableau de cartes à jouer 2 ≤ 3 ≤ … ≤ 10 ≤ V≤D≤R≤1 tableau de cartes à jouer ♣ ≤ ♦ ≤ ♥ ≤ ♠ puis 2 ≤ 3 ≤ … ≤ 10 ≤ V≤D≤R≤1
  • 51. Principe d'un algorithme de tri Entrée : Ensemble d'éléments tous comparables deux à deux par un ordre ≤ Sortie : Éléments triés selon cet ordre, du plus petit au plus grand Ensemble d'éléments Ordre Tous comparables deux à deux ? tableau d'entiers plus petit oui : 1 ≤ 2, 2 ≤ 3, 1 ≤ 3... tableau de chaînes lexicographique oui : a ≤ b, char ≤ charles, char ≤ chat... de caractères (du dictionnaire) tableau de cartes à jouer 2 ≤ 3 ≤ … ≤ 10 ≤ non : 5♣ incomparable avec 5♠ V≤D≤R≤1 tableau de cartes à jouer ♣ ≤ ♦ ≤ ♥ ≤ ♠ puis oui : A♣ ≤ 5♠, 5♠ ≤ 6♠, ... 2 ≤ 3 ≤ … ≤ 10 ≤ V≤D≤R≤1
  • 52. Principe d'un algorithme de tri Entrée : Ensemble d'éléments tous comparables deux à deux par un ordre ≤ Sortie : Éléments triés selon cet ordre, du plus petit au plus grand Exemple avec un tableau d'entiers : 5 3 1 8 5 2 9 1 2 3 5 5 8 9 En anglais : trié = sorted trier = to sort
  • 53. Principe d'un algorithme de tri Entrée : Ensemble d'éléments tous comparables deux à deux par un ordre ≤ Sortie : Éléments triés selon cet ordre, du plus petit au plus grand Exemple avec un tableau d'entiers : 5 3 1 8 5 2 9 1 2 3 5 5 8 9 En anglais : trié = sorted Algorithme inferieurOuEgal trier = to sort Entrées : ? Type de sortie : ? Exemple : inferieurOuEgal(5,8) renvoie ...
  • 54. Principe d'un algorithme de tri Entrée : Ensemble d'éléments tous comparables deux à deux par un ordre ≤ Sortie : Éléments triés selon cet ordre, du plus petit au plus grand Exemple avec un tableau d'entiers : 5 3 1 8 5 2 9 1 2 3 5 5 8 9 En anglais : trié = sorted Algorithme inferieurOuEgal trier = to sort Entrées : deux entiers a et b Type de sortie : booléen Exemple : inferieurOuEgal(5,8) renvoie VRAI
  • 55. Plan du cours 1 – Récursivité et tris • Introduction à la récursivité • Traces d'exécution de fonctions récursives • Les tris • Le tri par sélection • Le tri à bulles • Complexité des tris
  • 56. Tri par sélection (ou tri par extraction) Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième case (comprise) et on l'échange avec l'élément de la i-ième case.
  • 57. Tri par sélection (ou tri par extraction) La “minute culturelle” http://www.youtube.com/watch?v=Ns4TPTC8whw
  • 58. Tri par sélection (ou tri par extraction) Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième case (comprise) et on l'échange avec l'élément de la i-ième case. Exemple avec un tableau d'entiers : 5 3 1 8 5 2 9 i vaut 1
  • 59. Tri par sélection (ou tri par extraction) Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième case (comprise) et on l'échange avec l'élément de la i-ième case. Exemple avec un tableau d'entiers : 5 3 1 8 5 2 9 1 3 5 8 5 2 9
  • 60. Tri par sélection (ou tri par extraction) Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième case (comprise) et on l'échange avec l'élément de la i-ième case. Exemple avec un tableau d'entiers : 5 3 1 8 5 2 9 1 3 5 8 5 2 9 1 2 5 8 5 3 9 1 2 3 8 5 5 9 1 2 3 5 8 5 9 1 2 3 5 5 8 9 1 2 3 5 5 8 9 Tri en place : on arrive à trier le tableau sans avoir besoin de créer un nouveau tableau.
  • 61. Tri par sélection (ou tri par extraction) Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième case (comprise) et on l'échange avec l'élément de la i-ième case. Exemple avec un tableau d'entiers : 5 3 1 8 5 2 9 Algorithme positionMinimum Entrée : tableau d'entiers tab, entier debut 1 3 5 8 5 2 9 Type de sortie : entier Variables : entiers position, i et min 1 2 5 8 5 3 9 Début 1 2 3 8 5 5 9 1 2 3 5 8 5 9 1 2 3 5 5 8 9 1 2 3 5 5 8 9 Fin
  • 62. Tri par sélection (ou tri par extraction) Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième case (comprise) et on l'échange avec l'élément de la i-ième case. Exemple avec un tableau d'entiers : 5 3 1 8 5 2 9 Algorithme positionMinimum Entrée : tableau d'entiers tab, entier debut 1 3 5 8 5 2 9 Type de sortie : entier Variables : entiers position, i et min 1 2 5 8 5 3 9 Début position ← debut 1 2 3 8 5 5 9 min ← Case(tab,debut) i ← debut 1 2 3 5 8 5 9 Tant que i≤Longueur(tab) faire : si Case(tab,i)<min alors : 1 2 3 5 5 8 9 position ← i min ← Case(tab,i) 1 2 3 5 5 8 9 i ← i+1 Fin Tant que renvoyer position Fin
  • 63. Tri par sélection (ou tri par extraction) Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième case (comprise) et on l'échange avec l'élément de la i-ième case. Exemple avec un tableau d'entiers : 5 3 1 8 5 2 9 Algorithme triSelection Entrée : tableau d'entiers tab 1 3 5 8 5 2 9 Type de sortie : tableau d'entiers Variables : entiers i, temp, posMin 1 2 5 8 5 3 9 Début 1 2 3 8 5 5 9 1 2 3 5 8 5 9 1 2 3 5 5 8 9 1 2 3 5 5 8 9 Fin
  • 64. Tri par sélection (ou tri par extraction) Idée : à la i-ième étape, on prend le plus petit élément à partir de la i-ième case (comprise) et on l'échange avec l'élément de la i-ième case. Exemple avec un tableau d'entiers : 5 3 1 8 5 2 9 Algorithme triSelection Entrée : tableau d'entiers tab 1 3 5 8 5 2 9 Type de sortie : tableau d'entiers Variables : entiers i, temp, posMin 1 2 5 8 5 3 9 Début i←1 1 2 3 8 5 5 9 Tant que i<Longueur(tab) faire : posMin ← positionMinimum(tab,i) 1 2 3 5 8 5 9 //posMin peut être égal à i temp ← Case(tab,i) 1 2 3 5 5 8 9 Case(tab,i) ← Case(tab,posMin) Case(tab,posMin) ← temp 1 2 3 5 5 8 9 i ← i+1 Fin Tant que renvoyer tab Fin
  • 65. Plan du cours 1 – Récursivité et tris • Introduction à la récursivité • Traces d'exécution de fonctions récursives • Les tris • Le tri par sélection • Le tri à bulles • Complexité des tris
  • 66. Tri à bulles Idée : tant que le tableau n'est pas trié, on le parcourt en effectuant l'opération suivante à la i-ième case : si elle est supérieure à la suivante, on les échange. Exemple avec un tableau d'entiers : 5 3 1 8 5 2 9
  • 67. Tri à bulles Idée : tant que le tableau n'est pas trié, on le parcourt en effectuant l'opération suivante à la i-ième case : si elle est supérieure à la suivante, on les échange. Exemple avec un tableau d'entiers : Étape 1 : 5 3 1 8 5 2 9 3 5 1 8 5 2 9 3 1 5 8 5 2 9 3 1 5 8 5 2 9 3 1 5 5 8 2 9 3 1 5 5 2 8 9 3 1 5 5 2 8 9 Tableau trié ?
  • 68. Tri à bulles Idée : tant que le tableau n'est pas trié, on le parcourt en effectuant l'opération suivante à la i-ième case : si elle est supérieure à la suivante, on les échange. Exemple avec un tableau d'entiers : Étape 1 : Étape 2 : 5 3 1 8 5 2 9 3 1 5 5 2 8 9 3 5 1 8 5 2 9 1 3 5 5 2 8 9 ... 3 1 5 8 5 2 9 1 3 5 5 2 8 9 3 1 5 8 5 2 9 1 3 5 2 5 8 9 ... 3 1 5 5 8 2 9 1 3 5 2 5 8 9 3 1 5 5 2 8 9 3 1 5 5 2 8 9 Tableau trié ?
  • 69. Tri à bulles Idée : tant que le tableau n'est pas trié, on le parcourt en effectuant l'opération suivante à la i-ième case : si elle est supérieure à la suivante, on les échange. Exemple avec un tableau d'entiers : Étape 2 : Étape 3 : 3 1 5 5 2 8 9 1 3 5 2 5 8 9 ... 1 3 5 5 2 8 9 1 3 5 2 5 8 9 ... 1 3 5 5 2 8 9 1 3 2 5 5 8 9 ... 1 3 5 2 5 8 9 1 3 2 5 5 8 9 ... 1 3 5 2 5 8 9 Tableau trié ?
  • 70. Tri à bulles Idée : tant que le tableau n'est pas trié, on le parcourt en effectuant l'opération suivante à la i-ième case : si elle est supérieure à la suivante, on les échange. Exemple avec un tableau d'entiers : Étape 3 : Étape 4 : 1 3 5 2 5 8 9 1 3 2 5 5 8 9 ... 1 3 5 2 5 8 9 1 3 2 5 5 8 9 1 3 2 5 5 8 9 1 2 3 5 5 8 9 ... ... 1 3 2 5 5 8 9 1 2 3 5 5 8 9 Tableau trié ? Tableau trié ? Oui.
  • 71. Plan du cours 1 – Récursivité et tris • Introduction à la récursivité • Traces d'exécution de fonctions récursives • Les tris • Le tri par sélection • Le tri à bulles • Complexité des tris
  • 72. Complexité des tris Combien de comparaisons ? (lié au temps d'exécution de l'algorithme) Sur un exemple ou dans le pire des cas, pour n éléments. Tri à bulles Dans tous les cas : ≤ n étapes, n-1 comparaisons par étape donc ≤ n x (n-1) comparaisons au total Tri par sélection Pour n éléments : n étapes, n-i comparaisons par étape pour trouver le min
  • 73. Complexité des tris Combien de comparaisons ? (lié au temps d'exécution de l'algorithme) Sur un exemple ou dans le pire des cas, pour n éléments. Tri à bulles Dans tous les cas : ≤ n étapes, n-1 comparaisons par étape donc ≤ n x (n-1) comparaisons au total Tri par sélection Pour n éléments : n étapes, n-i comparaisons par étape pour trouver le min étape 1 : n-1 comparaisons étape 2 : n-2 comparaisons … étape n-2 : 2 comparaisons étape n-1 : 1 comparaison étape n : 0 comparaison
  • 74. Complexité des tris Combien de comparaisons ? (lié au temps d'exécution de l'algorithme) Sur un exemple ou dans le pire des cas, pour n éléments. Tri à bulles Dans tous les cas : ≤ n étapes, n-1 comparaisons par étape donc ≤ n x (n-1) comparaisons au total Tri par sélection Pour n éléments : n étapes, n-i comparaisons par étape pour trouver le min étape 1 : n-1 comparaisons étape 2 : n-2 comparaisons … nombre total de comparaisons = nombre de carrés du triangle noir étape n-2 : 2 comparaisons étape n-1 : 1 comparaison étape n : 0 comparaison
  • 75. Complexité des tris Combien de comparaisons ? (lié au temps d'exécution de l'algorithme) Sur un exemple ou dans le pire des cas, pour n éléments. Tri à bulles Dans tous les cas : ≤ n étapes, n-1 comparaisons par étape donc ≤ n x (n-1) comparaisons au total Tri par sélection Pour n éléments : n étapes, n-i comparaisons par étape pour trouver le min étape 1 : n-1 comparaisons étape 2 : n-2 comparaisons … nombre total de comparaisons = nombre de carrés du triangle noir = étape n-2 : 2 comparaisons nombre de carrés du rectangle divisé par 2 = étape n-1 : 1 comparaison étape n : 0 comparaison
  • 76. Complexité des tris Combien de comparaisons ? (lié au temps d'exécution de l'algorithme) Sur un exemple ou dans le pire des cas, pour n éléments. Tri à bulles Dans tous les cas : ≤ n étapes, n-1 comparaisons par étape donc ≤ n x (n-1) comparaisons au total Tri par sélection Pour n éléments : n étapes, n-i comparaisons par étape pour trouver le min étape 1 : n-1 comparaisons étape 2 : n-2 comparaisons … n nombre total de comparaisons = carrés nombre de carrés du triangle noir = étape n-2 : 2 comparaisons nombre de carrés du rectangle divisé par 2 = étape n-1 : 1 comparaison n(n-1)/2 étape n : 0 comparaison n-1 carrés
  • 77. Complexité des tris Combien de comparaisons ? (lié au temps d'exécution de l'algorithme) Sur un exemple ou dans le pire des cas, pour n éléments. Tri à bulles Dans le pire des cas (tableau trié dans le sens inverse) : n x (n-1) comparaisons Dans le meilleur cas (tableau trié) : n-1 comparaisons Tri par sélection Dans tous les cas : n x (n-1)/2 comparaisons