La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Ispezione lineare La funzione hash h(k,i) si ottiene da una funzione hash ordinaria h'(k) ponendo Lesplorazione inizia dalla cella h(k,0) = h'(k) e continua.

Presentazioni simili


Presentazione sul tema: "Ispezione lineare La funzione hash h(k,i) si ottiene da una funzione hash ordinaria h'(k) ponendo Lesplorazione inizia dalla cella h(k,0) = h'(k) e continua."— Transcript della presentazione:

1 Ispezione lineare La funzione hash h(k,i) si ottiene da una funzione hash ordinaria h'(k) ponendo Lesplorazione 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.

2 Lispezione lineare è facile da implementare ma soffre del problema delladdensamento 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.

3 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.

4 Osserviamo che se h'( j) = h'(k) anche le due sequenze di ispezione coincidono. Questo porta ad un fenomeno di addensamento secondario (meno grave delladdensamento primario). Laddensamento 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.

5 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.

6 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:

7 e in generale Quindi

8 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.

9 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).

10 Con lhash 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 dellhash uniforme.

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

12 Proprietà: Assumendo lipotesi 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.

13 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 lipotesi di hash uniforme la prima cella ispezionata può essere con uguale probabilità una qualsiasi delle m celle.

14 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 è

15 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

16 Conseguenza : Assumendo lipotesi 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.

17 Proprietà: Assumendo lipotesi 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 è

18 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:

19 Possiamo maggiorare la sommatoria con un integrale ottenendo

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

21 Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi ordinati : alberi radicati con un ordine tra i figli di un nodo.

22 f ch ea d gb = f c h e a d g b libero f ch e a d gb radicato f ch e a d gb ordinato f ch ea d gb

23 Alberi binari Alberi posizionali : alberi radicati in cui ad ogni figlio di un nodo è associata una posizione. Le posizioni che non sono occupate da un nodo sono posizioni vuote (nil). Alberi k-ari : alberi posizionali in cui ogni posizione maggiore di k è vuota. Alberi binari : alberi k-ari con k = 2. Il figlio in posizione 1 si dice figlio sinistro e quello in posizione 2 si dice figlio destro.

24 c b d ae … … … posizionale c b d a e k-ario (k = 4) … … f …

25 Alberi binari Il modo più conveniente per descrivere gli alberi binari è mediante la seguente. Definizione ricorsiva di albero binario: a)linsieme vuoto Ø è un albero binario; b)se T s e T d sono alberi binari ed r è un nodo allora la terna ordinata (r, T s,T d ) è un albero binario.

26 Lalbero vuoto Ø si rappresenta graficamente con quadratino nero Per rappresentare lalbero T = (r, T s, T d ) si disegna un nodo etichettato r e sotto di esso le due rappresentazioni dei sottoalberi T s e T d, con T s alla sinistra di T d r TsTs TdTd

27 Lalbero: T = (c, (b, (d, Ø, Ø), (a, (f, Ø, Ø), Ø)), (g, (e, Ø, Ø), Ø)) si rappresenta graficamente: c bg ad f e

28 Nella memoria lalbero: T = (c, (b, (d, Ø, Ø), (a, (f, Ø, Ø), Ø)), (g, (e, Ø, Ø), Ø)) si rappresenta nel modo seguente: p left right c nil key g nil b e a f d

29 Alberi binari di ricerca Un albero binario di ricerca è un albero binario in cui la chiave di ogni nodo è maggiore o uguale delle chiavi dei nodi del sottoalbero sinistro e minore o uguale delle chiavi dei nodi del sottoalbero destro. Ad esempio:

30 Operazioni sugli alberi binari di ricerca Stampa della lista ordinata dei nodi: Stampa(x) if x nil Stampa(x.left) print x Stampa(x.right)

31 Complessità: T(0) = c T(n) = T(k)+b+T(n-k-1) Verifichiamo per sostituzione che T(n) = (c + b) n + c T(0) = c = (c + b)0 + c T(n) = T(k) + b + T(n-k-1) = = (c + b)k +c+b+(c + b)(n-k-1)+c = (c +b)n +c


Scaricare ppt "Ispezione lineare La funzione hash h(k,i) si ottiene da una funzione hash ordinaria h'(k) ponendo Lesplorazione inizia dalla cella h(k,0) = h'(k) e continua."

Presentazioni simili


Annunci Google