Table hachée

Utilisation intelligente des tableaux

2 057 lectures 3/5 (1 vote) Sébastien Sougnez

La structure interne ainsi que le design d'AreaProg ont récemment été modifiés.
Suite à cela, le format de certains articles a été perturbé. Le problème est connu et en cours de résolution. Merci de votre compréhension.

Les tableaux c'est pratique mais utilisés banalement, ce n'est pas assez performant. Par exemple, imaginez que vous fassiez un tableau qui contiendra des structures avec des informations sur des étudiants. Imaginez également que vous avez 200 élèves à retenir et que vous puissiez faire une recherche dans ce tableau pour retrouver un élève, vous allez parcourir tout le tableau à chaque fois jusqu'à ce que vous trouviez l'élève en question ? Si cet élève est le dernier du tableau, cela va prendre beaucoup trop de temps, nous allons donc passer par une table hachée. Avec une utilisation simple des tableaux, vous auriez prévu un tableau de 200 places qui contiendra tout les élèves les uns à la suite des autres, mais avec la table hachée, nous allons utiliser une fonction mathématique qui va nous permettre de récupérer l'indice auquel il faut placer l'élève, cette formule devra être invariable pour ne pas provoquer de problèmes. La fonction qui sera la plupart du temps utilisée est le modulo sur la somme de la valeur ASCII des caractères... Hein ? C'est simple, je vais prendre un exemple. Imaginez que vous deviez stocker un élève du nom de Carpaccio, vous devrez utiliser la marche à suivre suivante : Tout d'abord, nous n'allons pas créer un tableau de 200 places mais plutot de 20. L'efficacité de la méthode dépendra de la taille du tableau, plus le tableau est grand mieux c'est, mais ne faites pas non plus un tableau de 100 places pour stocker 3 élèves, ce serait gaspiller de la mémoire pour rien. Ensuite, chaque caractère du nom a une valeur ASCII, par exemple la valeur du C est 67, celle du a est 97,... Vous allez donc additionner toutes les valeurs ASCII des nombres, pour Carpaccio, cela donnera : 67 (C) + 97 (a) + 114 (r) + 112 (p) + 97 (a) + 99 (c) + 99 (c) + 105 (i) + 111 (o) = 901 Oki, c'est bien, on a 901 et alors ? Et bien alors la suite est très simple. Une fois que vous avez ce nombre et que vous savez que votre tableau a une taille de 20, il vous suffit simplement de faire 901 modulo 20 pour obtenir le reste de la division entière qui sera comprise entre 0 et 19 inclus, ce qui fera 1, c'est donc à l'indice 1 que vous devrez stocker l'élève Carpaccio.

Et les collisions ?

Tout d'abord, c'est quoi une collision ? Eh bien c'est quand deux noms donnent le même indice. Effectivement, si deux noms renvoient l'indice 2, comment allez vous faire ? Si vous les stocker bêtement, un des deux noms va écraser l'autre, c'est problématique. Mais il y a une solution, il vous suffit d'utiliser les listes chainées, autrement dit, chaque emplacement de votre tableau sera une liste chainée. Si vous ne savez pas ce que sont les listes chainées, il vous suffit de lire le cours précédent. Une fois que vous aurez compris, vous saurez que faire, effectivement, quand deux noms donneront le même indice, il vous suffira d'ajouter ces noms comme maillon de la liste chainée se trouvant à l'emplacement désiré.

Noter

Veuillez vous identifier ou vous inscrire pour donner une note à cet article.

Commentaires / Questions

Aucun commentaire.

Veuillez vous identifier ou vous inscrire pour réagir à cet article.

Avatar

Sébastien Sougnez

Envoyer un mail Site web Windows live messenger LinkedIn Twitter Facebook MVP Administrateur

25754 points