Leçon 6

Traitements des tableaux en Python

Dans le répertoire Python créez un dossier cours6. Il contiendra tous les fichiers de cette leçon.

Trois méthodes de tri

Tri par sélection

Écrire un programme tri_selection.py permettant de trier un tableau, c’est-à-dire ordonner les valeurs des éléments dans l’ordre croissant. On utilisera la méthode suivante:

  1. On recherche la plus petite valeur du tableau et on la place au rang 0
  2. On recommence le même travail au rang 1, 2 et ainsi de suite jusqu'à ce que le tableau soit totalement trié.

Un seul tableau est utilisé lors de ce tri. On supposera le tableau déjà initialisé.
Exemple :

  1. L = [30,10,1,5,20,7,7] On permute 30 premier élément de la liste non ordonnée et 1 minimum de cette liste
  2. L = [1, 10, 30, 5, 20, 7, 7] On permute 10 premier élément de la liste non ordonnée et 5 minimum de cette liste.
  3. L =[1, 5, 30, 10, 20, 7, 7] On permute 30 premier élément de la liste non ordonnée et 7 minimum de cette liste
  4. L =[1, 5, 7, 10, 20, 30, 7] On permute 10 premier élément de la liste non ordonnée et 7 minimum de cette liste
  5. L =[1, 5, 7, 7, 20, 30, 10] On permute 20 premier élément de la liste non ordonnée et 10 minimum de cette liste
  6. L = [1, 5, 7, 7, 10, 30,20] On permute 30 premier élément de la liste non ordonnée et 20 minimum de cette liste
  7. L = [1, 5, 7, 7, 10, 20, 30]
Aide : Algorithme

Tri à bulle

Cette méthode consiste à faire remonter progressivement les plus grands éléments d'un tableau, comme les bulles d'air remontent à la surface d'un liquide. On compare deux élément successifs et on les permute éventuellement. Le tri est fini lorsque sur un passage aucune permutation a été réalisée. Pour cela on pourra utiliser une variable booléenne tri qui prend la valeur false dès que l'on fait une permutation.
Exemple :

1er passage 2ième passage 3ième passage 4ième passage
[30,10,1,5,20,7,7]
[10,30,1,5,20,7,7]
[10,1,30,5,20,7,7]
[10,1,5,30,20,7,7]
[10,1,5,20,30,7,7]
[10,1,5,20,7,30,7]
[10,1,5,20,7,7,30]
[10,1,5,20,7,7,30]
[1,10,5,20,7,7,30]
[1,5,10,20,7,7,30]
[1,5,10,7,20,7,30]
[1,5,10,7,7,20,30]
 
 
[1,5,10,7,7,20,30]
[1,5,7,10,7,20,30]
[1,5,7,7,10,20,30]
 
 
 
 
[1,5,7,7,10,20,30]
 
 
 
 
 
 

Écrire un programme tri_bulle.py qui applique cette méthode

Aide : Algorithme

Le tri par insertion

Principe

Le tableau comporte une partie triée et une autre non triée.
On insère dans la partie triée, au bon endroit, le premier élément de la partie non triée de façon à obtenir une partie triée augmentée d'un élément.
On a fini lorsque la partie non triée est vide.

Exemple :

Soit le tableau T=[3, 10, 1, 8, 52, 22].

  1. T=[3, 10, 1, 8, 52, 22] partie triée [3], élément à insérer 10, on obtient T=[3, 10, 1, 8, 52, 22]
  2. T=[3, 10, 1, 8, 52, 22] partie triée [3, 10], élément à insérer 1, on obtient T=[1, 3, 10, 8, 52, 22]
  3. T=[1, 3, 10, 8, 52, 22] partie triée [1, 3, 10], élément à insérer 8, on obtient T=[1, 3, 8, 10, 52, 22]
  4. T=[1, 3, 8, 10, 52, 22] partie triée [1, 3, 8, 10], élément à insérer 52, on obtient T=[1, 3, 8, 10, 52, 22]
  5. T=[1, 3, 8, 10, 52, 22] partie triée [1, 3, 8, 10, 52], élément à insérer 22, on obtient T=[1, 3, 8, 10, 22, 52]
Aide : Algorithme

Recherche d'un élément dans une liste triée

Recherche simple

Écrire un programme recherche.py permettant de retrouver une valeur dans une liste triée, cette valeur sera saisie au clavier.
On indiquera en résultat, la position de la valeur dans la liste. La valeur recherchée peut aussi être absente de la liste.


Aide : Algorithme

Recherche par dichotomie.

Exemples : L=[1,5,7,7,20,30]

  1. On cherche 5 $$\begin{array}{|c|c|c|c|c|c|}\hline 1&5&7&7&20&30\\ \hline inf=0&&&&&sup=5\\ && milieu=\dfrac{0+5}{2}=2 &&&\\ &~~& T[2]=7 &&&\\ & & 5 < 7 &&&\\ \hline ~~~~~~~~~~~~1~~~~~~~~~~~~&~~~~~~~~~~~~5~~~~~~~~~~~~& ~~~~~~~~~~~~7~~~~~~~~~~~~&~~~~~~~~~~~~7~~~~~~~~~~~~&~~~~~~~~~~~~20~~~~~~~~~~~~&~~~~~~~~~~~~30~~~~~~~~\\ \hline inf=0 & sup=milieu-1=1&&&\\ ~milieu=\dfrac{0+1}{2}=0& & &&&\\ T[0]=1 &&&&&\\ 5>1 && &&&\\ \hline ~~~~~~~~~~~~1~~~~~~~~~~~~&~~~~~~~~~~~~5~~~~~~~~~~~~& ~~~~~~~~~~~~7~~~~~~~~~~~~&~~~~~~~~~~~~7~~~~~~~~~~~~&~~~~~~~~~~~~20~~~~~~~~~~~~&~~~~~~~~~~~~30~~~~~~~~\\ \hline & inf=milieu+1=1 &&&\\ & sup=1&&&\\ &~milieu=\dfrac{1+1}{2}=1 & &&&\\ &T[1]=5 &&&&\\ \hline \end{array}$$
  2. On cherche 30. $$\begin{array}{|c|c|c|c|c|c|}\hline 1&5&7&7&20&30\\ \hline inf=0&&&&&sup=5\\ && milieu=\dfrac{0+5}{2}=2& &&\\ && T[2]=7& &&\\ & & 30>7 & &&\\ \hline ~~~~~~~~~~~~1~~~~~~~~~~~~&~~~~~~~~~~~~5~~~~~~~~~~~~& ~~~~~~~~~~~~7~~~~~~~~~~~~&~~~~~~~~~~~~7~~~~~~~~~~~~&~~~~~~~~~~~~20~~~~~~~~~~~~&~~~~~~~~~~~~30~~~~~~~~\\ \hline & &&inf=milieu+1=3 &milieu=\dfrac{3+5}{2}=4&sup=5\\ & & &&&\\ & &&&T[4]=20&\\ & & &&30>20&\\ \hline ~~~~~~~~~~~~1~~~~~~~~~~~~&~~~~~~~~~~~~5~~~~~~~~~~~~& ~~~~~~~~~~~~7~~~~~~~~~~~~&~~~~~~~~~~~~7~~~~~~~~~~~~&~~~~~~~~~~~~20~~~~~~~~~~~~&~~~~~~~~~~~~30~~~~~~~~\\ \hline & &&& &inf=milieu+1=5\\ & & &&&~milieu=\dfrac{5+5}{2}=5\\ &&&&&T[5]=30 \\ \hline \end{array}$$
  3. On cherche 2 $$\begin{array}{|c|c|c|c|c|c|}\hline 1&5&7&7&20&30\\ \hline inf=0&&&&&sup=5\\ && milieu=\dfrac{0+5}{2}=2 &&&\\ &~~& T[2]=7 &&&\\ & & 2 < 7 &&&\\ \hline ~~~~~~~~~~~~1~~~~~~~~~~~~&~~~~~~~~~~~~5~~~~~~~~~~~~& ~~~~~~~~~~~~7~~~~~~~~~~~~&~~~~~~~~~~~~7~~~~~~~~~~~~&~~~~~~~~~~~~20~~~~~~~~~~~~&~~~~~~~~~~~~30~~~~~~~~\\ \hline inf=0 & sup=milieu-1=1&&&\\ ~milieu=\dfrac{0+1}{2}=0& & &&&\\ T[0]=1 &&&&&\\ 2>1 && &&&\\ \hline ~~~~~~~~~~~~1~~~~~~~~~~~~&~~~~~~~~~~~~5~~~~~~~~~~~~& ~~~~~~~~~~~~7~~~~~~~~~~~~&~~~~~~~~~~~~7~~~~~~~~~~~~&~~~~~~~~~~~~20~~~~~~~~~~~~&~~~~~~~~~~~~30~~~~~~~~\\ \hline & inf=milieu+1=1 &&&\\ &~milieu=\dfrac{1+1}{2}=1 & &&&\\ &T[1]=5 &&&&\\ &2<5 &&&&\\ \hline ~~~~~~~~~~~~1~~~~~~~~~~~~&~~~~~~~~~~~~5~~~~~~~~~~~~& ~~~~~~~~~~~~7~~~~~~~~~~~~&~~~~~~~~~~~~7~~~~~~~~~~~~&~~~~~~~~~~~~20~~~~~~~~~~~~&~~~~~~~~~~~~30~~~~~~~~\\ \hline sup=milieu-1=0&inf&&&&\\ \hline \end{array}$$

Aide : Algorithme

Algorithme des k plus proches voisins

Principe

Etant donné $n$ nombres décrivant une liste points=$[x_0,\,x_1,\, ......x_{n-1}]$ et x une valeur donnée. L'algorithme des k plus proches voisins consiste à trouver la liste voisins des k valeurs de points les plus proche de x.

Méthode

Exemples : points=[22,30,20,8,5,50,7], k=3 et x=10. On cherche les 3 plus proche voisins de 10 dans points

Écrire un programme voisins.py permettant de répondre au prolème des k plus proche voisins.

Aide : Algorithme