Funkcja haszująca

0

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.

0

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).

0

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ą.

0

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...

1 użytkowników online, w tym zalogowanych: 0, gości: 1