Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x...
-
Upload
bertrando-parisi -
Category
Documents
-
view
215 -
download
0
Transcript of Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x...
![Page 1: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/1.jpg)
Metodo della moltiplicazione
h(k) = m(kA mod 1)
in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria.
Vantaggi : la scelta di m non è critica e nella pratica funziona bene con tutti i valori di A anche se ci sono ragioni teoriche per preferire l’inverso del rapporto aureo
2/)15( A
![Page 2: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/2.jpg)
h(k) si calcola facilmente se si sceglie m = 2p e A = q/2w con 0 < q < 2w dove w è la lunghezza di una parola di memoria.
kq
=
r1
w bit
h(k)p bit
r0
)1mod(
1mod2
22
2)( 0
kAm
kqrkh
wp
wp
![Page 3: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/3.jpg)
Randomizzazione di funzioni hash
Più seriamente: per ogni funzione hash si possono trovare delle distribuzioni di probabilità degli input per le quali la funzione non ripartisce bene le chiavi tra le varie liste della tavola hash.
Nessuna funzione hash può evitare che un avversario malizioso inserisca nella tavola una sequenza di valori che vadano a finire tutti nella stessa lista.
![Page 4: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/4.jpg)
Possiamo usare la randomizzazione per rendere il comportamento della tavola hash indipendente dall’input.
L’idea è quella di usare una funzione hash scelta casualmente in un insieme “universale” di funzioni hash.
Questo approccio viene detto hash universale.
![Page 5: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/5.jpg)
Un insieme H di funzioni hash che mandano un insieme U di chiavi nell’insieme {0,1,...,m-1} degli indici della tavola hash si dice universale se:
“per ogni coppia di chiavi distinte j e k vi sono al più |H|/m funzioni hash in H tali che h(j) = h(k)”
Se scegliamo casualmente la funzione hash in un insieme universale H la probabilità che due chiavi qualsiasi j e k collidano è 1/m, la stessa che si avrebbe scegliendo casualmente le due celle in cui mandare j e k.
![Page 6: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/6.jpg)
Proprietà : Supponiamo che la funzione hash h sia scelta casualmente in un insieme universale H e venga usata per inserire n chiavi in una tavola T di m celle e sia k una chiave qualsiasi.La lunghezza attesa E[nh(k)] della lista h(k) è α = n/m se k non è presente nella tavola ed è minore di α+1 se k è presente.
Quindi, indipendentemente dalla distribuzione degli input, una Search richiede tempo medio (1+α) che, se n = O(m), è (1).
![Page 7: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/7.jpg)
Dimostrazione : Per ogni coppia di chiavi distinte j e k definiamo una variabile casuale Xj,k che vale 1 se h(j) = h(k) e 0 altrimenti.
jkTk
kjj XY,
,
che è il numero di chiavi diverse da j che stanno nella lista h(j).
Per ogni j definiamo la variabile casuale
Siccome la probabilità che h(j) = h(k) è 1/m abbiamo E[Xj,k] = 1/m.
![Page 8: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/8.jpg)
Il valore atteso di Yj è
jkTkjkTk
kjjkTk
kjj mXXY
,,,
,,
1]E[]E[]E[
Se j non è presente nella tavola nh(j)=Yj ed il numero di elementi in T diversi da j è n per cui
m
nYn jjh ]E[]E[ )(
Se j è presente nella tavola nh(j)=Yj+1 ed il numero di elementi in T diversi da j è n-1 per cui
111
1]E[]E[ )(
m
nYn jjh
![Page 9: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/9.jpg)
Come costruire un insieme universale di funzioni hash
Contrariamente a quanto potrebbe sembrare non è molto difficile. Bastano poche nozioni elementari di aritmetica modulare.
Per ogni coppia di interi (a,b) tali che 1 ≤ a < p e 0 ≤ b < p definiamo una funzione hash.
mpbakkh ba mod]mod)[()(,
Iniziamo scegliendo un numero primo p maggiore di ogni possibile chiave k.
![Page 10: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/10.jpg)
Proprietà : la famiglia di funzioni
H = {ha,b : 1 ≤ a < p, 0 ≤ b < p}
è universale
pbakr mod)(
Dimostrazione : Spezziamo il calcolo di
in due fasi calcolando prima:
mpbakkh ba mod]mod)[()(,
mrkh ba mod)(, e poi:
![Page 11: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/11.jpg)
Mostreremo dapprima che per ogni coppia (k,j) di chiavi distinte sono distinti anche
Ci sono p(p-1) coppie (a,b), 1 ≤ a < p e 0 ≤ b < p.
Anche le coppie (k,j) di chiavi distinte tali che 0 ≤ k, j < p sono p(p-1).
pbakr mod)( pbajs mod)(
e inoltre, al variare di a e b, si ottengono tutte le coppie distinte (r,s) con 0 ≤ r,s < p
![Page 12: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/12.jpg)
Siano j e k due chiavi distinte e siano pbakspbajr mod)( mod)(
Quindi se le chiavi j e k sono diverse anche r ed s sono diversi.
Osserviamo che
r - s = a (j - k) mod p ≠ 0
in quanto a e j - k non sono divisibili per p (perché 1 ≤ a < p e 1 ≤ | j – k | < p)
![Page 13: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/13.jpg)
Dimostreremo ora che date una coppia (j,k) di chiavi distinte ed una coppia (r,s) di valori distinti con 0 ≤ r,s < p esiste una ed una sola coppia (a,b) di interi tali che
r = (aj +b) mod p
s = (ak +b) mod p
1 ≤ a < p
0 ≤ b < p
Per questo basta dimostrare che tale sistema ha una e una sola soluzione per a e b.
![Page 14: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/14.jpg)
Il sistema:
r = (aj + b) mod p
s = (ak + b) mod p
1 ≤ a < p
0 ≤ b < p
si risolve nel modo seguente:Sottraendo le due equazioni otteniamo
(r – s) mod p = a (j – k) mod pSiccome p è primo e j – k è diverso da 0 esiste l’inverso moltiplicativo z = (j – k)–1 tale che z(j – k) mod p = 1.
![Page 15: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/15.jpg)
Esistenza inverso moltiplicativoEsistono x e y tali che MCD(a,b) = ax + by
Dimostrazione per induzione su b Se b = 0:
Se b > 0:
01),( baabaMCD
)'/'('
')/('
induttiva) (Ipotesi ')mod('
)mod,(),(
ybaxbay
ybbaabx
ybabx
babMCDbaMCD
![Page 16: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/16.jpg)
Se MCD(a,b)=1 esiste x tale che ax = 1 mod b
Per la proprietà precedente
e quindi:
1),( byaxbaMCD
1modmod)( baxbbyax
Siccome MCD(j – k, p) = 1 in quanto p è primo e 1 ≤ | j – k | < p possiamo concludere che l’inverso moltiplicativo z = (j – k)–1 di (j – k) esiste.
![Page 17: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/17.jpg)
Quindi
Esplicitando la prima equazione rispetto a b si ottiene
pajrpb mod )(mod La condizione 0 ≤ b < p implica
b mod p = b
e quindi anche b = (r - aj) mod p è unico
0modmod)( papsrz
La condizione 1 ≤ a < p implica a mod p = a e quindi a = z (r - s) mod p è unico
![Page 18: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/18.jpg)
Dunque per ogni coppia (j,k) di chiavi distinte ed ogni coppia (r,s) di valori distinti 0 ≤ r,s < p esiste una ed una sola funzione ha,b tale che
r = (aj +b) mod p s = (ak +b) mod p
Dunque, date due chiavi distinte j e k, se scegliamo casualmente ha,b i due valori
r = (aj +b) mod p s = (ak +b) mod psono, con uguale probabilità, una qualsiasi coppia di valori distinti tra 0 e p-1.
![Page 19: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/19.jpg)
La probabilità che j e k collidano è uguale alla probabilità che s = r mod m quando la coppia (r,s) di valori distinti viene scelta casualmente
Dato r il numero di valori s con 0 ≤ s < p tali che s = r mod m è al più p/m e tra questi quelli diversi da r sono al più
m
p
m
mpmp
11
11/
mm
p
p
11
1
1
Quindi la probabilità di una collisione è al più
![Page 20: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/20.jpg)
Dunque se j e k sono chiavi distinte ed a e b sono scelti casualmente
m
khjh baba
1)()( Pr ,,
e quindi
è una famiglia universale di funzioni hash.
H = {ha,b : 1 ≤ a < p, 0 ≤ b < p}
![Page 21: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/21.jpg)
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.
![Page 22: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/22.jpg)
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.
![Page 23: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/23.jpg)
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”
![Page 24: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/24.jpg)
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
![Page 25: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/25.jpg)
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:
![Page 26: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/26.jpg)
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
![Page 27: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/27.jpg)
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”
![Page 28: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/28.jpg)
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”
![Page 29: Metodo della moltiplicazione h(k) = m(kA mod 1) in cui A è una costante reale con 0 < A < 1 ed x mod 1 = x – x è la parte frazionaria. Vantaggi : la scelta.](https://reader033.fdocuments.net/reader033/viewer/2022052618/5542eb5c497959361e8ca904/html5/thumbnails/29.jpg)
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 m2.