Tecniche HASH Corso (B) di Programmazione CDL in Informatica I livello A.A. 2003-2004 DIB - Università di Bari dal materiale didattico (aa 2002-03) di.

Slides:



Advertisements
Presentazioni simili
Training On Line - CONP. 2 Richiesta Da Menu: Conferimenti ad inizio anno termico > Agosto > Pluriennali > Nuova Richiesta Si accede alla pagina di Richiesta.
Advertisements

Gestione della Memoria
Algoritmi e Strutture Dati
LINGUAGGIO DI PROGRAMMAZIONE C
INFORMATICA Algoritmi fondamentali
Capitolo 3 Risorse e Stallo 3.1. Risorse 3.2. Introduzione
PROGRAMMARE IN PASCAL (le basi)
File System Cos’è un File System File e Directory
Algoritmi e Programmazione
Informatica Generale Marzia Buscemi
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Il Problema dellordinamento.
8. Problemi ricorrenti: ordinamento e ricerca Ing. Simona Colucci
Lez. 131 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Rappresentazione.
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Anno accademico Array e puntatori in C.
Hash Tables Indirizzamento diretto Tabelle Hash
Hash Tables Indirizzamento diretto Tabelle Hash Risoluzioni di collisioni Indirizzamento aperto.
Alberi binari di ricerca
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.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
PROGRAMMI DI RICERCA E ORDINAMENTO
Informatica di base A.A. 2003/2004 Algoritmi e programmi
1 Esempi di consistenza sui limiti Non consistente sui limiti, considera Z=2, poi X-3Y=10 Ma il dominio qui sotto e consistente sui limiti: Confrontare.
File.
Capitolo 7 Tavole hash Algoritmi e Strutture Dati.
Capitolo 7 Tavole hash Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
1 Corso di Informatica (Programmazione) Esercitazione 2 (3 dicembre 2008)
1 Corso di Informatica (Programmazione) Esercitazione 3 (5 dicembre 2008)
Algoritmi e Strutture Dati (Mod. B)
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Introduzione alla programmazione lll
07/04/2003Algoritmi Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure.
Tabelle hash.
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
Algoritmi su Tipi Semplici
Corso di Laurea in Ingegneria per lAmbiente e il Territorio Informatica per lAmbiente e il Territorio Docente: Giandomenico Spezzano Tutor: Alfredo Cuzzocrea.
Strutture di controllo in C -- Flow Chart --
Introduzione alle basi di dati
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.
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ò.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 6 (Deitel) I vettori Sommario Introduzione Vettori Dichiarazione di vettori 6.4.
Radix-Sort(A,d) // A[i] = cd...c2c1
Hashing.
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.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
Corso JAVA Lezione n° 11 Istituto Statale di Istruzione Superiore “F. Enriques”
Capitolo 7 Tavole hash Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Sistemi e Tecnologie Informatiche Ricorsione Umberto Ferraro Petrillo.
Sistemi e Tecnologie Informatiche
Modulo 5 - Database. Contenuti della lezione 5.1.1Concetti Fondamentali 5.1.2Organizzazione di un Database 5.1.3Relazioni 5.2.1Lavorare con i database.
Implementazione di dizionari Problema del dizionario dinamico Scegliere una struttura dati in cui memorizzare dei record con un campo key e alcuni altri.
Risoluzione delle collisioni con indirizzamento aperto Con la tecnica di indirizzamento aperto tutti gli elementi stanno nella tavola. La funzione hash.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
13 ottobre Decisioni F. Bombi 13 ottobre 2002.
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
Microsoft Access Chiavi, struttura delle tabelle.
Capitolo 7 Tavole hash Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Codifica dei numeri Il codice ASCII consente di codificare le cifre decimali da “0” a “9” fornendo in questo modo una rappresentazione dei numeri Per esempio:
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
“ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali.
Calcolo della radice quadrata Con metodo della bisezione Rodolfo Pietrasanta matr
Informatica Problemi e algoritmi. una situazione che pone delle domande cui si devono dare risposte. Col termine problema o situazione problematica s’indica.
Transcript della presentazione:

Tecniche HASH Corso (B) di Programmazione CDL in Informatica I livello A.A DIB - Università di Bari dal materiale didattico (aa ) di. S. Ferilli e testo consigliatp Dromey

Tecniche Hash Obiettivo Ritrovare un elemento esaminando solo pochi elementi della tabella Ritrovare un elemento esaminando solo pochi elementi della tabella Esempio: Esempio: a: |10|12|20|23|27|30|31|39|42|44|45|49|53|57|60| a(1) a(8) a(15) a(1) a(8) a(15) Trovare il record con campo chiave uguale a 44 accedendo al massimo a 3 elementi prima di terminare con successo Trovare il record con campo chiave uguale a 44 accedendo al massimo a 3 elementi prima di terminare con successo

Tecniche Hash Caso estremo Caso estremo Trovare lelemento cercato in un solo tentativo Trovare lelemento cercato in un solo tentativo Tutto ciò che si sa è il valore dellelemento cercato Tutto ciò che si sa è il valore dellelemento cercato Inserire ciascun elemento in posizione coincidente col suo valore Inserire ciascun elemento in posizione coincidente col suo valore Poco pratico Poco pratico Esempio: Numeri telefonici di 7 cifre di elementi per memorizzarne solo 15! Esempio: Numeri telefonici di 7 cifre di elementi per memorizzarne solo 15! Ottimizzazione delloccupazione di memoria Ottimizzazione delloccupazione di memoria Array di dimensione vicina al numero massimo di elementi che saranno memorizzati Array di dimensione vicina al numero massimo di elementi che saranno memorizzati

Tecniche Hash Funzioni di Accesso Necessità di ricondurre ciascun valore ad un indice valido dellarray Necessità di ricondurre ciascun valore ad un indice valido dellarray Normalizzazione dei dati Normalizzazione dei dati Esempio: 15 elementi, valore massimo nella lista 60 Esempio: 15 elementi, valore massimo nella lista 60 Applicare alla chiave la seguente trasformazione: Applicare alla chiave la seguente trasformazione: Chiave diviso 4 & Arrotondamento Potrebbe non essere noto il massimo valore degli elementi che si tratteranno Potrebbe non essere noto il massimo valore degli elementi che si tratteranno Impossibile stabilire a priori una funzione di normalizzazione Impossibile stabilire a priori una funzione di normalizzazione Necessità di un metodo più generale Necessità di un metodo più generale

Tecniche Hash Funzioni di Accesso Soluzione migliore Soluzione migliore Sufficiente una trasformazione delle chiavi che dia un indice valido dellarray Sufficiente una trasformazione delle chiavi che dia un indice valido dellarray Esempio:array indicizzato da 1 a 15 Esempio:array indicizzato da 1 a 15 Calcolare il modulo 15 della chiave Calcolare il modulo 15 della chiave Compreso fra 0 e 14 Compreso fra 0 e 14 Aggiungere ununità Aggiungere ununità Valori compresi fra 1 e 15 Valori compresi fra 1 e 15

Tecniche Hash Funzioni di Accesso h: K {0, 1, 2, …, m–1} h: K {0, 1, 2, …, m–1} K insieme dei valori distinti che il campo chiave può assumere K insieme dei valori distinti che il campo chiave può assumere m dimensione del vettore in cui si intende memorizzare gli elementi della tabella m dimensione del vettore in cui si intende memorizzare gli elementi della tabella K sottoinsieme dei numeri naturali K sottoinsieme dei numeri naturali Possibile funzione di accesso: Possibile funzione di accesso: h(k) = k MOD m Sempre compreso fra 0 e m – 1 Sempre compreso fra 0 e m – 1

Tecniche Hash Rappresentazione della Chiave K Non sottoinsieme dei numeri naturali K Non sottoinsieme dei numeri naturali Insieme di stringhe alfanumeriche Insieme di stringhe alfanumeriche La funzione hash è numerica La funzione hash è numerica Per applicarla ad una chiave non numerica, bisogna associare alla chiave un valore numerico Per applicarla ad una chiave non numerica, bisogna associare alla chiave un valore numerico Necessità di definire funzioni hash generali Necessità di definire funzioni hash generali Associazione di un valore numerico ad una chiave di qualunque tipo Associazione di un valore numerico ad una chiave di qualunque tipo Applicazione della funzione hash numerica a tale valore Applicazione della funzione hash numerica a tale valore

Tecniche Hash Rappresentazione della Chiave Un possibile metodo di codificazione Un possibile metodo di codificazione Considerare la rappresentazione binaria della chiave k, bin(k) Considerare la rappresentazione binaria della chiave k, bin(k) Se la chiave non è numerica, è data dalla concatenazione della rappresentazione binaria di ciascun carattere che la compone Se la chiave non è numerica, è data dalla concatenazione della rappresentazione binaria di ciascun carattere che la compone Calcolare il numero intero positivo corrispondente alla rappresentazione binaria della chiave, int(bin(k)) Calcolare il numero intero positivo corrispondente alla rappresentazione binaria della chiave, int(bin(k)) Esempio:K = A 4 con A = {A,B,…,Z} Esempio:K = A 4 con A = {A,B,…,Z} BARI ASCII int(bin(k)) = ord(B) · ord(A) · ord(R) · ord(I) = 66 · · · = …

Tecniche Hash Rappresentazione della Chiave Un altro metodo di codifica Un altro metodo di codifica Lasciare invariate le altre cifre numeriche e trasformare le lettere A, B, …, Z nei numeri decimali 11, 12, …, 36 Lasciare invariate le altre cifre numeriche e trasformare le lettere A, B, …, Z nei numeri decimali 11, 12, …, 36 Sommare i numeri associati ai caratteri che compongono la chiave Sommare i numeri associati ai caratteri che compongono la chiave Esempio: Esempio: A.S.L. BA16 A.S.L. BA16 12 · · · = · · · =

Tecniche Hash Collisioni Associazione, da parte di una trasformazione, della stessa posizione a chiavi distinte Associazione, da parte di una trasformazione, della stessa posizione a chiavi distinte Sinonimi Sinonimi Esempio:(chiave MOD 15) + 1 Esempio:(chiave MOD 15) + 1 Posizione 1 30, 45, 60 Posizione 1 30, 45, 60 Posizione 9 23, 53 Posizione 9 23, 53 Posizione 13 12, 27, 42, 57 Posizione 13 12, 27, 42, 57 Ciascuna posizione dellarray può contenere al più un elemento Ciascuna posizione dellarray può contenere al più un elemento Ridurre al massimo le collisioni Ridurre al massimo le collisioni Gestirle quando si verificano Gestirle quando si verificano

Tecniche Hash Collisioni Funzioni di hashing perfetto (evitano del tutto i duplicati) rare, anche per grandi tabelle Funzioni di hashing perfetto (evitano del tutto i duplicati) rare, anche per grandi tabelle Esempio: paradosso del compleanno Esempio: paradosso del compleanno Dato un gruppo di 23 persone, ci sono più del 50% di probabilità che due di esse siano nate nello stesso giorno dellanno Dato un gruppo di 23 persone, ci sono più del 50% di probabilità che due di esse siano nate nello stesso giorno dellanno In altre parole, se scegliamo una funzione aleatoria che trasforma 23 chiavi in un indirizzo di una tabella di 365 elementi, la probabilità che due chiavi NON collidano è solo (meno della metà) In altre parole, se scegliamo una funzione aleatoria che trasforma 23 chiavi in un indirizzo di una tabella di 365 elementi, la probabilità che due chiavi NON collidano è solo (meno della metà) Individuare una funzione di accesso che porti ad un numero ridotto di collisioni è un problema complesso Individuare una funzione di accesso che porti ad un numero ridotto di collisioni è un problema complesso

Tecniche Hash Collisioni Esempio Esempio possibili funzioni da un insieme K di 31 elementi in un insieme {1, 2, …, 41} di 41 posizioni possibili funzioni da un insieme K di 31 elementi in un insieme {1, 2, …, 41} di 41 posizioni Solo 41 · 40 · 39 · … · 11 = 41!/10! ingettive Solo 41 · 40 · 39 · … · 11 = 41!/10! ingettive Daranno valori distinti per ciascun argomento Daranno valori distinti per ciascun argomento Solo una ogni 10 milioni eviterà le collisioni Solo una ogni 10 milioni eviterà le collisioni Scelta dipendente dai particolari valori in K Scelta dipendente dai particolari valori in K Occorre studiare Occorre studiare Buone funzioni di accesso Buone funzioni di accesso Valide strategie per gestire le collisioni Valide strategie per gestire le collisioni

Tecniche Hash Collisioni Scelta di m critica Scelta di m critica Influenza fortemente il numero di possibili collisioni Influenza fortemente il numero di possibili collisioni b base di rappresentazione della chiave b base di rappresentazione della chiave m = b n è una scelta insoddisfacente m = b n è una scelta insoddisfacente Resto della divisione composto sempre dalle n cifre di più basso ordine della chiave Resto della divisione composto sempre dalle n cifre di più basso ordine della chiave Meglio utilizzare come divisore un numero primo di valore vicino al numero di elementi che si desiderano riservare per il vettore Meglio utilizzare come divisore un numero primo di valore vicino al numero di elementi che si desiderano riservare per il vettore

Tecniche Hash Collisioni Esempi Esempi Chiave rappresentata in base 10, m = 1000 Chiave rappresentata in base 10, m = 1000 Il resto sarà rappresentato dalle 3 cifre di più basso ordine della chiave Il resto sarà rappresentato dalle 3 cifre di più basso ordine della chiave Tutte le chiavi che terminano per 893 daranno luogo a collisioni o sinonimie Tutte le chiavi che terminano per 893 daranno luogo a collisioni o sinonimie 2893 MOD 1000 = 1893 MOD 1000 = 893 Chiave rappresentata in base 2, m = 2 p Chiave rappresentata in base 2, m = 2 p Due numeri con gli stessi p bit finali darebbero sempre luogo ad una collisione Due numeri con gli stessi p bit finali darebbero sempre luogo ad una collisione

Tecniche Hash Collisioni Numero di collisioni ridotto drasticamente se accettiamo uno spreco del 20% di memoria extra Numero di collisioni ridotto drasticamente se accettiamo uno spreco del 20% di memoria extra Esempio:array di 19 elementi invece che di 15 (indicizzati da 0 a 18) Esempio:array di 19 elementi invece che di 15 (indicizzati da 0 a 18) Posizione 0 57Posizione 8 27 Posizione 1 20, 39Posizione Posizione 3 60Posizione 11 30, 49 Posizione 4 23, 42 Posizione 12 12, 31 Posizione 6 44Posizione Posizione 7 45 Collisioni non eliminate del tutto Collisioni non eliminate del tutto

Tecniche Hash Gestione delle Collisioni Memorizzazione dei valori che collidono Memorizzazione dei valori che collidono Necessità di mantenere alta anche lefficienza media nel ritrovamento Necessità di mantenere alta anche lefficienza media nel ritrovamento Tecniche Tecniche A scansione interna A scansione interna Sinonimi memorizzati nella stessa tabella Sinonimi memorizzati nella stessa tabella A scansione esterna A scansione esterna Uso di aree di trabocco Uso di aree di trabocco

Tecniche Hash Tecnica a Scansione Interna Possono esistere molte locazioni libere nella tabella Possono esistere molte locazioni libere nella tabella Individuate da un valore speciale vuoto Individuate da un valore speciale vuoto Utilizzabili per memorizzare gli elementi che collidono Utilizzabili per memorizzare gli elementi che collidono Possibile criterio Possibile criterio Assegnare ad un elemento che collide con un altro la successiva posizione disponibile Assegnare ad un elemento che collide con un altro la successiva posizione disponibile

Tecniche Hash Metodo di Scansione Lineare (Linear probing) (Linear probing) Ricerca del prossimo elemento vuoto effettuata esaminando le posizioni contigue successive secondo la seguente funzione lineare in i: Ricerca del prossimo elemento vuoto effettuata esaminando le posizioni contigue successive secondo la seguente funzione lineare in i: pos i (h(k) + i) mod mi 1 Posizione a cui si accede la i-esima volta che una posizione del vettore viene trovata occupata Posizione a cui si accede la i-esima volta che una posizione del vettore viene trovata occupata Per i = 0:pos 0 = h(k) Per i = 0:pos 0 = h(k) Posizione iniziale da controllare Posizione iniziale da controllare

Tecniche Hash Metodo di Scansione Lineare Generalizzazione Generalizzazione pos i (h(k) + h · i) MOD mi 1 h numero intero positivo primo con m h numero intero positivo primo con m Garanzia che la scansione tocchi tutte le posizioni del vettore prima di riconsiderare posizioni già esaminate Garanzia che la scansione tocchi tutte le posizioni del vettore prima di riconsiderare posizioni già esaminate Inconveniente: fenomeno dellagglomerazione Inconveniente: fenomeno dellagglomerazione Sequenza di indirizzi scanditi per la chiave k uguale a quella per le chiavi k tali che Sequenza di indirizzi scanditi per la chiave k uguale a quella per le chiavi k tali che h(k) = h(k) + n · h

Tecniche Hash Esempio Esempio Se la posizione 12 è già occupata dalla chiave 12, allora al 31 assegneremo la prima posizione libera in avanti, ovvero la 13 Se la posizione 12 è già occupata dalla chiave 12, allora al 31 assegneremo la prima posizione libera in avanti, ovvero la Numero medio di passi compiuti per posizionare tutti i 15 elementi: 21/ Numero medio di passi compiuti per posizionare tutti i 15 elementi: 21/ elementi posizionati in un solo passo 11 elementi posizionati in un solo passo 3 elementi in 2 passi 3 elementi in 2 passi 1 solo elemento in 4 passo 1 solo elemento in 4 passo

Tecniche Hash Memorizzazione degli Elementi Dalla chiave di ricerca deriva un valore hash usando la funzione modulo (dimensione tabella) Dalla chiave di ricerca deriva un valore hash usando la funzione modulo (dimensione tabella) posizione chiave MOD m posizione chiave MOD m Se la posizione indicata dalla funzione hash è già occupata, compi una ricerca lineare in avanti a partire dalla posizione corrente Se la posizione indicata dalla funzione hash è già occupata, compi una ricerca lineare in avanti a partire dalla posizione corrente se tabella(posizione) chiave allora … se tabella(posizione) chiave allora … Se si raggiunge la fine della tabella senza aver trovato una posizione libera la ricerca deve riprendere dallinizio Se si raggiunge la fine della tabella senza aver trovato una posizione libera la ricerca deve riprendere dallinizio Posizione (posizione + 1) MOD m Posizione (posizione + 1) MOD m

Tecniche Hash Condizioni di terminazione e controlli posizione (la ricerca inizia da qui) la ricerca di una posizione libera termina qui 2 possibili condizioni di terminazione della ricerca 2 possibili condizioni di terminazione della ricerca Si incontra una cella vuota Si incontra una cella vuota Si arriva alla posizione di partenza della ricerca dopo aver controllato tutti gli elementi Si arriva alla posizione di partenza della ricerca dopo aver controllato tutti gli elementi 2 controlli (uno per ogni condizione) 2 controlli (uno per ogni condizione) x

Tecniche Hash Riduzione controlli Possibilità di ridurre tale numero attraverso un artificio Possibilità di ridurre tale numero attraverso un artificio Se la posizione indicata dalla funzione hash è già occupata, vi si pone il valorecella vuota Se la posizione indicata dalla funzione hash è già occupata, vi si pone il valorecella vuota La condizione 2 (tabella piena) non si potrà mai verificare La condizione 2 (tabella piena) non si potrà mai verificare La ricerca terminerà forzatamente per via della condizione 1 La ricerca terminerà forzatamente per via della condizione 1 Alla fine si dovrà ripristinare la situazione preesistente Alla fine si dovrà ripristinare la situazione preesistente

Tecniche Hash Riduzione controlli Bisognerà distinguere la vera causa della terminazione della ricerca Bisognerà distinguere la vera causa della terminazione della ricerca Perché effettivamente è stata trovata una cella vuota Perché effettivamente è stata trovata una cella vuota Perché la tabella era piena Perché la tabella era piena In tal caso si dovrà segnalare lerrore di tabella piena In tal caso si dovrà segnalare lerrore di tabella piena Uso di una variabile booleana errore Uso di una variabile booleana errore Vera nel caso in cui la tabella sia piena e non abbia spazio per effettuare linserimento Vera nel caso in cui la tabella sia piena e non abbia spazio per effettuare linserimento

Tecniche Hash Algoritmo per lOrdinamento calcola lindice hash in base alla chiave da memorizzare errore false se lindice associato alla chiave corrisponde ad un elemento vuoto allora poni lelemento da memorizzare in tabella altrimenti poni in posizione iniziale il valore vuoto ripeti calcola la posizione successiva (modulo dimensione tabella) finché non trovi un elemento vuoto se la posizione dellelemento vuoto coincide con quella iniziale allora segnala lerrore (errore true) altrimenti poni in tabella lelemento da memorizzare ripristina il valore modificato della tabella

Tecniche Hash Accesso Dopo aver memorizzato la tabella, possiamo effettuare la ricerca mediante funzioni di accesso Dopo aver memorizzato la tabella, possiamo effettuare la ricerca mediante funzioni di accesso Il ritrovamento avverrà con lo stesso procedimento Il ritrovamento avverrà con lo stesso procedimento Altrettanto valido Altrettanto valido Data la chiave dellelemento da cercare, si genera un indirizzo mediante la funzione hash Data la chiave dellelemento da cercare, si genera un indirizzo mediante la funzione hash Se a tale indirizzo si trova la chiave cercata allora la ricerca si può arrestare immediatamente Se a tale indirizzo si trova la chiave cercata allora la ricerca si può arrestare immediatamente Altrimenti bisogna procedere per ricerca lineare come nella fase di memorizzazione Altrimenti bisogna procedere per ricerca lineare come nella fase di memorizzazione

Tecniche Hash 3 condizioni di terminazione della ricerca 3 condizioni di terminazione della ricerca Si trova la chiave cercata in tabella Si trova la chiave cercata in tabella Esito positivo Esito positivo Si incontra una cella vuota Si incontra una cella vuota Esito negativo (elemento non trovato) Esito negativo (elemento non trovato) Si arriva alla posizione di partenza della ricerca dopo aver controllato tutti gli elementi Si arriva alla posizione di partenza della ricerca dopo aver controllato tutti gli elementi Esito negativo (elemento non trovato) Esito negativo (elemento non trovato) 3 controlli (uno per ogni condizione) 3 controlli (uno per ogni condizione) Possibilità di ridurre tale numero attraverso un artificio analogo a quello per evitare il controllo tabella piena Possibilità di ridurre tale numero attraverso un artificio analogo a quello per evitare il controllo tabella piena

Tecniche Hash Artificio per la riduzione dei controlli Dopo aver confrontato la chiave cercata con la posizione indicata dalla funzione hash e aver scoperto che non sono uguali si pone nella posizione di partenza della ricerca proprio la chiave cercata Dopo aver confrontato la chiave cercata con la posizione indicata dalla funzione hash e aver scoperto che non sono uguali si pone nella posizione di partenza della ricerca proprio la chiave cercata La condizione 3 di elemento non trovato non si potrà mai verificare La condizione 3 di elemento non trovato non si potrà mai verificare In caso di tabella piena ed elemento non trovato, la ricerca terminerà forzatamente per la condizione 1 In caso di tabella piena ed elemento non trovato, la ricerca terminerà forzatamente per la condizione 1 Alla fine si dovrà ripristinare la situazione preesistente Alla fine si dovrà ripristinare la situazione preesistente

Tecniche Hash Causa della terminazione Bisognerà distinguere la vera causa della terminazione della ricerca: Bisognerà distinguere la vera causa della terminazione della ricerca: Perché effettivamente esisteva la chiave in tabella Perché effettivamente esisteva la chiave in tabella Perché la chiave non esisteva e la tabella era piena Perché la chiave non esisteva e la tabella era piena In tal caso si dovrà segnalare che lelemento non è stato trovato In tal caso si dovrà segnalare che lelemento non è stato trovato Necessità di 2 variabili booleane Necessità di 2 variabili booleane Attivo Attivo Falsa quando si trova o la chiave o una posizione vuota Falsa quando si trova o la chiave o una posizione vuota Trovato Trovato Vera solo nel caso in cui si trovi la chiave Vera solo nel caso in cui si trovi la chiave

Tecniche Hash Algoritmo di Ricerca calcola lindice hash come chiave modulo dimensione tabella imposta attivo e trovato in modo da terminare la ricerca se la chiave si trova nella posizione indicata dallindice hash allora poni le condizioni per la terminazione altrimenti poni la chiave nella posizione data dallindice hash mentre non è soddisfatta alcuna condizione di terminazione calcola lindice successivo modulo dimensione se la chiave si trova nella posizione corrente allora Poni le condizioni di terminazione e valuta se trovato è vera altrimenti se la posizione è vuota segnala la terminazione ripristina il valore modificato della tabella

Tecniche Hash Programma Pascal begin attivo := true; trovato := false; start := chiave MOD dimensione; posizione := start; if tabella[start] = chiave then begin attivo := false; trovato := true; temp := tabella[start] end begin attivo := false; trovato := true; temp := tabella[start] endelse begin temp := tabella[start]; tabella[start] := chiave end; begin temp := tabella[start]; tabella[start] := chiave end; while attivo do begin begin posizione := posizione + 1 MOD dimensione; posizione := posizione + 1 MOD dimensione; if tabella[posizione] = chiave then if tabella[posizione] = chiave then begin begin attivo := false; if posizione <> start then trovato := true end else else if tabella[posizione] = vuoto then attivo := false end; end; tabella[start] := temp end.

Tecniche Hash Considerazioni Prestazione valutabile in termini del numero di elementi della tabella che devono essere esaminati prima della terminazione della ricerca Prestazione valutabile in termini del numero di elementi della tabella che devono essere esaminati prima della terminazione della ricerca Funzione del fattore di carico Funzione del fattore di carico Percentuale di posizioni occupate in tabella Percentuale di posizioni occupate in tabella Si dimostra che, sotto opportune ipotesi statistiche, sono esaminati mediamente ½[1 + 1/(1 – )] elementi prima che la ricerca termini con successo Si dimostra che, sotto opportune ipotesi statistiche, sono esaminati mediamente ½[1 + 1/(1 – )] elementi prima che la ricerca termini con successo Per = 0.8 si hanno mediamente 3 accessi, qualunque sia la dimensione della tabella Per = 0.8 si hanno mediamente 3 accessi, qualunque sia la dimensione della tabella Il costo per una ricerca infruttuosa è maggiore, mediamente ½[1 + 1/(1 – ) 2 ] Il costo per una ricerca infruttuosa è maggiore, mediamente ½[1 + 1/(1 – ) 2 ]