ISN TP « Algorithmes de recherche et de tri» Algorithmes de

publicité
ISN
TP « Algorithmes de recherche et de tri»
Algorithmes de recherche -----------------------------------------------------------------------------1) Algorithme de recherche dans une liste triée
Exercice 1
Ouvrir une console Python, recopier le programme suivant et exécutez-le.
Trouvez une stratégie pour trouver la bonne réponse, à chaque fois, en moins de 10 coups.
Exercice 2
Compléter ce programme pour qu’il détermine le nombre mystère que vous avez choisi.
Un peu de maths ….
Si le nombre est compris entre 0 et Max, calculer le nombre de coups maximum pour trouver le nombre mystère.
Application :
Les ordinateurs stockent beaucoup d’informations et ont besoin de les analyser rapidement. Les moteurs de
recherche sur Internet sont confrontés à l’un des plus grands problèmes de recherche au monde puisqu’ils doivent
balayer des milliards de pages en une fraction de seconde. Les données qu’un ordinateur doit rechercher, que ce
soit un mot, un code-barres ou le nom d’un écrivain, sont appelées clés de recherche. Les ordinateurs peuvent
traiter des informations très rapidement et vous pourriez penser que pour trouver quelque chose, ils balayent
l’endroit où elles sont stockées du début jusqu’à la fin, jusqu’à ce qu’ils trouvent les informations souhaitées. Mais
cette méthode est très lente, même pour les ordinateurs. Par exemple, supposons que les rayons d’un supermarché
contiennent 10 000 produits différents. Lorsqu’un code-barres est lu pour vérification, l’ordinateur doit rechercher
le nom et le prix du produit parmi 10 000 numéros. Même si la vérification d’un code ne prenait qu’un millième
de seconde, 10 secondes seraient nécessaires pour balayer toute la liste. Imaginez le temps que prendrait la
vérification des provisions pour une famille entière !
L’algorithme de recherche dichotomique est une meilleure stratégie mais il faut pour cela que les listes soient déjà
triées.
Algorithmes de tris-------------------------------------------------------------------------------------Exercice 2 Le tri par sélection
Le tri par sélection consiste à déterminer le plus petit élément de la liste, l’ôter de la liste initiale puis déterminer le
plus petit élément de la liste restante, et ainsi de suite en construisant une nouvelle liste au fur et à mesure.
1) Dérouler l’algorithme, à la main, sur la liste suivante : [5,8,9,4,1].
2) Implémenter un programme en Python qui permet de trier dans l’ordre croissant une liste d’entiers par sélection.
Réaliser une fonction « tri_selection »
3) Déterminer le nombre de comparaisons nécessaires pour trier huit nombres. Et pour 9 ? 20 ? n ?
Exercice 3 Le tri à bulles
Le tri par remontée de bulles consiste à passer les éléments de la liste en revue plusieurs fois, comparer les éléments
adjacents, et à les échanger s’ils ne sont pas dans l’ordre croissant. Lorsque l‘on réalise un passage, on range le plus
petit élément en début de liste (les bulles les plus légères remontent en début de liste). La liste est classée lorsqu’il n’y
a plus d’éléments à changer de place.
1) Trier la liste suivante avec le tri à bulles :
[61, 1, 25, 33, 70, 20, 34, 19, 68, 79, 64, 24]
Combien de d’échanges a-t-on effectué ?
2) Trier la liste suivante avec le tri à bulles :
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1]
Combien fait-on d’échanges ?
3) Implémenter un programme en Python qui permet de trier dans l’ordre croissant une liste d’entiers par remontée
des bulles.
Réaliser une fonction « echange » qui échange deux valeurs puis un fonction « tri_bulles »
Exercice 4 La fonction tri rapide ou quick sort
L’algorithme de tri rapide, "quick sort" en anglais, inventé par Hoare en 1961, est un algorithme de type
dichotomique. Son principe consiste à séparer l’ensemble des éléments en deux parties. Pour effectuer la séparation,
une valeur pivot est choisie. Les valeurs sont réparties en deux ensembles suivant qu’elles sont plus grandes ou plus
petites que le pivot. Ensuite, les deux ensembles sont triés séparément, suivant la même méthode. L’algorithme de tri
rapide est dit récursif, c'est-à-dire que l’on crée une fonction qui s’auto appelle. le résultat du tri est égal au tri de
l’ensemble dont les valeurs sont inférieures au pivot concaténé à l’ensemble des valeurs supérieures au pivot, ce
dernier étant pris en sandwich entre les deux ensembles.
Le choix du pivot est le problème central de cet algorithme. En effet, l’idéal serait de pouvoir répartir les deux
ensembles en deux parties de taille à peu prés égales : il nous faudrait donc déterminer la médiane de cette liste.
Cependant, la recherche de cette médiane qui permettrait une partition parfaite de l’ensemble en deux parties égales
aurait un coût trop important (en termes de temps). C’est pour cela que le pivot est choisit de façon aléatoire parmi les
valeurs de l’ensemble. Dans la pratique, le pivot est le premier ou le dernier élément de l’ensemble à fractionner. En
moyenne, les deux ensembles seront donc de taille sensiblement égale.
1) Trier la liste suivante avec un tri rapide en choisissant le premier élément comme pivot :
[61, 1, 25, 33, 70, 20, 34, 19, 68, 79, 64, 24]
Combien de comparaisons a-t-on effectué ?
2) Trier la même liste suivante avec un tri à bulles.
Combien de comparaisons a-t-on effectué ?
Le « Quick Sort » est bien plus rapide en particulier sur les longues listes.
Exercice 5 Le tri par insertion
C’est le tri utilisé par les joueurs de cartes pour trier leur jeu.
Le tri par insertion permet de retirer chaque objet d’un groupe non trié et de l’insérer à la bonne position dans une
liste croissante (voir figure ci-dessous). À chaque insertion, le groupe d’objets non triés réduit et la liste triée
augmente jusqu’à ce que la liste entière soit définitivement classée.
Trier la liste suivante par insertion :
[61, 1, 25, 33, 70, 20, 34, 19, 68, 79, 64, 24]
Combien de comparaisons a-t-on effectué ?
Téléchargement