Étude — l'index des mots, de bout en bout
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 17 — Les dictionnaires dévoilés : le hachage
Énoncé
Construire l'index inverse d'un texte fourni sous forme de liste de mots, associant à chaque mot la liste de toutes ses positions. (a) Implémenter cette fonction et donner sa complexité temporelle. (b) En déduire une méthode efficace pour trouver les positions d'un mot et chercher les mots apparaissant plus de fois. Comparer avec le coût d'une recherche sans indexation. (c) Discuter de l'usage de la mémoire et de l'échange espace-temps. (d) Expliquer en quoi cette structure est la base des moteurs de recherche sur le Web.
Corrigé
(a)
def index_inverse(mots: list) -> dict:
index = {}
for i in range(len(mots)):
mot = mots[i]
if mot not in index:
index[mot] = []
index[mot].append(i)
return index
Cette construction effectue un seul parcours de la liste de mots de longueur . À chaque mot, l'accès ou l'insertion dans le dictionnaire s'effectue en moyen. La complexité de construction est donc linéaire, en en moyenne. (b)
- Recherche des positions d'un mot :
index.get(mot, [])s'exécute en moyen, tandis qu'un parcours complet du texte pour chaque recherche prendrait . - Recherche des mots apparaissant plus de fois : il suffit de parcourir les couples de l'index et de filtrer sur la longueur de la liste associée (
len(index[mot]) > k). Cette opération prend où est la taille du vocabulaire unique (). (c) L'index requiert un espace mémoire supplémentaire en car il duplique l'ensemble des positions des mots. C'est l'illustration de l'échange espace-temps : on alloue une quantité mémoire proportionnelle à la taille des données pour pouvoir interroger ces données instantanément et de façon répétée. (d) Un moteur de recherche Web construit un gigantesque index inverse associant chaque mot du Web à la liste des identifiants des pages Web qui le contiennent. Lors d'une requête de l'utilisateur, le moteur n'a pas à parcourir le Web ou les bases de données textuelles brutes : il interroge son index en pour récupérer instantanément les listes de pages associées aux mots-clés, puis calcule leur intersection si la requête contient plusieurs termes.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.