Bonjour,
J'essaie actuellement de générer une sorte de fonction de hashage qui permettrait d'attribuer un ID unique à chaque mots d'un dictionnaire.
Dans le code ci-dessous, les mots sont aléatoires et sont longs de 32 caractères, pour l'instant chacun de mes processeurs fait une recherche de collision pour déterminer si mon algorythme est fiable pour des dimensions de mots raisonnables (maximum 32 caractères).
Le principe est simple:
Imaginons un mot de 4 caractères: ACDB où A=1, C=3, D=4, B=2, ensuite, on additionne la position avec la valeur : A=1+1, C=3+2, D=4+3, B=2+4 donc 2, 5, 7, 6. Après cela je réalise l'opération suivante : (((2 / 5) / 7) / 6) et j'obtiens 0,00952380...
Bon évidement c'est la base, en définitive on arrive sur des mots de 32 caractère avec des valeurs proches de 10^(-50).
çà fait 12 heures que mes processeurs tournes et toujours pas de collisions en vue...
Ma méthode est très empirique et encore bien imparfaite comme vous le verez dans le code ci-dessous le programme ne fait que 10^6 combinaisons mais ce n'est qu'un exemple.
En fait ce que je voudrais avoir c'est une critique de ma méthode qui me permettrai de savoir si il y a une grosse faille bien visible que je n'aurais pas vue ou si finallement, le seul moyen de savoir ne serait pas effectivement d'énumérer toutes les possibilités...
Voilà j'en appel à tous les matheux pour éclairer le pauvre noob de l'algèbre que je suis...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 #include <cstdlib> #include <ctime> #include <iostream> using namespace std; int main() { srand((unsigned)time(0)); char content[] = "abcdefghijklmnopkrstuvwxyz-:-/"; int factor=32; long cycle=1024*1024; int random_integer=0; int lowest=1, highest=sizeof(content)-1; int range=(highest-lowest)+1; int global[factor]; char the_word[factor]; long z=0; int sum; double proto_hash; double X_SPACE = 5.43817e-046; // factor 32 while (z < cycle) { cout << "[" << z << "]"; int i=0; sum=0; while (i < factor) { random_integer = (rand()%highest); global[i] = i + random_integer; sum += random_integer; the_word[i] = content[random_integer]; cout << content[random_integer]; i++; } cout << " <=> "; i=0; proto_hash = global[0]+1; while (i < factor) { // cout << global[i]; proto_hash /= (global[i] + 1); i++; } cout << factor << "-" << proto_hash << "-" << sum << endl; if (X_SPACE == proto_hash) { cout << "MATCH WITH THIS : " << endl; cout << "fnd:tauonhusfvv/xhvougxsrety:ddg <=> 32-5.43817e-046-470" << endl; system("pause"); } z++; } return 0; }
Partager