Utilisation des tableaux Les tris Utilisation des tableaux
Plan Introduction Tri insertion Tri sélection Tri à bulles Méthodes de recherche Conclusion
Introduction Les tableaux permettent de stocker plusieurs éléments de même type au sein d'une seule entité, lorsque le type de ces éléments possède un ordre total, on peut donc les ranger en ordre croissant ou décroissant, trier un tableau c'est donc ranger les éléments d'un tableau en ordre croissant ou décroissant. Dans ce cours on ne fera que des tris en ordre croissant. Il existe plusieurs méthodes de tri qui se différencient par leur complexité d'exécution et leur complexité de compréhension pour le programmeur.
Introduction Tous les algorithmes de tri utilisent une procédure qui permet d'échanger (de permuter) la valeur de deux variables dans le cas où les variables sont entières, la procédure échanger est la suivante : public void echanger(int[] tableau, int indice1, int indice2) { int iTemp; iTemp = tableau[indice1]; tableau[indice1] = tableau[indice2]; tableau[indice2] = iTemp ; }
Plan Introduction Tri insertion Tri sélection Tri à bulles Méthodes de recherche Conclusion
Trie insertion Dans ce cas, itérativement, nous insérons le prochain élément dans la partie qui est déjà triée précédemment. La partie de départ qui est triée est le premier élément.
Trie insertion La liste à trier est divisée en deux : la partie gauche est triée, et la partie droite est non triée. À chaque passage, le premier élément de la partie non triée est introduit dans la partie triée, de telle sorte que cette dernière reste triée. Pour une liste de n éléments, n − 1 passages sont nécessaires. La complexité de l’algorithme est donc en O(n2).
Trie insertion Exemple:
Trie insertion Algorithme
Trie insertion Avantages du tri par insertion : Méthode naturelle, facile à programmer. De plus, la méthode est d’autant plus rapide que la liste à trier est presque ordonnée : la méthode est plus efficace pour une liste presque triée que pour une liste dans un ordre aléatoire. Un désavantage du tri par insertion est que, même si une liste est presque triée, l’introduction d’un nouvel élément dans cette liste peut nécessiter le mouvement de la plupart des éléments de la liste. Si la liste à trier est très grande, ce mouvement de tous les éléments à chaque introduction d’un nouvel élément dans la liste peut être très coûteux. Il serait souhaitable de pouvoir immédiatement placer un élément à sa place finale. C’est l’avantage du tri par sélection.
Plan Introduction Tri insertion Tri sélection Tri à bulles Méthodes de recherche Conclusion
Trie sélection La liste à trier est divisée en deux : la partie gauche est triée et la partie droite est non triée. De plus, tous les éléments de la partie gauche sont plus petits (ou égaux) que les éléments de la partie droite. À chaque passage, l’élément minimal de la partie non triée est échangé avec le premier élément de la liste non triée. Ainsi, la liste triée croît de 1 élément.
Trie sélection Répéter 1. chercher le plus grand (le plus petit) élément 2. le mettre à la fin (au début)
Trie sélection Exemple:
Trie sélection Algorithme
Trie sélection Complexité : Le pire cas, le meilleur cas et le cas moyen sont pareils (pourquoi?) Pour trouver le plus petit éléments, (n-1) itérations sont nécessaires, pour le 2e plus petit élément (n-2) itérations sont effectuées, .… Pour trouver le dernier plus petit élément, 0 itération sont effectuées. La complexité est donc de O(n(n-1)/2)
Plan Introduction Tri insertion Tri sélection Tri à bulles Méthodes de recherche Conclusion
Tri à bulles Le trie à bulle consiste à parcourir le tableau, par exemple de gauche à droite, en comparant les éléments côte à côte et en les permutant si ils ne sont pas dans le bon ordre. Au cours d’une passe du tableau, les plus grands éléments remontent de proche en proche vers la droite comme des bulles vers la surface. On s’arrête dès que l’on détecte que le tableau est trié : si aucune permutation n’a été faite au cours d’une passe.
Tri à bulles La stratégie de cet algorithme est comme suit : 1. Parcourir le tableau en comparant deux à deux les éléments successifs, permuter s'ils ne sont pas dans l'ordre. 2. Répéter tant que des permutations sont effectuées.
Tri à bulles Exemple:
Tri à bulles Algorithme: FONCTION Tri_bulle (Tableau a[1:n]) REPETER permut = FAUX POUR i DE 0 à n-1 FAIRE SI a[i] > a[i+1] ALORS echanger a[i] et a[i+1] permut = VRAI FIN SI TANT QUE permut = VRAI FIN FONCTION
Tri à bulles La différence entre le tri à bulles et le tri par sélection est que le tri à bulle compare chaque paire (u,v) de cases consécutives du tableau non trié en commençant par le début du tableau. À chaque fois que u > v, u et v sont échangés. Le fait de comparer chaque paire de cases consécutives permet de faire moins de passages que le tri par sélection : si au cours d’un passage aucun échange n’a été effectué, alors la liste est triée et on s’arrête. La complexité dans le pire des cas est toujours O(n2), mais d’un point de vue pratique, le tri à bulles est plus rapide.
Plan Introduction Tri insertion Tri sélection Tri à bulles Méthodes de recherche Conclusion
Méthode de recherche Recherche séquentielle On cherche à partir du début et on parcours l’ensemble des valeurs de notre tableau jusqu’à ce qu’on ait trouvé la valeur souhaité.
Méthodes de recherche La méthode dichotomique La dichotomie (« couper en deux » en grec) est, en algorithmique, un processus de recherche où, à chaque étape, on coupe en deux parties (pas forcément égales) un espace de recherche qui devient restreint à l'une de ces deux parties.
Exemple Prenons un exemple simple et ludique pour illustrer le mécanisme de recherche par dichotomie : Pierre propose à Paul le jeu suivant : « choisis en secret un nombre compris entre 0 et 100 ; je vais essayer de le deviner le plus rapidement possible, en ne pouvant que te poser des questions auxquelles tu réponds par oui ou par non ». Paul choisit 66 et attend les questions de Pierre : Pierre sait que le nombre est entre 0 et 100 ; au milieu se trouve 50, il demande donc : « Est-ce que le nombre est plus grand que 50 ? » Paul : « Oui » Pierre sait maintenant que le nombre est entre 51 et 100 ; au milieu se trouve 75, il demande donc : « Est-ce que le nombre est plus grand que 75 ? » Paul : « Non » Pierre sait maintenant que le nombre est entre 51 et 75 ; au milieu se trouve 63, il demande donc : « Est-ce que le nombre est plus grand que 63 ? » Pierre sait maintenant que le nombre est entre 64 et 75 ; au milieu se trouve 69, il demande donc : « Est-ce que le nombre est plus grand que 69 ? » Pierre sait maintenant que le nombre est entre 64 et 69 ; au milieu se trouve 66, il demande donc : « Est-ce que le nombre est plus grand que 66 ? » Pierre sait maintenant que le nombre est entre 64 et 66 ; au milieu se trouve 65, il demande donc : « Est-ce que le nombre est plus grand que 65 ? » Pierre sait maintenant que le nombre est entre 66 et 66, autrement dit qu'il s'agit de 66 : il a trouvé le nombre choisi par Paul. Cette méthode itérative permet à Pierre de trouver le nombre en posant en moyenne moins de questions que s'il procédait par des questions du type « Est-ce que le nombre est égal à 30 ? ».
Algorithme