multumesc mult pentru sfaturi.
Adi: de obicei eu folosesc trei numere prime pentru hashul acela, nu doua. probabilitatea de coliziune fiind ceva 1/(p1*p2*p3) (poate gresesc?). problema era sa pot cauta in O(1) o informatie din hash.
Cosmin: eu am gasit pe net o functie de tipul celei care ai zis-o tu:
presupunand ca vreau sa comprim un sir de caractere 's':
hash = 65599;
for (i = 0; i < len_s; i++)
hash = s[i]-'0'+hash*65599 /* sau varianta rapida hash = s[i]-'0'+(hash<<6)+(hash<<16)-hash */
fie, aici se poate introduce si o siftare pe biti ca sa nu sara de 2^22.
am incercat acest lucru la problema Ograzi, dar iau doar 90. sa aiba multe coliziuni functia mea?