Tempo di ricerca tabella hash o dizionario

Tempo di ricerca tabella hash o dizionario

No. È tecnicamente possibile, ma sarebbe estremamente raro ottenere la stessa identica quantità di spese generali. Una tabella hash è organizzata in bucket. Dictionary<> (e Hashtable) calcolano un numero di bucket per l'oggetto con un'espressione come questa:

int bucket = key.GetHashCode() % totalNumberOfBuckets;

Quindi due oggetti con un diverso il codice hash può terminare con stesso benna. Un bucket è un elenco<>, l'indicizzatore cerca quindi nell'elenco la chiave che è O(n) dove n è il numero di elementi nel bucket.

Dictionary<> aumenta in modo dinamico il valore di totalNumberOfBuckets per mantenere efficiente la ricerca nel bucket. Quando si pompano cento milioni di elementi nel dizionario, ci saranno migliaia di secchi. Le probabilità che il secchio sia vuoto quando aggiungi un oggetto saranno piuttosto ridotte. Ma se è per caso, sì, ci vorrà altrettanto tempo per recuperare l'oggetto.

L'importo delle spese generali aumenta molto lentamente man mano che il numero di articoli cresce. Questo è chiamato ammortizzato O(1).