Le facteur de charge, et ce qu'il permet de prévoir
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 12 — Tableaux associatifs, hachage et sérialisation
Énoncé
Une table à chaînage contient clés dans cases, la fonction de hachage répartissant uniformément.
- Combien de cases sont vides, en moyenne ?
- Quel est le coût moyen d'une recherche fructueuse ? Infructueuse ?
- Vérifier ces prévisions.
Corrigé
1. Les cases vides. Une case donnée reçoit une clé donnée avec probabilité ; elle reste vide après tirages indépendants avec probabilité , qui vaut à la limite, où . Le nombre moyen de cases vides est donc
Le cas mérite d'être retenu : même en dimensionnant la table exactement au nombre de clés, des cases restent vides — et donc des clés se pressent ailleurs. On ne remplit jamais une table de hachage uniformément.
2. Le coût des recherches.
- Infructueuse : on parcourt toute la chaîne de la case visée, dont la longueur moyenne est . Coût : comparaisons — le pour le calcul du haché.
- Fructueuse : la clé cherchée est à une position moyenne de dans sa chaîne. Plus précisément, si la -ième clé insérée trouve clés en moyenne devant elle, le coût moyen sur les clés vaut .
Dans les deux cas, le coût dépend de et pas de . C'est tout le principe : on redimensionne dès que dépasse un seuil, et le coût reste borné. La recopie coûte , mais elle est amortie sur les insertions qui l'ont précédée — exactement le calcul du tableau dynamique du chapitre chap:algo-prog.
3. Les mesures. Table à chaînage écrite en C, mots, , donc :
| mesuré | prévu | |
|---|---|---|
| recherche fructueuse | sondages | |
| recherche infructueuse | sondages | |
| plus longue chaîne | --- |
Et sur le remplissage, par tirage uniforme :
| cases vides mesurées | ||||
|---|---|---|---|---|
| (60{,}6%) | (60{,}7%) | |||
| (36{,}8%) | (36{,}8%) | |||
| (1{,}2%) | (1{,}5%) |
La théorie tombe juste à quatre chiffres. Ce n'est pas une coïncidence, c'est ce que veut dire « en moyenne » : ces formules décrivent le comportement d'une table dont la fonction de hachage disperse bien, et rien d'autre. Avec h_somme de l'exercice précédent, elles seraient fausses d'un facteur .
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.