Metodo della moltiplicazione

Slides:



Advertisements
Presentazioni simili
Metodo di Calcolo Numerico per Equazioni differenziali Ordinarie
Advertisements

Algoritmi e Strutture Dati
Capitolo 8 Sistemi lineari.
Autovalori e autovettori
Algoritmi e Programmazione
ODE PROBLEMA DI CAUCHY IN 1-D Sia f : I x RR, I  R.
Hash Tables Indirizzamento diretto Tabelle Hash
Hash Tables Indirizzamento diretto Tabelle Hash Risoluzioni di collisioni Indirizzamento aperto.
Alberi binari di ricerca
Algebra delle Matrici.
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Algoritmi e Dimostrazioni Stefano Berardi
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Iterazione enumerativa (for)
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 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Capitolo 7 Tavole hash Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Usa la tecnica del.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Alberi di Ricorrenza Gli alberi di ricorrenza rappresentano un modo conveniente per visualizzare i passi di sostitu- zione necessari per risolvere una.
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Numeri razionali I numeri RAZIONALI sono i numeri che possono essere rappresentati come frazioni. I razionali comprendono i numeri interi e quelli decimali.
Corso di biomatematica lezione 6: la funzione c2
Modelli simulativi per le Scienze Cognitive
Analisi bivariata Passiamo allo studio delle relazioni tra variabili
Algoritmi su Tipi Semplici
Fondamenti di Informatica1 Ripetizioni di segmenti di codice Spesso è necessario ripetere più volte uno stesso segmento dell'algoritmo (e.g. I/O, elaborazioni.
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.
MOLTIPLICAZIONE COMBINATORIA
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.
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ò.
Giuseppina Trifiletti
Strutture dati per insiemi disgiunti
Radix-Sort(A,d) // A[i] = cd...c2c1
Hashing.
Passo 3: calcolo del costo minimo
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.
Valutare la difficoltà dei problemi
Complessità del problema Se non facciamo ipotesi sul tipo degli elementi della sequenza le uniche operazioni permesse sono confronti e assegnazioni. Problema.
PROPAGAZIONE DEGLI ERRORI:
Implementazione di dizionari Problema del dizionario dinamico Scegliere una struttura dati in cui memorizzare dei record con un campo key e alcuni altri.
Parte 3 Lo stato: variabili, espressioni ed assegnazioni

Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Risoluzione delle collisioni con indirizzamento aperto Con la tecnica di indirizzamento aperto tutti gli elementi stanno nella tavola. La funzione hash.
Hashing. 2 argomenti Hashing Tabelle hash Funzioni hash e metodi per generarle Inserimento e risoluzione delle collisioni Eliminazione Funzioni hash per.
1 Ordinamento (Sorting) INPUT: Sequenza di n numeri OUTPUT: Permutazione π = tale che a 1 ’  a 2 ’  … …  a n ’ Continuiamo a discutere il problema dell’ordinamento:
1 Analisi ammortizzata Si considera il tempo richiesto per eseguire, nel caso pessimo, una intera sequenza di operazioni. Se le operazioni costose sono.
liceo Lioy e liceo Pigafetta, 10 febbraio 2011
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 Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Rappresentazione dell'informazione
1 Ordinamento (Sorting) Input: Sequenza di n numeri Output: Permutazione π = tale che: a i 1  a i 2  ……  a i n Continuiamo a discutere il problema dell’ordinamento:
Codici prefissi Un codice prefisso è un codice in cui nessuna parola codice è prefisso (parte iniziale) di un’altra Ogni codice a lunghezza fissa è ovviamente.
La codifica dei numeri.
Conversione binario-ottale/esadecimale
Problemi risolvibili con la programmazione dinamica Abbiamo usato la programmazione dinamica per risolvere due problemi. Cerchiamo ora di capire quali.
Complessità Computazionale
LA RETTA NEL PIANO CARTESIANO
Proprietà macromolecolari Il calcolo delle proprietà macromolecolari implica l’utilizzo della statistica della catena polimerica in termini di distanze.
Rudimenti di Complessità Corso di Programmazione II Prof. Dario Catalano.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo La ricorsione 15 Approccio ricorsivo, esercizi sulla.
Transcript della presentazione:

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

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. k q  = r1 w bit h(k) p bit r0

Randomizzazione di funzioni 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. 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.

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.

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.

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

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. Siccome la probabilità che h(j) = h(k) è 1/m abbiamo E[Xj,k] = 1/m. Per ogni j definiamo la variabile casuale che è il numero di chiavi diverse da j che stanno nella lista h(j).

Il valore atteso di Yj è Se j non è presente nella tavola nh(j)=Yj ed il numero di elementi in T diversi da j è n per cui Se j è presente nella tavola nh(j)=Yj+1 ed il numero di elementi in T diversi da j è n-1 per cui

Come costruire un insieme universale di funzioni hash Contrariamente a quanto potrebbe sembrare non è molto difficile. Bastano poche nozioni elementari di aritmetica modulare. Iniziamo scegliendo un numero primo p maggiore di ogni possibile chiave k. Per ogni coppia di interi (a,b) tali che 1 ≤ a < p e 0 ≤ b < p definiamo una funzione hash.

H = {ha,b : 1 ≤ a < p, 0 ≤ b < p} Proprietà : la famiglia di funzioni H = {ha,b : 1 ≤ a < p, 0 ≤ b < p} è universale Dimostrazione : Spezziamo il calcolo di in due fasi calcolando prima: e poi:

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). Mostreremo dapprima che per ogni coppia (k,j) di chiavi distinte sono distinti anche e inoltre, al variare di a e b, si ottengono tutte le coppie distinte (r,s) con 0 ≤ r,s < p

Siano j e k due chiavi distinte e siano 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) Quindi se le chiavi j e k sono diverse anche r ed s sono diversi.

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.

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 p Siccome p è primo e j – k è diverso da 0 esiste l’inverso moltiplicativo z = (j – k)–1 tale che z(j – k) mod p = 1.

Esistenza inverso moltiplicativo Esistono x e y tali che MCD(a,b) = ax + by Dimostrazione per induzione su b Se b = 0: Se b > 0:

Se MCD(a,b)=1 esiste x tale che ax = 1 mod b Per la proprietà precedente e quindi: 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.

Quindi La condizione 1 ≤ a < p implica a mod p = a e quindi a = z (r - s) mod p è unico Esplicitando la prima equazione rispetto a b si ottiene La condizione 0 ≤ b < p implica b mod p = b e quindi anche b = (r - aj) mod p è unico

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 sono, con uguale probabilità, una qualsiasi coppia di valori distinti tra 0 e p-1.

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ù Quindi la probabilità di una collisione è al più

H = {ha,b : 1 ≤ a < p, 0 ≤ b < p} Dunque se j e k sono chiavi distinte ed a e b sono scelti casualmente e quindi H = {ha,b : 1 ≤ a < p, 0 ≤ b < p} è una famiglia universale di funzioni hash.

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”

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 realizzazione di Delete è più complicata Non possiamo infatti limitarci a porre nil nella cella!!! Perché ???

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

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: Ispezione lineare Ispezione quadratica 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.