15Fermer17
Pen^2Le 07/03/2010 à 00:21
Multicross... couic

En gros, au lieu d'avoir une bête liste toute plate, tu utilises un tableau de sous-listes dont les Strings ont toutes la même hashValue.

Tu définis une fonction calculerHashValue qui te retourne une hashValue à partir d'une String :
calculerHashValue( string s ) { retourne une hashvalue sur un intervalle donné }

Ensuite tu l'utilises pour construire un tableau de sous listes de Strings regroupées par hashValues :
tab[ 0]= contient la liste des String qui ont pour hashvalue 0
tab[ 1]= contient la liste des String qui ont pour hashvalue 1
...
tab[maxHashValue]= contient la liste des String qui ont pour hashvalue maxHashValue


Et finalement, tu appliques ton algo de recherche de strings non pas sur la liste de String entière, mais uniquement sur la sous liste de strings dont la hashvalue est identique à la hashValue calculée sur la String à rechercher => cette sous liste est dans tab[calculerHashValue(s)]


Thibaut avait codé une fonction de hash sur des strings qui semblait intéressante, et rapide : topics/536-103443-efficacite-dun-algorithme-de-hachage-de-chaines-de-caracteres (j'ai jamais regardé en détail)