Risoluzione delle collisioni con indirizzamento aperto Con la tecnica di indirizzamento aperto tutti gli elementi stanno nella tavola. La funzione hash.

Slides:



Advertisements
Presentazioni simili
Premessa: si assume di aver risolto (correttamente
Advertisements

Strutture dati per insiemi disgiunti
Algoritmi e Strutture Dati
Capitolo 8 Sistemi lineari.
ODE PROBLEMA DI CAUCHY IN 1-D Sia f : I x RR, I  R.
Meccanica 2 1 marzo 2011 Cinematica in una dimensione
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
RB-alberi (Red-Black trees)
Hash Tables Indirizzamento diretto Tabelle Hash
Hash Tables Indirizzamento diretto Tabelle Hash Risoluzioni di collisioni Indirizzamento aperto.
Strutture dati elementari
Alberi binari di ricerca
Soluzioni di problemi elettrostatici
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
1 Strutture dati avanzate Vedremo alcune strutture dati che permettono di eseguire in modo particolarmente efficiente un determinato insieme di operazioni.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Capitolo 7 Tavole hash Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Algoritmi e Strutture Dati (Mod. B)
Alberi di Ricorrenza Gli alberi di ricorrenza rappresentano un modo conveniente per visualizzare i passi di sostitu- zione necessari per risolvere una.
Il moto armonico Altro esempio interessante di moto è quello armonico caratterizzato dal fatto che l’accelerazione è proporzionale all’opposto della posizione:
STATISTICA a.a PARAMETRO t DI STUDENT
STATISTICA a.a METODO DEI MINIMI QUADRATI REGRESSIONE
Heap binomiali Gli heap binomiali sono strutture dati su cui si possono eseguire efficientemente le operazioni: Make(H) : crea uno heap vuoto Insert(H,
Algoritmi e Programmazione Avanzata
Prof. Fabio Bonoli6 maggio 2009 Quesiti per lEsame di Stato Il coefficiente binomiale.
Tavole dinamiche Spesso non si sa a priori quanta memoria serve per memorizzare dei dati in un array, in una tavola hash, in un heap, ecc. Può capitare.
Anche la RB-Delete ha due fasi: Nella prima viene tolto un nodo y avente uno dei sottoalberi vuoto sostituendolo con la radice dellaltro sottoalbero. Per.
Metodo della moltiplicazione
Esercizio 10.* Un cassiere vuole dare un resto di n centesimi di euro usando il minimo numero di monete. a) Descrivere un algoritmo goloso per fare ciò.
Strutture dati per insiemi disgiunti
Radix-Sort(A,d) // A[i] = cd...c2c1
Hashing.
Vedremo in seguito che (n log n) è un limite stretto per il problema dellordinamento. Per ora ci limitiamo a dimostrare che: La complessità nel caso pessimo.
Ispezione lineare La funzione hash h(k,i) si ottiene da una funzione hash ordinaria h'(k) ponendo L’esplorazione inizia dalla cella h(k,0) = h'(k) e continua.
RB-insert(T, z) // z.left = z.right = T.nil Insert(T, z) z.color = RED // z è rosso. Lunica violazione // possibile delle proprietà degli alberi // rosso-neri.
Per valutare la complessità ammortizzata scomponiamo ogni Union: nelle due FindSet e nella Link che la costituiscono e valuteremo la complessità in funzione.
La complessità media O(n log n) di Quick-Sort vale soltanto se tutte le permutazioni dell’array in ingresso sono ugualmente probabili. In molte applicazioni.
ESTENSIONI SEMPLICI e TEOREMA DELL’ELEMENTO PRIMITIVO
Capitolo 7 Tavole hash Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
EQUAZIONI BIQUADRATICHE
Valutare la difficoltà dei problemi
Implementazione di dizionari Problema del dizionario dinamico Scegliere una struttura dati in cui memorizzare dei record con un campo key e alcuni altri.
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Algoritmi e Strutture Dati Strutture Dati Elementari.
Ordinamento in tempo lineare Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, ossia per algoritmi che non fanno alcuna.
Hashing. 2 argomenti Hashing Tabelle hash Funzioni hash e metodi per generarle Inserimento e risoluzione delle collisioni Eliminazione Funzioni hash per.
Algoritmi e Strutture Dati
Il problema della ricerca Algoritmi e Strutture Dati.
1 Analisi ammortizzata Si considera il tempo richiesto per eseguire, nel caso pessimo, una intera sequenza di operazioni. Se le operazioni costose sono.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione.
Capitolo 7 Tavole hash Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Codici prefissi Un codice prefisso è un codice in cui nessuna parola codice è prefisso (parte iniziale) di un’altra Ogni codice a lunghezza fissa è ovviamente.
Problemi risolvibili con la programmazione dinamica Abbiamo usato la programmazione dinamica per risolvere due problemi. Cerchiamo ora di capire quali.
Complessità Computazionale
Come aumentare gli alberi
Forma normale delle equazioni di 2° grado Definizione. Un'equazione di secondo grado è in forma normale se si presenta nella forma Dove sono numeri.
1 Lezione XV-b Avviare la presentazione col tasto “Invio”
Elementi di calcolo combinatorio e di probabilità. Prof. Ugo Morra Liceo scientifico V. Vecchi di Trani Lezione di potenziamento delle abilità in matematica.
32 = 9 x2 = 9 x = 3 32 = 9 √9 = 3 L’estrazione di radice
Rudimenti di Complessità Corso di Programmazione II Prof. Dario Catalano.
Sistemi di equazioni lineari. Sistemi di primo grado di due equazioni a due incognite Risolvere un sistema significa trovare la coppia di valori x e y.
In alcuni casi gli esiti di un esperimento possono essere considerati numeri naturali in modo naturale. Esempio: lancio di un dado In atri casi si definisce.
1 ELEMENTI DI CALCOLO COMBINATORIO. 2 Elementi di calcolo combinatorio Si tratta di una serie di tecniche per determinare il numero di elementi di un.
I numeri relativi DEFINIZIONE. Si dicono numeri relativi tutti i numeri interi, razionali e irrazionali dotati di segno (positivo o negativo). ESEMPI Numeri.
Transcript della presentazione:

Risoluzione delle collisioni con indirizzamento aperto Con la tecnica di indirizzamento aperto tutti gli elementi stanno nella tavola. La funzione hash non individua una singola cella ma un ordine in cui ispezionare tutte le celle. L’inserimento di un elemento avviene nella prima cella libera che si incontra nell’ordine di ispezione. Nella ricerca di un elemento si visitano le celle sempre nello stesso ordine.

La funzione hash è una funzione h(k,i) che al variare di i tra 0 ed m-1 fornisce, per ciascuna chiave k, una sequenza di indici h(k,0), h(k,1),..., h(k,m-1) che rappresenta l’ordine di ispezione. Siccome vogliamo poter ispezionare tutte le celle, la sequenza deve essere una permutazione dell’insieme degli indici 0,1,..., m-1 della tavola.

La realizzazione delle operazioni è: Insert(T, k) i = 0 repeat j = h(k, i) if T[ j ] == nil T[ j ] = k return j i = i +1 until i == m “Errore : tavola piena”

La realizzazione di Delete è più complicata Non possiamo infatti limitarci a porre nil nella cella!!! Perché ??? Search(T, k) i = 0 repeat j = h(k, i) if T[ j ] == k return j i = i +1 until i == m or T[ j ] == nil

Delete(T, i) T[ i ] = deleted La Delete si limita ad assegnare alla chiave dell’elemento da togliere un particolare valore diverso da ogni possibile chiave:

La Search continua a funzionare invariata: Search(T, k) i = 0 repeat j = h(k, i) if T[ j ] == k return j i = i +1 until i == m or T[ j ] == nil

La Insert deve essere modificata: Insert(T, k) i = 0 repeat j = h(k, i) if T[ j ] == nil or T[ j ] == deleted T[ j ] = k return j i = i+1 until i == m “Errore: tavola piena”

Con l’indirizzamento aperto la funzione hash fornisce una sequenza di ispezione. In questo caso l’ipotesi di hash uniforme diventa: “Ogni chiave ha la stessa probabilità 1/m! di generare una qualsiasi delle m! possibili sequenze di ispezione”

Vi sono tre tecniche comunemente usate per determinare l’ordine di ispezione: 1. Ispezione lineare 2. Ispezione quadratica 3. Doppio hash Nessuna delle tre genera tutte le m! sequenze di ispezione. Le prime due ne generano soltanto m e l’ultima ne genera m 2.

Ispezione lineare La funzione hash h(k,i) si ottiene da una funzione hash ordinaria h'(k) ponendo L’esplorazione inizia dalla cella h(k,0) = h'(k) e continua con le celle h'(k)+1, h'(k)+2, ecc. fino ad arrivare alla cella m-1, dopo di che si continua con le celle 0,1,ecc. fino ad aver percorso circolarmente tutta la tavola.

L’ispezione lineare è facile da implementare ma soffre del problema dell’addensamento primario: “i nuovi elementi inseriti nella tavola tendono ad addensarsi attorno agli elementi già presenti” Una cella libera preceduta da t celle occupate ha probabilità (t +1)/m di venir occupata dal prossimo elemento inserito. Quindi sequenze consecutive di celle occupate tendono a diventare sempre più lunghe.

Ispezione quadratica La funzione hash h(k, i) si ottiene da una funzione hash ordinaria h'(k) ponendo I valori di m, c 1 e c 2 non possono essere qualsiasi ma debbono essere scelti opportunamente in modo che la sequenza di ispezione percorra tutta la tavola. Un modo per fare ciò è suggerito nel problema 11-3 del libro. dove c 1 e c 2 sono due costanti con c 2 ≠ 0.

Osserviamo che se h'( j) = h'(k) anche le due sequenze di ispezione coincidono. Questo porta ad un fenomeno di addensamento secondario (meno grave dell’addensamento primario). L’addensamento secondario è dovuto al fatto che il valore iniziale h'(k) determina univocamente la sequenza di ispezione e pertanto abbiamo soltanto m sequenze di ispezione distinte.

Problema 11-3 del libro: Consideriamo la seguente procedura: j = h'(k) i = 0 while i < m and “T[j] non è la cella cercata” i = i+1 j = ( j+ i ) mod m Dimostrare che la sequenza delle j che viene generata è una sequenza di ispezione quadratica.

Dobbiamo dimostrare che esistono due costanti c 1 e c 2 con c 2 ≠ 0 tali che sia una invariante del ciclo. Per i = 0 Per i = 1 Per i = 2 Per i = 3 Calcoliamo i primi valori di h:

e in generale Quindi

Doppio hash La funzione hash h(k,i) si ottiene da due funzione hash ordinarie h 1 (k) ed h 2 (k) ponendo Perché la sequenza di ispezione percorra tutta la tavola il valore di h 2 (k) deve essere relativamente primo con m (esercizio del libro). Possiamo soddisfare questa condizione in diversi modi.

Possiamo scegliere m = 2 p potenza di 2 ed h 2 (k) = 2 h'(k) + 1 con h'(k) funzione hash qualsiasi per una tavola di dimensione m' = m/2 = 2 p-1. Un altro modo è scegliere m primo e scegliere h 2 (k) che ritorna sempre un valore minore di m. Un esempio è: h 1 (k) = k mod m e h 2 (k) = 1 + (k mod m') dove m' è minore di m (di solito m' = m-1).

Con l’hash doppio abbiamo  (m 2 ) sequenze di ispezione distinte. Questo riduce notevolmente i fenomeni di addensamento e rende il comportamento della funzione hash molto vicino a quello ideale dell’hash uniforme.

Analisi dell’indirizzamento aperto Valutiamo la complessità media di Search in funzione del fattore di carico α = n/m. Assumiamo l’ipotesi di hash uniforme, ossia che ogni permutazione di 0,1,..., m-1 sia ugualmente probabile come ordine di ispezione. Notiamo che con l’indirizzamento aperto n ≤ m e quindi 0 ≤ α ≤ 1.

Proprietà: Assumendo l’ipotesi di hash uniforme, il numero medio di celle ispezionate nella ricerca di una chiave k non presente in una tavola hash con indirizzamento aperto è m se α = 1 e al più 1/(1-α) se α < 1. Dimostrazione: Se α = 1 non ci sono celle vuote e la ricerca termina dopo aver ispezionato tutte le m celle.

Se α < 1 la ricerca termina con la prima cella vuota incontrata durante la sequenza di ispezione. Siccome ci sono n celle occupate la probabilità che la prima cella ispezionata risulti occupata e che quindi si debba ispezionare anche la successiva è α = n/m. Per l’ipotesi di hash uniforme la prima cella ispezionata può essere con uguale probabilità una qualsiasi delle m celle.

La probabilità che si debba ispezionare una terza cella è la probabilità α = n/m che la prima cella risulti occupata moltiplicata per la probabilità (n-1)/(m-1) che anche la seconda cella risulti occupata, ossia In generale la probabilità che si debba ispezionare la i-esima cella della sequenza è

Dunque noi ispezioniamo una prima cella con probabilità 1, una seconda cella con probabilità α, una terza cella con probabilità minore di α 2, una quarta con probabilità minore di α 3 e così via. Il numero atteso di celle ispezionate è quindi minore di

Conseguenza : Assumendo l’ipotesi di hash uniforme, il numero medio di celle ispezionate quando inseriamo una nuova chiave in una tavola hash con indirizzamento aperto è m se  = 1 e al più 1/(1-α) se α < 1.

Proprietà: Assumendo l’ipotesi di hash uniforme, il numero medio di celle ispezionate nella ricerca di una chiave k presente in una tavola hash con indirizzamento aperto è (m+1)/2 se α = 1 e al più 1/α ln [1/(1-α)] se α < 1. Dimostrazione: Se α = 1 la chiave cercata può trovarsi, con uguale probabilità, nella prima, seconda,..., ultima cella e quindi il numero medio di celle ispezionate è

Se α < 1 la ricerca ispeziona le stesse celle visitate quando la chiave cercata è stata inserita nella tavola. Supponiamo che la chiave cercata sia stata inserita dopo altre i chiavi. Il numero medio di celle ispezionate è al più 1/(1-α) =1/(1-i/m), ossia m/(m – i). Mediando su tutte le n chiavi presenti nella tavola otteniamo:

Possiamo maggiorare la sommatoria con un integrale ottenendo

Ecco una tavola dei valori di 1/α ln [1/(1-α)] α 1/  ln [1/(1-  )]