Distinzione tra elementi in O (n) tempo?


21

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.o(nlogn)

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 peggioreO(1) " 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 .O(1)

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 jSnwwh:S{1,...,m}O(n)m=O(n)hj{1,...,m}SjO ( 1 )h(io)O(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 .O(1)

Mi piacerebbe anche sapere se ci sono algoritmi per risolvere la distinzione degli elementi sulla parola RAM che non usano affatto le funzioni hash.


8
Ri: "Mi piacerebbe anche sapere se ci sono algoritmi per risolvere la distinzione degli elementi sulla parola RAM che non usano affatto le funzioni hash". - fintanto che vuoi solo e non lineare, c'è molto lavoro sull'ordinamento della parola RAM (vedi en.wikipedia.org/wiki/Integer_sorting ). Alcuni di questi algoritmi usano l'hashing ma altri no. o(nlogn)
David Eppstein,

Sono consentite soluzioni approssimative?
AL

(Penso che) Il tuo processo di pensiero sta saltando un passo: 1. Hai postulato che la migliore complessità nel modello di confronto è 2. Chiedete come può essere migliorato nel modello RAM 3. È chiedere direttamente una soluzione nel tempo nel modello RAM. Piuttosto, dovresti studiare le soluzioni in nel modello RAM e vedere se riesci a migliorarle? Θ(nlogn)O(n)o(nlogn)
Jeremy,

L'ordinamento Radix è troppo lento per te?
Thomas Mueller,

Risposte:


8

La distinzione degli elementi può essere risolta in modo deterministico nel modello RAM nel tempo entro il tempo :O(nloglogn)o(nlogn)

Ordina in tempo entro tuoi numeri di bit usando l'algoritmo di ordinamento descritto da Han in STOC 2002 ("Ordinamento deterministico in tempo e spazio lineare"), quindi scansionare in tempo lineare per le collisioni.O(nloglogn)nwO(nloglogn)

Per quanto ne so, questo è il miglior risultato conosciuto fino ad oggi.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.