Per una tabella hash generica che mira sia alle alte prestazioni sia alla correttezza, quando, se mai, ha senso presumere che l'uguaglianza hash implichi l'uguaglianza logica?
Per stabilire alcune regole di base per la domanda, supponiamo che tutti gli input siano non dannosi o che venga utilizzata una funzione hash di qualità crittografica. In altre parole, le collisioni di hash si verificano solo per caso o non possono essere generate intenzionalmente intenzionalmente (come meglio è noto pubblicamente). Tuttavia, non fare alcuna ipotesi sul numero di input di bit o sul numero di output di bit. Supponiamo anche che tutte le entità logicamente uguali abbiano uguali hash (cioè ignori la possibilità di un operatore di uguaglianza con un comportamento insolito).
In base a diverse fonti Internet tra cui la rete stack, la possibilità di una collisione hash a 256 bit è così piccola che può essere considerata impossibile . In particolare, per la famiglia SHA, non esiste una singola collisione nota . Tuttavia, le principali implementazioni di hash table che ho familiarità con do controllano l'uguaglianza logica. Si tratta di una scelta progettuale ragionevole o si rivolge a una paura irrazionale? Se la risposta è più sottile, quali fattori influenzano la risposta? (ad esempio numero di bit di input, funzione di hash utilizzata, contesto del programma?)
Le implementazioni a me più familiari e interessate sono il C ++ (libstdc ++ di GNU e libc ++ di LLVM) e Python. Se gli hash a 64 bit imposti nella libreria standard C ++ influenzano la risposta, ti preghiamo di spiegarci.