On désigne par algorithmique ou algorithmie l`ensemble des

publicité
CER SCHMITT Mathieu
Prosit aller : Quelle galère
Objectifs :
-
Savoir manipuler des données avec les Algorithmes
Définition des mots-clés :
-
Algorithme :
On désigne par algorithmique ou algorithmie l’ensemble des activités logiques qui relèvent des
algorithmes. Dans le cas général, l’algorithmique s’effectue au moyen de calculs.
-
Classeur :
Un classeur en informatique permet de classer des donner. Par exemple, sous Excel, un classeur
permet d’effectuer des opérations comme classement, tri,…
-
Algorithme de Tri :
En informatique ou en mathématiques, un algorithme de tri est un algorithme qui permet
d'organiser une collection d'objets selon un ordre déterminé. Les objets à trier font donc partie d'un
ensemble muni d'une relation d'ordre (de manière générale un ordre total). Les ordres les plus
utilisés sont l’ordre numérique et l'ordre lexicographique (dictionnaire).
[Tapez un texte]
Page 1
CER SCHMITT Mathieu
-
Automate :
Dans le domaine de l'informatique ou des graphes, on nomme automate une machine à traiter de
l'information qui se caractérise par :
o
o
différents états
un système de transition d'états qui absorbe soit des caractères, soit des entités
syntaxiques d'ordre supérieur (variable, entier, flottant, etc.)
On peut définir les automates par des modèles formels (voir aussi : automate fini, automate à pile,
machine de Turing). La grande relation entre l'automate et l'informatique c'est d'avoir créé une
intelligence artificielle et cette dernière c'est l'ensemble des programmes informatiques existants.
-
Programme informatique :
Un programme informatique est une succession d'instructions exécutable par l'ordinateur. Toutefois,
l'ordinateur ne sait manipuler que du binaire, c'est-à-dire une succession de 0 et de 1. Il est donc
nécessaire d'utiliser un langage de programmation pour écrire de façon lisible, c'est-à-dire avec des
instructions compréhensibles par l'humain car proches de son langage, les instructions à exécuter par
l'ordinateur.
-
Données :
Informations utilisées par un logiciel. Elles peuvent être créées par l'utilisateur ou par le programme
lui-même.
Axes de recherche :
Etudier les algorithmes de trie et leurs contextes
Permuter deux valeurs
Pour trier les valeurs d'un tableau, il va être nécessaire de permuter les valeurs contenues dans les
différentes cases du tableau. Pour cela, une fonction de permutation, qui sera appelée "echanger",
doit être écrite. Cette fonction prend en argument un tableau et deux entiers i et j. Elle récupère la
valeur contenue dans la iième case du tableau, affecte à cette case la valeur contenue dans la jième
case, puis affecte à la jième case l'ancienne valeur de la iième case.
[Tapez un texte]
Page 2
CER SCHMITT Mathieu
Exemple :
Considérons le tableau T suivant [1;4;3;2;5] dans lequel la permutation des valeurs contenues dans la
première et la troisième case va être effectuée (la première case du tableau portant l'indice 0). Soit
i=1 et j=3.
Etape 1 : Mémorisation de la valeur contenue dans la case i=1 : M=T(i)=T(1)=4
Etape 2 : Affectation à la iième case de la valeur de la jième case: T(i)=T(j)=T(3)=2. Soit T=[1;2;3;2;5]
Etape 4 : Affectation à la jième case de la valeur contenue dans la mémoire M : T(j)=M. Soit
T=[1;2;3;4;5]
C'est ce qu'il fallait obtenir.
Code source :
Algorithme de permutation
échanger(tableau T, entier i, entier j)
début
entier M
M<-T(i)
T(i)<-T(j)
T(j)<-M
fin
Le tri à bulle
L'algorithme du tri bulle - ou bubble sort - consiste à regarder les différentes valeurs adjacentes d'un
tableau, et à les permuter si le premier des deux éléments est supérieur au second. L'algorithme se
déroule ainsi : les deux premiers éléments du tableau sont comparés, si le premier élément est
supérieur au second, une permutation est effectuée. Ensuite, sont comparés et éventuellement
permutés les valeurs 2 et 3, 3et 4 jusque (n-1) et n. Une fois cette étape achevée, il est certain que le
dernier élément du tableau est le plus grand. L'algorithme reprend donc pour classer les (n-1)
éléments qui précédent. L'algorithme se termine quand il n'y a plus de permutations possibles. Pour
classer les n valeurs du tableau, il faut, au pire, effectuer l'algorithme n fois.
Cet algorithme porte le nom de tri bulle car, petit à petit, les plus grands éléments du tableau
remontent, par le jeu des permutations, en fin de tableau. Dans un aquarium il en va de même : les
plus grosses bulles remontent plus rapidement à la surface que les petites qui restent collés au fond.
[Tapez un texte]
Page 3
CER SCHMITT Mathieu
Exemple :
Evolution du tableau au fil de l'algorithme (en bleu, les éléments qui sont comparés, et
éventuellement permutés, pour passer à la ligne suivante).
Code source :
Algorithme de tri à bulle
tri_bulle(tableau T)
debut
entier longueur, i
booleen inversion
longueur<-taille(T)
faire
inversion=faux
pour i=0 à (longueur-1)
si T(i)>T(i+1)
echanger(T,i,i+1)
inversion<-vrai
fin si
fin pour
tantque inversion
fin
[Tapez un texte]
Page 4
CER SCHMITT Mathieu
Tri par sélection
Le tri par sélection est l'un des tris les plus instinctifs. Le principe est que pour classer n valeurs, il
faut rechercher la plus grande valeur et la placer en fin de liste, puis la plus grande valeur dans les
valeurs restante et la placer en avant dernière position et ainsi de suite...
Considérons un tableau à n éléments. Pour effectuer le tri par sélection, il faut rechercher dans ce
tableau la position du plus grand élément. Le plus grand élément est alors échangé avec le dernier
élément du tableau. Ensuite, on réitère l'algorithme sur le tableau constitué par les (n-p) premiers
éléments où p est le nombre de fois où l'algorithme a été itéré. L'algorithme se termine quand p=(n1), c'est à dire quand il n'y a plus qu'une valeur à sélectionner ; celle ci est alors la plus petite valeur
du tableau.
Exemple
Grandes étapes de l'évolution du tableau au fil de l'algorithme. En bleu, les valeurs déja traitées.
[Tapez un texte]
Page 5
CER SCHMITT Mathieu
Algorithme de tri par séléction
tri_selection(tableau T)
debut
entier longueur, maxi, i
longueur<-taille(T)
tantque(longueur>0) faire
//recherche de la position du plus grand élément dans le tableau
non encore trié
maxi<-0;
pour i de 1 à (longueur-1) faire
si T(i)>T(maxi) alors
maxi<-i
fin si
fin pour
//echange du plus grand élément avec le dernier
echanger(T,maxi,longueur-1)
//traitement du reste du tableau
longueur<-longueur-1
fin tantque
fin
[Tapez un texte]
Page 6
CER SCHMITT Mathieu
Tri par insertion
Le tri par insertion est un autre algorithme que l'on peut qualifier de naïf. Cet algorithme consiste à
piocher une à une les valeurs du tableau et à les insérer, au bon endroit, dans le tableau trié
constitué des valeurs précédemment piochées et triées. Les valeurs sont piochées dans l'ordre où
elles apparaissent dans le tableau. Soit p l'indice de la valeur piochée, les (p-1) premières valeurs du
tableau constituent le tableau trié dans lequel va être inséré la pième valeur. Au début de l'algorithme,
il faut considérer que la liste constituée du seul premier élément est trié : c'est vrai puisque cette
liste ne comporte qu'un seul élément. Ensuite, on insère le second élément (p=2), puis le troisième
(p=3) etc. Ainsi, p varie de 2 à n, où n est le nombre total d'éléments du tableau.
Le problème de cet algorithme est qu'il faut parcourir le tableau trié pour savoir à quel endroit
insérer le nouvel élément, puis décaler d'une case toutes les valeurs supérieures à l'élément à
insérer. En pratique, le tableau classé est parcouru de droite à gauche, c'est à dire dans l'ordre
décroissant. Les éléments sont donc décalés vers la droite tant que l'élément à insérer est plus petit
qu'eux.. Dés que l'élément à insérer est plus grand qu'un des éléments du tableau triée il n'y a plus
de décalage, et l'élément est inséré dans la case laissée vacante par les éléments qui ont été décalés.
Exemple :
Grandes étapes de l'évolution du tableau au fil de l'algorithme. En bleu, le tableau trié, en rouge, la
valeur de la mémoire qui contient la valeur à insérer.
[Tapez un texte]
Page 7
CER SCHMITT Mathieu
Algorithme de Tri par insertion
tri_insertion(tableau T)
debut
entier longueur, i, memoire, compteur;
booleen marqueur;
longueur<-taille(T)
pour i=1 à (longueur-1) faire
memoire<-T(i) //valeur à insérer au tour i
compteur<-(i-1)
faire
marqueur=faux //on n'a pas fait de décalage
si T(compteur)>memoire alors
T(compteur+1)<-T(compteur) //décalage des plus grandes
valeurs du tableau
compteur<-compteur-1
marqueur=vrai //on vient de faire un décalage
fin si
si (compteur<0) alors //on a atteint la premiére valeur du tableau
marqueur=faux //il n'y a plus de décalages possibles
fin si
tantque marqueur
T(compteur+1)<-memoire //affectation de la valeur à insérer dans la
bonne case
fin pour
fin
[Tapez un texte]
Page 8
CER SCHMITT Mathieu
Algorithme de tri Shell
Ce tri, proposé en 1959 par Donald L. Shell, constitue une variante optimisée du tri par
insertion. Le tri par insertion provoquait le décalage de tous les éléments plus grands que
l'élément à insérer. Dans le tri Shell, les éléments ne sont pas décalés d'un élément à la fois,
mais de plusieurs éléments, dont la différence d'indice est appelée "pas". Ainsi, à chaque
étape, le tri est dégrossit puis le pas est réduit. Chaque réduction de pas provoque un affinage
du tri. Lorsque le pas atteint la valeur 1, cela revient à effectuer le tri par insertion. Cependant,
cette fois, le tri par insertion est appliqué à un tableau possédant un certain ordre (provoqué
par les étapes de préparations où le pas est supérieur à un). En effet, les différentes étapes où
le pas est supérieur à un provoque le regroupement des différentes valeurs par groupes de la
même taille que le pas. Ainsi par exemple, après une étape où le pas est de quatre, les quatre
premières valeurs du tableau sont les quatre plus petites, les quatre suivantes sont plus
grandes… En résumé, le tri Shell permet d'organiser plus rapidement le tableau à trier.
Le choix du pas ne doit pas s'effectuer n'importe comment. En effet, les valeurs des différents
pas successifs ne doivent pas, pour des raisons de plus grande efficacité, être multiples des
autres et il faut absolument réaliser l'étape ou le pas est égal à un. La formule la plus
couramment utilisée pour calculer la valeur des pas successifs est la suivante U(n+1)=(3Un+1)
avec U0=0.
Soit n le nombre d'éléments du tableau et p le pas, le pas doit être tel que p<n. Certains
algorithmes imposent la taille des pas successifs, qui sont, par exemple, écrits en dur au sein
du programme. L'inconvénient est que le nombre de valeurs à trier peut être bien supérieur au
plus grand pas prévu par la personne ayant implémenté l'algorithme. La version qui est
proposée ici préfère calculer, à l'aide de la formule donnée ci-dessus, le plus grand pas p tel
que p<n. Pour trouver les autres valeurs successives de p, il suffit, à chaque étape, de diviser p
par 3 (division entière).
[Tapez un texte]
Page 9
Téléchargement