Bonjour
J'ai
Ce qui donne 3566256.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 String s = "toté"; int sr = s.hashCode(); System.out.println(sr);
Peut-on inverser les choses.
Passer 3566256 et obtenir toté ?
Bonjour
J'ai
Ce qui donne 3566256.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 String s = "toté"; int sr = s.hashCode(); System.out.println(sr);
Peut-on inverser les choses.
Passer 3566256 et obtenir toté ?
Salut,
Non ce n'est pas possible.
Que veux-tu faire précisément ?
a++
C'est pour un moteur de recherche.
Je dois stoker 3 valeurs.
Nom du texte
mot
valeur pondéral ( nb d'itération du mot cherchée / nb de mots d'un texte).
Dans mes bases, au lieu de stoker des string en trois colonne, ça donne
hashcode de : Nom du texte
hashcode de mot + valeur pondéral (>= 0 et < 1 (je vérifie que le texte n'est pas composé d'un même mot)).
Donc je stocke un int et un double sur 2 colonnes. Aussi rapide à indexer qu'avec des String mais 10 fois plus rapide dans les recherches.
Je voulais savoir si à partir des bases je pouvais retrouver les mots et faire des stat. par exemple.
Si tu as un index sur tes clefs, je pense que cela doit être aussi rapide avec les String.
a++
et n'oublie pas de gérer les colissions de tes hash. Le hash est un moyen très rapide de trouver dans quel coin se trouve la donnée, mais il faut y ajouter la string complete pour retirer toute ambiguité. On associe à un String un hashcode, mais a un hashcode on associe une Liste de strings!
Et je suppose qu'on ne peux pas connaitre la liste de Strings.mais a un hashcode on associe une Liste de strings!
Pour info, le moteur de recherche ne comporte "que" les 260 000 mots de la langue française. Les doublons sur si peu de mots doivent être rare.
Pour le moteur de recherche, il est en java, et la base de donnée, c'est hsqldb.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 System.out.println(Integer.MAX_VALUE); =2.147.483.647
Du coup on peut l'exécuter sur différent OS, et la BD est intégrée.
Et pour que la DB reste de taille raisonnable, je préfère stoker des Int et Double, car ça prend moi de place.
Je voulais faire un truc petit, puissant et multi-plateforme.
Bonjour,
Non tu ne peux pas. C'est le principe d'une fonction hash, ce qu'elle n'est qu'à une seule direction (ou surjective pour reprendre le vocabulaire mathématique).
D'ailleurs tu peux théoriquement avoir plusieurs String qui auront pour hashCode 3566256. Et c'est logique puisque tu peux avoir beaucoup plus de String différentes que de valeurs de int en Java.
Partager