Czy ktoś mógłby rzucić nieco światła na funkcję/algorytm haszowania Perl używa do odwzorowania ciągu znaków na indeks? Jakieś istotne czytanie?Jakiej funkcji/algorytmu mieszania używa Perl?
9
A
Odpowiedz
15
PERL_HASH_INTERNAL_
, zdefiniowane w hv.h
, przytoczone poniżej:
/* hash a key */
/* FYI: This is the "One-at-a-Time" algorithm by Bob Jenkins
* from requirements by Colin Plumb.
* (http://burtleburtle.net/bob/hash/doobs.html) */
/* The use of a temporary pointer and the casting games
* is needed to serve the dual purposes of
* (a) the hashed data being interpreted as "unsigned char" (new since 5.8,
* a "char" can be either signed or unsigned, depending on the compiler)
* (b) catering for old code that uses a "char"
*
* The "hash seed" feature was added in Perl 5.8.1 to perturb the results
* to avoid "algorithmic complexity attacks".
*
* If USE_HASH_SEED is defined, hash randomisation is done by default
* If USE_HASH_SEED_EXPLICIT is defined, hash randomisation is done
* only if the environment variable PERL_HASH_SEED is set.
* For maximal control, one can define PERL_HASH_SEED.
* (see also perl.c:perl_parse()).
*/
#define PERL_HASH_INTERNAL_(hash,str,len,internal) \
STMT_START { \
register const char * const s_PeRlHaSh_tmp = str; \
register const unsigned char *s_PeRlHaSh = (const unsigned char *)s_PeRlHaSh_tmp; \
register I32 i_PeRlHaSh = len; \
register U32 hash_PeRlHaSh = (internal ? PL_rehash_seed : PERL_HASH_SEED); \
while (i_PeRlHaSh--) { \
hash_PeRlHaSh += *s_PeRlHaSh++; \
hash_PeRlHaSh += (hash_PeRlHaSh << 10); \
hash_PeRlHaSh ^= (hash_PeRlHaSh >> 6); \
} \
hash_PeRlHaSh += (hash_PeRlHaSh << 3); \
hash_PeRlHaSh ^= (hash_PeRlHaSh >> 11); \
(hash) = (hash_PeRlHaSh + (hash_PeRlHaSh << 15)); \
} STMT_END
Powiązane problemy
- 1. Jakiej wersji JavaScriptu używa Titanium?
- 2. Perl, uzyskaj wszystkie wartości mieszania
- 3. Do jakiej dokładności perl drukuje liczby zmiennoprzecinkowe?
- 4. Jakiej daty używa RFC na Twitterze?
- 5. Jakiej klasy USB używa port szeregowy COM?
- 6. Jakiej metody szyfrowania używa metoda .NET FormsAuthentication.Encrypt()?
- 7. Jakiej biblioteki gui używa edytor tekstu sublime?
- 8. Jakiej wersji protokołu SSL/TLS używa System.Web.Services.Protocols.SoapHttpClientProtocol?
- 9. Jaki algorytm mieszania używa mapowanie słownika Pythona?
- 10. Jakiej klasy języka można używać wyrażeń regularnych Perl?
- 11. Jakiej biblioteki graficznej używa GitHub na stronie Wykresy?
- 12. Jakiej aplikacji używa Google do wyświetlania załączników PDF w Gmailu
- 13. IdentityServer4 Introspection Endpoint API używa nieprawidłowego algorytmu mieszania
- 14. Konstruowanie tabeli mieszania/funkcji mieszania
- 15. Który z POSIX-ów smaku regex używa Perl?
- 16. Sortowanie Reference tablicę wartości mieszania
- 17. Algorytm mieszania dla implementacji tabeli mieszania
- 18. Jakiej sieci bezpieczeństwa używasz w Perlu?
- 19. Tworzenie mieszania szyku tablicy obiektów
- 20. Perl mapę - potrzeby map tablicę do mieszania jak arrayelement-> array_index
- 21. Idealna funkcja mieszania i korzyści
- 22. Używanie SVG do dodatkowego mieszania kolorów (mieszania dodatków)
- 23. Jak uruchomić zadanie mieszania w ramach zadania mieszania?
- 24. Jak usunąć klucze mieszania, których wartość mieszania jest pusta?
- 25. Złożoność czasowa tabeli mieszania
- 26. czas przeszukania tabeli mieszania
- 27. tryb mieszania iOS pomnożyć
- 28. Implementacja tabeli trwałej mieszania
- 29. funkcja mieszania unordered_set
- 30. Poprawienie odwołania mieszania Perla w podprogramie
Co chcesz zrobić? Czy możesz podać przykład kodu, który nie działa? –
Każdy klucz, który spowoduje kolizję :) – Jean
Nie ma dwóch kluczy, które zawsze będą kolidować. Hashowanie jest losowo zakłócane, gdy jest to konieczne. – ikegami