Structures de données et algorithmes

Pour une table de hachage contenant de nombreux éléments et maintenue à un facteur de charge d'environ 0,5, quelle est la raison la plus appropriée pour laquelle l'adressage ouvert avec sondage linéaire tend à être plus rapide que le chaînage (relier les éléments par des listes chaînées) ?

  1. AAprès une collision, la position examinée ensuite est l'élément voisin, qui se trouve souvent dans la même ligne de cache ou dans la suivante, si bien qu'il faut moins d'accès mémoire
  2. BL'adressage ouvert n'a aucune collision
  3. CLe chaînage doit calculer la fonction de hachage deux fois ou plus
Afficher la réponse et l'explication

Réponse : A. Après une collision, la position examinée ensuite est l'élément voisin, qui se trouve souvent dans la même ligne de cache ou dans la suivante, si bien qu'il faut moins d'accès mémoire

Sur les CPU modernes, lire la mémoire principale après un défaut de cache prend bien plus de temps que des calculs comme les comparaisons. Le sondage linéaire examine la position voisine après une collision : la plupart des sondages restent dans la même ligne de cache, et le préchargement aide aussi. Avec le chaînage, l'élément suivant d'une liste se trouve souvent ailleurs en mémoire, si bien que chaque pointeur suivi risque de provoquer un défaut de cache. Même à complexité temporelle égale en notation O, la vitesse réelle peut beaucoup varier selon la façon d'accéder à la mémoire. Toutefois, le sondage linéaire ralentit fortement aux facteurs de charge élevés, car les positions occupées se regroupent : on maintient donc le facteur de charge assez bas.

S'entraîner sur ce thème Retour au thème

Autres questions sur Structures de données et algorithmes

  1. Des méthodes de tri dont la suite d'étapes de comparaison-échange est fixée d'avance (réseaux de tri), comme le tri bitonique, sont parfois utilisées pour trier sur du matériel parallèle comme les GPU. Pourquoi ?
  2. Pour un tableau de n éléments, quelle est la complexité temporelle d'un traitement qui compare une seule fois chaque paire d'éléments distincts (une double boucle qui compare l'élément i à tous les éléments situés après lui, en faisant avancer i d'un cran à chaque fois) ?
  3. Un programme de complexité temporelle O(n²) met 0,5 seconde pour 1000 données. Combien de temps mettra-t-il environ pour 4000 données ?
  4. Une recherche linéaire compare un à un, depuis le début, les éléments d'un tableau de 100 valeurs distinctes pour trouver une valeur cible. Si la cible se trouve toujours dans le tableau et a la même probabilité d'être à n'importe quelle position, quel est le nombre moyen de comparaisons ?
  5. Par rapport à un tableau, quelle description d'une liste chaînée (liste dont chaque élément contient un pointeur vers l'élément suivant) est correcte ?