[Tabelle hash avere] O (1) l'inserimento e la ricerca
Penso che questo è sbagliato.
Prima di tutto, se si limita lo spazio delle chiavi di essere finito, è possibile memorizzare gli elementi di un array e fare un O (1) scansione lineare. Oppure si potrebbe shufflesort l'array e poi fare una scansione lineare O (1) tempo previsto. Quando roba è finita, roba è facilmente O (1).
Quindi diciamo che la vostra tabella di hash memorizzerà qualsiasi stringa di bit arbitraria; essa non ha molta importanza, purché ci sia un insieme infinito di chiavi, ciascuna delle quali sono finite. Poi si deve leggere tutti i bit di qualsiasi ingresso query e inserimento, altro che inserire y0 in un hash vuoto e interrogare y1, dove y0 e y1 differiscono in un'unica posizione di bit che non si guarda.
Ma diciamo che le lunghezze delle chiavi non sono un parametro. Se il vostro inserimento e ricerca prendono O (1), in particolare hashing prende O (1) tempo, il che significa che si guarda solo al una quantità finita di uscita dalla funzione di hash (da cui non c'è probabilità di essere solo un'uscita finita, concesso ).
Ciò significa che con un numero finito di secchi, ci deve essere un insieme infinito di stringhe che hanno tutti lo stesso valore di hash. Supponiamo che io inserisco un sacco, cioè ω (1), di quelli, e iniziare l'esecuzione di query. Ciò significa che la vostra tabella di hash deve ripiegare su qualche altro O (1) meccanismo di inserimento / ricerca per rispondere alle mie domande. Quale, e perché non basta usare che direttamente?