gaspare.pappalardo1
Ominide
1 min. di lettura
Vota 5 / 5

Concetti Chiave

  • La gestione delle collisioni in una hashtable è cruciale per il funzionamento e la complessità delle operazioni.
  • Linear Chaining utilizza un vettore di puntatori che crea una lista di dati per ogni cella in caso di collisioni.
  • Open addressing con linear probing aumenta l'indice di un'unità finché non trova una cella disponibile.
  • Open addressing con double hashing utilizza due funzioni di hash per risolvere le collisioni, passando alla seconda funzione se la prima fallisce.
  • Questi metodi, tra i più noti in letteratura, offrono diverse strategie per gestire efficacemente le collisioni.

Hashtable gestione delle collisioni

La gestione delle collisioni in una tabella di simboli (hashtable) è un’operazione molto delicata in quanto determina la complessità delle sue operazioni ed il suo completo funzionamento.
Esistono diversi metodi dedicati alla gestione delle collisioni (valori uguali ritornati dalla funzione di hash per dati diversi), linear chaining, open addressing con linear probing e open addressing con double hashing come più importanti metodi presenti in letteratura.

  • Linear Chaining: con il linear chaining il vettore allocato dinamicamente nell’ADT è un vettore di puntatori, difatti in caso di collisioni si aggancia alla cella dell’indice trovato il nuovo dato, andando a creare per ogni cella una lista dei dati che hanno quell’indice come valore di ritorno della funzione di hash, durante la ricerca, dopo aver trovato l’indice, si scorre la relativa lista e si confrontano i dati per trovare quello cercato;
  • Open addressing con linear probing: con il linear probing in caso si riscontrino delle collisioni dalla funzione di hash, l’intero trovato viene incrementato di un’unità finché non viene raggiunta una cella disponibile per il dato; stessa cosa viene fatta durante la ricerca e per ogni passo viene confrontato il dato con quello della cella per verificarne l’uguaglianza;
  • Open addressing con double hashing: con il double hashing vengono definite due funzioni di hash, se la prima dà una collisione allora si sfruttano entrambe passando alla seconda il risultato del passo precedente, fino a trovare uno spazio disponibile.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community