Własna funkcja haszująca
Ostatnio zmodyfikowano 2015-03-27 18:56
DejaVu |
» 2015-03-25 18:27:23 Po prostu tworzysz funkcję, która dla podanego łańcucha znaków oblicza Ci jakiś numerek. Później ten numerek dzielisz przez jakąś liczbę pierwszą i wrzucasz wartość do tablicy hashującej pod odpowiednim indeksem, wyliczonym we wspomniany wcześniej sposób. Przykład: int funkcjaHashujaca( const std::string & _sTekst ) { int iResult = 0; return iResult; }
std::string sTekst = "ABcD"; int indeks = funkcjaHashujaca( sTekst ) / liczbaPierwsza; tablica[ indeks ].push_back( sTekst ); |
|
pekfos |
» 2015-03-25 20:35:54 Chyba raczej chodzi o funkcję skrótu typu MD5, czy CRC. Czy funkcja xorująca ciąg znaków będzie funkcją skrótu? |
A nie? F("abc") = 'a' ^ 'b' ^ 'c' |
|
fokusx Temat założony przez niniejszego użytkownika |
» 2015-03-27 14:07:23 W takim razie pobawiłem się trochę tymi operatorami - czy poniższa funkcja jest dobrze skonstruowana i jest to funkcja skrótu? unsigned int FHash( const std::string & str ) { unsigned int iResult = 1112223334; for( unsigned int i = 0; i < str.length(); i++ ) { iResult ^=(( iResult << 3 ) + str[ i ] +( iResult >> 4 ) ); } return( iResult % 0x7FFFFFFF ); }
Liczba 2147483647 (0x7FFFFFFF) jest pierwsza. |
|
DejaVu |
» 2015-03-27 18:56:03 A czy masz taką dużą tablicę, która przechowuje wartości? Raczej nie. |
|
1 « 2 » |