Considera la lista debolmente collegata singolarmente in un ambiente puramente funzionale. Le sue lodi sono state cantate dalle cime delle montagne e continueranno a essere cantate. Qui affronterò uno tra i suoi numerosi punti di forza e la domanda su come estenderlo alla più ampia classe di sequenze puramente funzionali basate sugli alberi.
Il problema è il seguente: si desidera verificare l'uguaglianza strutturale quasi certa nel tempo O (1) mediante un forte hashing. Se la funzione hash è strutturalmente ricorsiva, ovvero hash (x: xs) = mix x (hash xs), è possibile memorizzare in modo trasparente i valori hash sugli elenchi e aggiornarli in O (1) quando un elemento viene inserito in un elenco esistente . La maggior parte degli algoritmi per gli elenchi di hashing sono strutturalmente ricorsivi, quindi questo approccio è eminentemente utilizzabile nella pratica.
Supponiamo, invece di elenchi collegati singolarmente, di avere sequenze basate su alberi che supportano la concatenazione di due sequenze di lunghezza O (n) nel tempo O (log n). Affinché la cache hash funzioni qui, la funzione di miscelazione hash deve essere associativa al fine di rispettare i gradi di libertà che un albero ha nel rappresentare la stessa sequenza lineare. Il mixer dovrebbe prendere i valori di hash dei sottotitoli e calcolare il valore di hash dell'intero albero.
Questo è dove ero sei mesi fa, quando ho trascorso una giornata rimuginando e facendo ricerche su questo problema. Sembra che non abbia ricevuto attenzione in letteratura sulle strutture di dati. Mi sono imbattuto nell'algoritmo di hash Tillich-Zemor dalla crittografia. Si basa sulla moltiplicazione della matrice 2x2 (che è associativa) in cui i bit 0 e 1 corrispondono ai due generatori di una subalgebra con voci in un campo di Galois.
La mia domanda è: cosa mi sono perso? Devono essere presenti documenti rilevanti sia nella letteratura sulla crittografia che nelle strutture di dati che non sono riuscito a trovare nella mia ricerca. Eventuali commenti su questo problema e possibili luoghi da esplorare sarebbero molto apprezzati.
Modifica: sono interessato a questa domanda sulle estremità morbide e crittograficamente forti dello spettro. Sul lato più morbido può essere utilizzato per le tabelle hash in cui le collisioni dovrebbero essere evitate ma non sono catastrofiche. Sul lato più forte può essere utilizzato per i test di uguaglianza.