algoritmes de recherche
Recherche dans une liste de mots
- Télécharger les listes de mots à partir du lien suivant: fichiersmots.zip
Dezipper les fichiers de mots. Obtenir 4 fichier avec extension
.txtOuvrir un editeur python et enregistrer le fichier (save as …) dans le MÊME dossier.
Les fichiers:
| fichier | contenu |
|---|---|
| gutenberg.txt | Liste exhaustive avec accents, verbes conjugés, quelques noms propres |
| liste_francais.txt | Liste réduite, avec accents |
| ods4.txt | Officiel du Scrabble - Version 4 - 2004 - Sans accents |
| pli07.txt | Petit Larousse Illustré 2007 - Sans accents |
Import des librairies
On aura besoin pour le TP de l’import suivant. Copier et coller ces lignes dans votre première cellule:
La dernière ligne règle le problème de dossier courant pour la lecture de fichiers texte avec la fonction open. Il faudra adapter le chemin de os.chdir en fonction de votre installation.
Executer le fichier
Dans le shell, vérifier que le dossier contient les fichiers
.txtavec la fonctionos.listdir()
Importer un premier fichier texte
Importer la liste de mots du fichier liste_francais.txt dans une liste et afficher les 13 derniers éléments de la liste à l’aide du script suivant.
Par exemple, pour liste_francais.txt:
Recherche séquentielle
Un même algorithme pour plusieurs listes de mots
1. Dans une cellule, coller et executer le script:
2. La fonction de recherche séquentielle. Recopier le script et le compléter à partir de la spécification:
3. Tester alors votre fonction:
On peut lancer un chronomètre juste avant l’appel de la fonction avec l’instruction, puis relever le temps t1-t0:
4. Répéter plusieurs fois l’appel de la fonction
recherche_mot(mots). Par exemple 100 fois (ou 1000 fois pour être encore plus précis). Stocker dans une listeTle temps $t1-t0$ mis par la fonction pour trouver un mot aleatoire. Puis calculer la moyenne des valeurs deTavec la fonctionmeandenumpy:
5. Mettre dans une liste
Lle couple[len(mots), r]
6. Refaire le même travail, pour CHACUNE des listes de mots. Ajouter à chaque fois le nouveau couple [len(mots), r] dans L.
Et ajouter le couple [0,0] (pour une longueur de liste égale à 0, le temps mis est aussi 0).
La liste L devrait alors contenir 5 éléments: [[len(mots1), r1], [len(mots2), r2], ...[0,0]]
Graphique en nuage de points y = temps, x = len(mots)
Recherche dichotomique
1. Copier-coller et completer le script suivant:
2. L’algorithme de recherche dichotomique ne fonctionne que pour des listes sans accents. Tester la fonction avec les seules listes ods4.txt et pli07.txt.
3. On peut améliorer l’étude de la recherche dichotomique en ajoutant un compteur du nombre d’itérations à l’interieur de la fonction. Ce compteur sera incrémenté à chaque itération (while). La fonction devra retourner cette fois un tuple constitué de (-1, i) ou bien de (milieu, i) selon si l’on trouve le mot.
Le nouveau programme de calcul de temps et du nombre d’itérations moyen est alors:
Comparer le nombre d’itérations moyen avec la fonction log binaire: $np.log2(len(mots))$
4. Comparer le nouveau tableau de valeurs T = [[len(mots1), r1], [len(mots2),r2], [0,0]] avec le précédent. Conclure.
Tracé de représentations graphiques pour quelques fonctions
La librairie numpy facilite la creation des ensembles X,Y pour le tracé des courbes. L’instruction X=np.linspace(0.1,50,100) va créer un tableau de 100 valeurs, de 0.1 à 50.
1. représenter sur la même figure les fonctions:
- $Y = X$
- $Y = log_2(X)$
2. Ajouter sur ce même graphique la fonction:
- $Y = X * log_2(X)$
3. Ajouter:
- $Y = X**2$
4. Ajouter:
- $Y = 2**X$
5. Recopier l’allure de ces courbes. Conclure.
Lien
- Version initiale du TP sur la recherche sequentielle et dichotomique: Lien
- Les fichiers de mots viennent de la page: www.3zsoftware.com