hash

hash - Algo - Programmation

Marsh Posté le 19-09-2003 à 00:17:01    

salut
 
quel est la meilleur méthode pour la gestion des collisions dans un hash table, il me faut la plus performante... (j'utilise des tableau)
 
merci


---------------
Borland rulez: http://pages.infinit.net/borland
Reply

Marsh Posté le 19-09-2003 à 00:17:01   

Reply

Marsh Posté le 19-09-2003 à 04:44:00    

la plus performante en terme de quoi ?

Reply

Marsh Posté le 19-09-2003 à 10:40:10    

Tout dépend de la taille de la table... Si tu as un tableau de 100 et que tu dois y mettres 10 données, les collisions seront plutôt rares..
 
à l'inverse, 1000 infos dans un tableau de 100 généreront beaucoup de collisions.
 
 
 
Voici quelques trucs que j'avais noté à ce sujet :
HACAHGE OUVERT (avec file)
==============
Type de hachage ouvert, cas d'école (données RAM et pas sur HD
|0 ---> Nicolas ---> Marc
|1
|2 ---> Igor
 
Les collisions sont simplement enfilées à la suite les une des autres.
 
HACHAGE OUVERT
==============
Dans la pratique, on utilise des index de taille au minimum 20% plus grande
que le taille des enregistrement, pour empêcher les collisions. il n'y a alors
plus de files. lorsque qu'une case est prise, on la place dans la suivante,
jusqu'à qu'on trouve un "blanc" (voilà pourquoi les 20% supplémentaire)
 
HACHAGE FERME (avec réserve)
============================
le tableau contient l'information, + un pointeur (mémoire ou physique)
En cas de collision (Fanfan --> Lea) on mets Fanfan dans la réserve et on pointe
Jean vers cet endroit de la réserve. En cas de double collision (Lea) on continue
de pointer
 
=============
|0 Jean(0)     | xx
|              |
|2 Zoe(2)      | NULL
|              |
|¬¬¬¬¬¬¬¬¬¬¬¬¬¬|
|xx Fanfan(0)  |  xy
|xy Lea(0)     |  NULL
|xz            |

Reply

Marsh Posté le 19-09-2003 à 10:41:46    

tout dépend surtout de si tu veux avoir la possibilité de faire des suppressions

Reply

Marsh Posté le 19-09-2003 à 10:44:54    

C'est clair qu'avec les files les suppressions deviennent lourdes à gérer. quoique

Reply

Marsh Posté le 19-09-2003 à 10:48:33    

JagStang a écrit :

C'est clair qu'avec les files les suppressions deviennent lourdes à gérer. quoique

euh par rapport un truc sans file, je dis non

Reply

Marsh Posté le 19-09-2003 à 10:58:02    

os2 a écrit :

salut
 
quel est la meilleur méthode pour la gestion des collisions dans un hash table, il me faut la plus performante... (j'utilise des tableau)
 
merci  


 
hachage ouvert, avec une taille étant un nombre premier suffisament grand pour le nombre d'éléments à stoquer, avec une fonction de hachage qui a une bonne répartition pour le type d'éléments stoqués [:aloy]


Message édité par schnapsmann le 19-09-2003 à 10:58:47

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 19-09-2003 à 11:48:12    

Taz a écrit :

euh par rapport un truc sans file, je dis non


 
Oui c'est vrai. Les files c'est pas plus mal pour les suppressions tout compte fait  :)

Reply

Marsh Posté le 26-09-2003 à 04:59:08    

SchnapsMann a écrit :


 
hachage ouvert, avec une taille étant un nombre premier suffisament grand pour le nombre d'éléments à stoquer, avec une fonction de hachage qui a une bonne répartition pour le type d'éléments stoqués [:aloy]


 
tu as un algo de cette technique?


---------------
Borland rulez: http://pages.infinit.net/borland
Reply

Marsh Posté le 26-09-2003 à 09:04:56    

euh oui, donne moi ton mail en pv

Reply

Marsh Posté le 26-09-2003 à 09:04:56   

Reply

Marsh Posté le 13-02-2004 à 02:37:04    


:hello: Hello @ tous,
 
J'ai un tableau qui doit gérer 1000 clients (Nom,Prénom:STRING(30 char. max))
 
est-il possible de faire une table hash sans collision ? :??:
si oui, connaissez-vous la formule coresspondante ?
 
svp, Merci :jap:
 
 

Reply

Marsh Posté le 13-02-2004 à 03:02:38    

os2 a écrit :

tu as un algo de cette technique?

Knuth, "The art of computer programming" tu as dedans les critères pour choisir la taille du tableau et comment calculer cette taille.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 13-02-2004 à 14:43:52    

K-Surf a écrit :


:hello: Hello @ tous,
 
J'ai un tableau qui doit gérer 1000 clients (Nom,Prénom:STRING(30 char. max))
 
est-il possible de faire une table hash sans collision ? :??:
si oui, connaissez-vous la formule coresspondante ?
 
svp, Merci :jap:
 
 
 


 
 [:atreyu]  
 


Message édité par K-Surf le 13-02-2004 à 14:44:01
Reply

Marsh Posté le 13-02-2004 à 14:49:30    

K-Surf a écrit :


 
 [:atreyu]  
 
 

pour toute serie de données connues à l'avance, il existe une fonction de hachage parfaite, c'est un théorème.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 13-02-2004 à 14:54:05    

nraynaud a écrit :

pour toute serie de données connues à l'avance, il existe une fonction de hachage parfaite, c'est un théorème.


 
huh  :??:  
 
théorème de qui ? de quoi ?  :??:  
 
 
Désolé, je suis un newb'  [:aurelie22]  :whistle:  
 

Reply

Marsh Posté le 13-02-2004 à 14:56:18    

K-Surf a écrit :


théorème de qui ? de quoi ?  :??:  

qui dit que la réponse est oui. Par contre, j'ai pas l'algo sous la main.
 
De qui, j'ai ai aucune idée. Il est aussi dans le Knuth.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 20-02-2004 à 02:46:27    

nraynaud a écrit :

qui dit que la réponse est oui. Par contre, j'ai pas l'algo sous la main.
 
De qui, j'ai ai aucune idée. Il est aussi dans le Knuth.


 
tu penses que tu arrivais à le retrouver svp ?  :??:  :jap:  
 
 [:atreyu] pour les autres, on s'est jamais.... :whistle:  
 
 

Reply

Marsh Posté le 20-02-2004 à 12:36:28    

K-Surf a écrit :

tu penses que tu arrivais à le retrouver svp ?  :??:  :jap:

non
1) je suis dans le trou-du-cul de l'Allemagne
2) j'ai pas de bibliothèque sous la main


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 18-07-2004 à 03:42:44    


je passais dans la section comme ça:
 
enfaite chuis aller jeter un coup d'oeil dans le Knuth, la section HASH se trouve dans le 2ème volume, si je me rappelle bien,
bref j'ai rien capter à ce livre pour matheux anglophone, y'a de ces formules de ouf :ouch:  
 

Reply

Marsh Posté le 20-07-2004 à 12:20:27    

beaucoup de choses tres interessantes sur le sujet sur le site de Bob Jenkins:
 
http://burtleburtle.net/bob/
 
(mais le site à l'air out en ce moment)

Reply

Marsh Posté le 20-07-2004 à 15:26:11    

K-Surf a écrit :

:hello: Hello @ tous,
 
J'ai un tableau qui doit gérer 1000 clients (Nom,Prénom:STRING(30 char. max))
 
est-il possible de faire une table hash sans collision ? :??:
si oui, connaissez-vous la formule coresspondante ?
 
svp, Merci :jap:


 
C'est simple, pour cela tu associes un integer i pour le client i...un integer i+1 pour le client i+1. Tu alloues un tableau de taille 1000. L'integer associe au client correspond a la case du tableau.
 
PS : si tu veux etre SUR de ne pas avoir de collision dans une table de hash, il te faut au MINIMUM un tableau de taille egal au nombre de donnees que tu veux y mettre...cela va de soi  ;)


Message édité par Giz le 20-07-2004 à 15:26:54

---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
Reply

Marsh Posté le 20-07-2004 à 15:42:25    

Giz a écrit :

C'est simple, pour cela tu associes un integer i pour le client i...un integer i+1 pour le client i+1. Tu alloues un tableau de taille 1000. L'integer associe au client correspond a la case du tableau.
 
PS : si tu veux etre SUR de ne pas avoir de collision dans une table de hash, il te faut au MINIMUM un tableau de taille egal au nombre de donnees que tu veux y mettre...cela va de soi  ;)


pas nécessairement. car deux éléments peuvent avoir le même hash...


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 20-07-2004 à 15:52:16    


ça fait longtemps que je ne me suis pas remis sur le programme( :o donc j'ai pas encore tout ma tête, excusez-moi si je dis des bêtises :jap:)
 
donc ta solution Griz: serait exemple lors du recherche d'un client dans le tableau que je le recherche par son numéro integer i ?
 
paske l'avantage du hash, c'est de pouvoir définir un clé *si possible* unique qui coressponderait à une case(index) du tableau(bon bien sur en ayant une taille de tableau assez "modéré"...) donc si je veux faire une recherche par nom sans vouloir parcourir tous le tableau je fais comment avec l'histoire du integer i ??? :??:
 

Reply

Marsh Posté le 20-07-2004 à 15:59:45    

unique non. la plus unique possible oui. relis ma première intervention


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 20-07-2004 à 16:00:12    

K-Surf a écrit :

ça fait longtemps que je ne me suis pas remis sur le programme( :o donc j'ai pas encore tout ma tête, excusez-moi si je dis des bêtises :jap:)
 
donc ta solution Griz: serait exemple lors du recherche d'un client dans le tableau que je le recherche par son numéro integer i ?
 
paske l'avantage du hash, c'est de pouvoir définir un clé *si possible* unique qui coressponderait à une case(index) du tableau(bon bien sur en ayant une taille de tableau assez "modéré"...) donc si je veux faire une recherche par nom sans vouloir parcourir tous le tableau je fais comment avec l'histoire du integer i ??? :??:


 
c tout con, la personne est stockee a l'indice i du tableau. Indice associe a la personne (en plus de son nom, prenom,etc..)


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
Reply

Marsh Posté le 20-07-2004 à 16:01:34    

JagStang a écrit :

pas nécessairement. car deux éléments peuvent avoir le même hash...


 
ma solution ne fait intervenir AUCUN hashcode hein !!!  :o


Message édité par Giz le 20-07-2004 à 16:01:57

---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
Reply

Marsh Posté le 20-07-2004 à 16:04:41    

JagStang a écrit :

unique non. la plus unique possible oui. relis ma première intervention


 
selon Knuth ou nraynaud, il parait que oui c'est possible (ça m'étonne aussi, m'enfin les math c'est puissant lol)
 

Reply

Marsh Posté le 20-07-2004 à 16:05:42    

Giz a écrit :

c tout con, la personne est stockee a l'indice i du tableau. Indice associe a la personne (en plus de son nom, prenom,etc..)


 
et pour faire une recherche d'une personne tu fais comment ?  :heink:  :??:  
 

Reply

Marsh Posté le 20-07-2004 à 16:06:14    

et pourtant, c'est bien le titre du topic... --> HS


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 20-07-2004 à 16:06:45    

K-Surf a écrit :

et pour faire une recherche d'une personne tu fais comment ?  :heink:  :??:


bonne question  [:kenshirooo]


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 20-07-2004 à 16:08:06    

K-Surf a écrit :

et pour faire une recherche d'une personne tu fais comment ?  :heink:  :??:


 
et ben tu as son integer associe. On te donnes le pointeur sur la personne et voila


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
Reply

Marsh Posté le 20-07-2004 à 16:08:26    

K-Surf a écrit :

selon Knuth ou nraynaud, il parait que oui c'est possible (ça m'étonne aussi, m'enfin les math c'est puissant lol)


je suis pas d'accord. moi place ces éléments dans un tableau de hash de longueur n (n =10)
 
"Marc"
"Nicolas"
"Marc"
 
en tout logique les marc vont se trouver ensemble... (sinon ton algo de hash est inutilisable pour les retrouver) et pourtant tu as encore le triple de l'espace et déjà des collisions


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 20-07-2004 à 16:09:05    

Giz a écrit :

et ben tu as son integer associe. On te donnes le pointeur sur la personne et voila


et... le pointeur associé tu l'obtiens comment ? je crois que tu n'as pas vraiment compris à quoi sert une table de hachage toi  :heink:


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 20-07-2004 à 16:09:14    

JagStang a écrit :

et pourtant, c'est bien le titre du topic... --> HS


 
Les tableaux et les tables de hach c tres proche hein  :o


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
Reply

Marsh Posté le 20-07-2004 à 16:12:05    

JagStang a écrit :

je suis pas d'accord. moi place ces éléments dans un tableau de hash de longueur n (n =10)
 
"Marc"
"Nicolas"
"Marc"
 
en tout logique les marc vont se trouver ensemble... (sinon ton algo de hash est inutilisable pour les retrouver) et pourtant tu as encore le triple de l'espace et déjà des collisions


 
oui c'est sur que si tu tombes 2 fois sur le meme prénom... :/
 
m'enfin avec le nom ET le prénom, c'est faisable ??? (bien sur il faut absolument que dans le monde il y'aurait qu'une seul personne ayant le meme nom de famille et le meme prénom)
 


Message édité par K-Surf le 20-07-2004 à 16:18:05
Reply

Marsh Posté le 20-07-2004 à 16:13:35    

JagStang a écrit :

et... le pointeur associé tu l'obtiens comment ? je crois que tu n'as pas vraiment compris à quoi sert une table de hachage toi  :heink:


 
ben je sais pas, moi j'imagine une structure de donnee (bon jse pas si c exactement pareil en bdd) :
 
struct personne i
{
 int placedsletableau
 char *nom
 char *prenom
}
 
fonction personne chercherpersonne (int placedsletableau)
{
 retourner tableau[placedsletableau]
}
 
void main ()
{
 personne pers = {0, "Jean", "Dupond"};
 chercherpersonne (pers.placedsletableau)
}
 
 
un truc comme ca koi...ca me pareil un peu facile, kkchose m'echappe sinon dans ce que tu ve faire exactement :/
}


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
Reply

Marsh Posté le 20-07-2004 à 16:14:59    

Giz a écrit :

et ben tu as son integer associe. On te donnes le pointeur sur la personne et voila


 
je ne sais pas si tu as saisi l'avantage du hash ou si c'est moi qui capte vraiment pas ce que tu essaie de m'expliquer...
 
exemple concret: je veux faire une recherche par NOM uniquement, en tappant uniquement le nom comment je peux faire pour retrouver ton integer i sans à avoir parcourir tous le tableau ????
 
EDIT: GRILLED


Message édité par K-Surf le 20-07-2004 à 16:16:46
Reply

Marsh Posté le 20-07-2004 à 16:19:57    

K-Surf a écrit :

je ne sais pas si tu as saisi l'avantage du hash ou si c'est moi qui capte vraiment pas ce que tu essaie de m'expliquer...
 
exemple concret: je veux faire une recherche par NOM uniquement, en tappant uniquement le nom comment je peux faire pour retrouver ton integer i sans à avoir parcourir tous le tableau ????


 
Ha tres bien, ca s'eclairci pour moi ;)...donc du coup effectivement, tu es oblige de passer par du hashCode :/
Suffit d'appliquer une formule magique de hashCode sur les strings...mais evidemment la, tu n'est plus sur de ne pas avoir de collisions :/
Passer un integer t'aurais garanti l'unicite au lieu de passer par le nom :/
 
EDIT : ou alors, tu alloues un TRES TRES grand tableau, et la tu as plus de chances de ne pas avoir de collisions


Message édité par Giz le 20-07-2004 à 16:28:46

---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
Reply

Marsh Posté le 22-07-2004 à 15:29:20    

pospos a écrit :

beaucoup de choses tres interessantes sur le sujet sur le site de Bob Jenkins:
 
http://burtleburtle.net/bob/
 
(mais le site à l'air out en ce moment)


 
ca yest le lien remarche
 
je vous conseil vraiment d'aller le voir!

Reply

Marsh Posté le 25-07-2004 à 05:49:00    

pospos a écrit :

ca yest le lien remarche
 
je vous conseil vraiment d'aller le voir!


 
Merci beaucoup  :jap:  
 
 [:k-surf] http://burtleburtle.net/bob/hash/perfect.html
 
mais pour te dire la vérité: je capte vraiment Q U E D A L   :cry:  :sweat:  
 
si qqun aurait la bonté de nous expliqué un tout ptit peu svp  :jap:  
 
 :ange:  
 

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed