Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Własna funkcja haszująca

Ostatnio zmodyfikowano 2015-03-27 18:56
Autor Wiadomość
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:
C/C++
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 );
P-129156
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'
P-129167
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?

C/C++
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.
P-129256
DejaVu
» 2015-03-27 18:56:03
A czy masz taką dużą tablicę, która przechowuje wartości? Raczej nie.
P-129274
1 « 2 »
Poprzednia strona Strona 2 z 2