sono curioso come gli altri hanno risolto questo problema, e quali problemi potrebbero nascondersi dietro la soluzione ingenua:intero univoco/lungo hash la generazione di chiavi su stringhe per compairson più veloce
Ho un sistema che elabora dati del mercato azionario. Ci sono decine di migliaia di simboli, con prezzi/dimensioni associati, che fluiscono nel sistema alla velocità di diverse migliaia di millisecondi.
Una delle operazioni di base che devono verificarsi su ogni spunta è il confronto delle stringhe per verificare se l'entrata corrisponde al simbolo a cui siamo interessati. A tale frequenza elevata, l'ottimizzazione di questi confronti di stringhe può fare una differenza misurabile nelle prestazioni dell'intero sistema.
Sto pensando di generare un hash della stringa di simboli e di memorizzarlo con il record. Per il confronto successivo, il sistema dovrebbe usare questo hash (essendo un int o un long, il confronto dovrebbe essere una singola operazione, piuttosto che scorrere attraverso ogni carattere della stringa fino a quando non viene trovata una corrispondenza mancata).
Ignoriamo il costo di generare l'hash stesso (che, in realtà, potrebbe essere effettivamente proibitivo). L'unico problema che posso vedere è che con un gran numero di simboli unici, una collisione hash (due simboli separati generano lo stesso hash) sarebbe devastante. Esiste un algoritmo di hash che garantisce che le stringhe che corrispondono a determinati vincoli (come il limite sul numero di caratteri) sono uniche?
EDIT: Scriverò questo codice in Java. Non sono sicuro della qualità (di collisione) di hashCode o della velocità con cui viene calcolata.
Avete considerato l'utilizzo di una o più delle seguenti funzioni hash generali: hashhttp: //www.partow.net/programming/hashfunctions/index.html –
Per coloro che desiderano fare clic sul collegamento http: // www. partow.net/programming/hashfunctions/index.html – cheffe