Sappiamo tutti che la distinzione degli elementi nel modello basato sul confronto non può essere eseguita in tempo. Tuttavia, su una word-RAM, è possibile ottenere risultati migliori.
Naturalmente, se si presume l'esistenza di una funzione hash perfetta che può essere calcolata in tempo lineare, si ottiene un algoritmo di tempo lineare per la distinzione degli elementi: continuare a eseguire l'hashing dei numeri uno per uno e restituire 1 in caso di collisione.
Tuttavia, ci sono due problemi: 1) la maggior parte delle costruzioni di funzioni hash perfette che potrei trovare casualità usata e 2) non riesco a trovare una discussione del tempo di pre-elaborazione da nessuna parte, cioè il tempo necessario per decidere quale funzione hash si sta andando da utilizzare in base al set di numeri di input.
" Memorizzare una tabella sparsa con tempo di accesso nel caso peggiore " di Fredman et al. Risolve il primo problema fornendo una funzione di hash con tempo di accesso nel caso peggiore, ma non dice nulla sul secondo problema .
Quindi, per riassumere, ecco cosa voglio:
Progetta un algoritmo che dia un set di numeri (ogni numero è lungo bit) su una parola-RAM con lunghezza della parola , trova una funzione hash in tempo, dove . La funzione dovrebbe avere la proprietà che per ogni , il numero di elementi di che mappano a è una costante e che il calcolo dovrebbe prenderen w w h : S → { 1 , ... , m } O ( n ) m = O ( n ) h j ∈ { 1 , ... , m } S jO ( 1 )tempo in un modello "ragionevole" di RAM di parole, vale a dire, il modello non dovrebbe permettere che funzioni "esotiche" sulle parole siano valutate nel tempo .
Mi piacerebbe anche sapere se ci sono algoritmi per risolvere la distinzione degli elementi sulla parola RAM che non usano affatto le funzioni hash.