SlideShare a Scribd company logo
1 of 66
Download to read offline
DUT SRC – IUT de Marne-la-Vallée
          23/01/2013
    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 Morpion : 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.
     - Note de remplissage de cours à trous et/ou note globale de TP à la fin
     du semestre, prenant en compte votre avancée à chaque séance.
 Pendant les cours :                                      + note F. Kerdjoudj
    - Devoir final fin mai ou début juin (29 mai ?).
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 mise en abyme

  Qu’est-ce qu’une poupée russe ?




 Photo Malix L.
 http://www.flickr.com/photos/_malix_/6970987365/
Récursivité

 • Une mise en abyme

  Qu’est-ce qu’une poupée russe ?

                                                    Une poupée
                                                    russe est une
                                                    poupée qui
                                                    contient :
                                                    - soit rien
                                                    - soit une autre
                                                    poupée russe
                                                    plus petite




 Photo Malix L.
 http://www.flickr.com/photos/_malix_/6970987365/
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)
                             Fin si
                             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)
                             Fin si                    entier
                             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
                                                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
       Fin si                                         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)
       Fin si
       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)
       Fin si
       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)                        ?
       Fin si                                                 factorielle(2)
       renvoyer resultat
                                                                     ?
  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
       Fin si                                                 factorielle(2)
       renvoyer resultat
                                                                     1
  Fin
                                                              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                      Fin si
                                            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            Fin si
                                              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

More Related Content

What's hot

Les algorithmes recurrents
Les algorithmes recurrentsLes algorithmes recurrents
Les algorithmes recurrents
mohamed_SAYARI
 
Correction md2 fabien orienté object
Correction md2 fabien orienté objectCorrection md2 fabien orienté object
Correction md2 fabien orienté object
yahyaoui hamdi
 
Cours9 programmation linéaire
Cours9 programmation linéaireCours9 programmation linéaire
Cours9 programmation linéaire
Aroussia Othmen
 
Les algorithmes avancés
Les algorithmes avancésLes algorithmes avancés
Les algorithmes avancés
mohamed_SAYARI
 
Ch2 Algorthmique Avancée - Récursivité
Ch2 Algorthmique Avancée - RécursivitéCh2 Algorthmique Avancée - Récursivité
Ch2 Algorthmique Avancée - Récursivité
lotfibenromdhane
 
Ch3 Algorthmique Avancée - Méthodes Récursives
Ch3 Algorthmique Avancée - Méthodes RécursivesCh3 Algorthmique Avancée - Méthodes Récursives
Ch3 Algorthmique Avancée - Méthodes Récursives
lotfibenromdhane
 
Cours maths s1.by m.e.goultine
Cours maths s1.by m.e.goultineCours maths s1.by m.e.goultine
Cours maths s1.by m.e.goultine
Abdel Hakim
 
Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétude
Sana Aroussi
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivations
Sana Aroussi
 
Chapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsChapitre v algorithmes gloutons
Chapitre v algorithmes gloutons
Sana Aroussi
 

What's hot (17)

Les algorithmes recurrents
Les algorithmes recurrentsLes algorithmes recurrents
Les algorithmes recurrents
 
Correction md2 fabien orienté object
Correction md2 fabien orienté objectCorrection md2 fabien orienté object
Correction md2 fabien orienté object
 
Cours9 programmation linéaire
Cours9 programmation linéaireCours9 programmation linéaire
Cours9 programmation linéaire
 
Oc1 2013
Oc1 2013Oc1 2013
Oc1 2013
 
traitement de signal cours
traitement de signal cours traitement de signal cours
traitement de signal cours
 
Part1
Part1Part1
Part1
 
Oc3 2013
Oc3 2013Oc3 2013
Oc3 2013
 
Les algorithmes avancés
Les algorithmes avancésLes algorithmes avancés
Les algorithmes avancés
 
Ch2 Algorthmique Avancée - Récursivité
Ch2 Algorthmique Avancée - RécursivitéCh2 Algorthmique Avancée - Récursivité
Ch2 Algorthmique Avancée - Récursivité
 
Ch3 Algorthmique Avancée - Méthodes Récursives
Ch3 Algorthmique Avancée - Méthodes RécursivesCh3 Algorthmique Avancée - Méthodes Récursives
Ch3 Algorthmique Avancée - Méthodes Récursives
 
Cours maths s1.by m.e.goultine
Cours maths s1.by m.e.goultineCours maths s1.by m.e.goultine
Cours maths s1.by m.e.goultine
 
POO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & ObjetPOO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & Objet
 
Cours maths
Cours mathsCours maths
Cours maths
 
Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétude
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivations
 
Chapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsChapitre v algorithmes gloutons
Chapitre v algorithmes gloutons
 
GEII - Ma3 - Suites et séries
GEII - Ma3 - Suites et sériesGEII - Ma3 - Suites et séries
GEII - Ma3 - Suites et séries
 

Viewers also liked (8)

INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3INF120 - Algo DUT SRC1 - Cours 3
INF120 - Algo DUT SRC1 - Cours 3
 
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
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
algorithmique
algorithmiquealgorithmique
algorithmique
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
Dc 1
Dc 1Dc 1
Dc 1
 
Chapitre 1 rappel
Chapitre 1   rappelChapitre 1   rappel
Chapitre 1 rappel
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite complet
 

More from PGambette

More from PGambette (13)

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 2
INF120 - Algo DUT SRC1 - Cours 2INF120 - Algo DUT SRC1 - Cours 2
INF120 - Algo DUT SRC1 - Cours 2
 
INF120 - Algo DUT SRC1 - Cours 1
INF120 - Algo DUT SRC1 - Cours 1INF120 - Algo DUT SRC1 - Cours 1
INF120 - Algo DUT SRC1 - Cours 1
 

Recently uploaded

Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
ssuserc72852
 
Bilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdfBilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdf
AmgdoulHatim
 

Recently uploaded (20)

Intégration des TICE dans l'enseignement de la Physique-Chimie.pptx
Intégration des TICE dans l'enseignement de la Physique-Chimie.pptxIntégration des TICE dans l'enseignement de la Physique-Chimie.pptx
Intégration des TICE dans l'enseignement de la Physique-Chimie.pptx
 
L application de la physique classique dans le golf.pptx
L application de la physique classique dans le golf.pptxL application de la physique classique dans le golf.pptx
L application de la physique classique dans le golf.pptx
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANKRAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
 
Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
Conférence Sommet de la formation 2024 : Développer des compétences pour la m...Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 
Echos libraries Burkina Faso newsletter 2024
Echos libraries Burkina Faso newsletter 2024Echos libraries Burkina Faso newsletter 2024
Echos libraries Burkina Faso newsletter 2024
 
La mondialisation avantages et inconvénients
La mondialisation avantages et inconvénientsLa mondialisation avantages et inconvénients
La mondialisation avantages et inconvénients
 
Les roches magmatique géodynamique interne.pptx
Les roches magmatique géodynamique interne.pptxLes roches magmatique géodynamique interne.pptx
Les roches magmatique géodynamique interne.pptx
 
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
 
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projet
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projetFormation échiquéenne jwhyCHESS, parallèle avec la planification de projet
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projet
 
les_infections_a_streptocoques.pptkioljhk
les_infections_a_streptocoques.pptkioljhkles_infections_a_streptocoques.pptkioljhk
les_infections_a_streptocoques.pptkioljhk
 
L'expression du but : fiche et exercices niveau C1 FLE
L'expression du but : fiche et exercices  niveau C1 FLEL'expression du but : fiche et exercices  niveau C1 FLE
L'expression du but : fiche et exercices niveau C1 FLE
 
Formation qhse - GIASE saqit_105135.pptx
Formation qhse - GIASE saqit_105135.pptxFormation qhse - GIASE saqit_105135.pptx
Formation qhse - GIASE saqit_105135.pptx
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Bilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdfBilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdf
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
 
658708519-Power-Point-Management-Interculturel.pdf
658708519-Power-Point-Management-Interculturel.pdf658708519-Power-Point-Management-Interculturel.pdf
658708519-Power-Point-Management-Interculturel.pdf
 
STRATEGIE_D’APPRENTISSAGE flee_DU_FLE.pdf
STRATEGIE_D’APPRENTISSAGE flee_DU_FLE.pdfSTRATEGIE_D’APPRENTISSAGE flee_DU_FLE.pdf
STRATEGIE_D’APPRENTISSAGE flee_DU_FLE.pdf
 

INF220 - Algo DUT SRC1 - Cours 1 - 2013

  • 1. DUT SRC – IUT de Marne-la-Vallée 23/01/2013 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 Morpion : 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. - Note de remplissage de cours à trous et/ou note globale de TP à la fin du semestre, prenant en compte votre avancée à chaque séance. Pendant les cours : + note F. Kerdjoudj - Devoir final fin mai ou début juin (29 mai ?).
  • 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 mise en abyme Qu’est-ce qu’une poupée russe ? Photo Malix L. http://www.flickr.com/photos/_malix_/6970987365/
  • 15. Récursivité • Une mise en abyme Qu’est-ce qu’une poupée russe ? Une poupée russe est une poupée qui contient : - soit rien - soit une autre poupée russe plus petite Photo Malix L. http://www.flickr.com/photos/_malix_/6970987365/
  • 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.
  • 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 : factorielle(1) = 1 factorielle(2) = 1x2 = 2 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(2) = 1x2 = 2 Formule d'hérédité : 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 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 ...
  • 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 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 ...
  • 21. 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 ...
  • 22. 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 ...
  • 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 : Type de sortie : Variable : Début 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 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) Fin si renvoyer resultat Fin
  • 25. 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) Fin si entier renvoyer resultat Fin
  • 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 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 Fin si renvoyer resultat renvoyer resultat Fin Fin
  • 27. 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
  • 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 sinon : resultat ← n x factorielle(n-1) Fin si renvoyer resultat Fin
  • 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 ? Variable : entier resultat factorielle(4) Début Si n=1 alors : ? resultat ← 1 factorielle(3) sinon : resultat ← n x factorielle(n-1) Fin si renvoyer resultat Fin
  • 30. 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) ? Fin si factorielle(2) renvoyer resultat ? Fin factorielle(1)
  • 31. 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 Fin si factorielle(2) renvoyer resultat 1 Fin factorielle(1)
  • 32. Récursivité Même concept que la preuve par récurrence La “minute mathématique” Théorème : Je sais monter une échelle
  • 33. 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.
  • 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 : ax0=0 Initialisation : ? ax1=a ? a x 2 = 2a a x 3 = 3a ? Formule d'hérédité :
  • 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 : 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) …
  • 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. 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) …
  • 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. Pour calculer a x n : Initialisation : ax0=0 Formule d'hérédité : a x n = a x (n-1) + a
  • 38. 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
  • 39. 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 Fin si renvoyer resultat Fin
  • 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.
  • 41. 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
  • 42. 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
  • 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”) ? Il faut faire la trace de trouveBouton(10,5,”d1”).
  • 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 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”)
  • 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 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”)
  • 46. 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”)
  • 47. 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”)
  • 48. 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
  • 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 ?
  • 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 : quel type ? Type pour stocker plusieurs éléments ?
  • 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 : quel type ? Type pour stocker plusieurs éléments ? → un tableau ! → autres structures de données au prochain cours.
  • 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 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
  • 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 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
  • 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 trier = to sort
  • 55. 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 ...
  • 56. 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
  • 57. 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
  • 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.
  • 59. Tri par sélection (ou tri par extraction) La “minute culturelle” http://www.youtube.com/watch?v=Ns4TPTC8whw
  • 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 i vaut 1
  • 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 1 3 5 8 5 2 9
  • 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 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.
  • 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 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
  • 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 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 Fin si i ← i+1 Fin Tant que renvoyer position Fin
  • 65. 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
  • 66. 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