Witam
Jeśli ktoś zna jakąś funkcję haszującę łańcuch znaków na liczbe int w C to byłbym wdzięczny. Taka żeby była prosta, ale skuteczna.
Dzięki.
Witam
Jeśli ktoś zna jakąś funkcję haszującę łańcuch znaków na liczbe int w C to byłbym wdzięczny. Taka żeby była prosta, ale skuteczna.
Dzięki.
Na int to znaczy 16 bit dla DOSu i 32 bit dla Windows.
To polecam CRC (16 bit) i CRC32 (32 bit).
Opis w serwisie - użyj wyszukiwarki (na stronie głównej).
Podobno taka funkcja użyta jest w jakimś dużym projekcie - przynajmniej tak podano ją u mnie w trakcie wykładu ;)
unsigned int hash(char* s)
{
char* p;
unsigned int g, h=0;
for (p=s; (*p)!='\0'; p++)
{
h = (h<<4) + (*p);
if (g=h&0xF0000000)
{
h = h^(g>>24); h=h^g;
}
}
return h;
}
Wynik działania dzielimy modulo oczekiwany zakres, najlepiej liczbę pierwszą.
hmm jezeli chodzi o stringi to mozesz zasotsowac jakies prosta metode typu dodaj nastepnie odejmij puzniej pomnoz przez cos itp. Wynik bedzie w pelnym zakresie 32bit wiec i tak bedziesz go musial puzniej hashowac aby wrzucic np: do tablicy...