solo per la pratica (e non come un compito a casa) ho cercato di risolvere questo problema (CLRS, 3a edizione, esercizio 11,2-6):Selezionando in modo efficiente un elemento casuale da una tabella hash concatenata?
chiavi Supponiamo di avere immagazzinati n in una tabella hash di dimensione m, con le collisioni risolte dal concatenamento e che conosciamo la lunghezza di ciascuna catena , inclusa la lunghezza L della catena più lunga. Descrivere una procedura che seleziona una chiave uniformemente a caso tra i tasti nella tabella hash e la restituisce nel tempo previsto O (L * (1 + m/n)).
Quello che ho pensato finora è che la probabilità che ogni tasto venga restituito è 1/n. Se proviamo a ottenere un valore casuale x compreso tra 1 e n, e proviamo a trovare la chiave xth in sequenza prima ordinata per bucket e poi lungo la catena nel bucket, allora O (m) richiederà il bucket giusto andando attraverso i bucket uno per uno e O (L) tempo per ottenere la chiave giusta in catena.
Dov'è la tua domanda? – outis
Il caso peggiore è O (mn) per trovare l'elemento correlato, ma il tempo previsto (come dice la domanda) è O (1 + m/n) per ognuno di essi e sarà O (L * (m/n + 1)) per tutti loro. –
Come vengono memorizzate le informazioni sulla lunghezza? Sto pensando che se un bucket ha tutti gli elementi in esso e il resto ha zero, non puoi nemmeno trovare quel bucket più veloce del tempo O (n). C'è qualche altra informazione disponibile su dove si trovano gli elementi? – templatetypedef