ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

Documenti analoghi
ADT Mappa. Le chiavi (il mezzo per accedere agli elementi) hanno lo scopo di rendere efficiente la ricerca. Strutture Dati

Esercizio. Scrivere una classe ListMap<K, V> che implementa la mappa con una lista. Strutture Dati

Implementazione con alberi binari di ricerca

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D:

Liste concatenate. Collezione ordinata di nodi. Carlo Paolo Simona. Anna. ciascun nodo contiene due riferimenti:

Dati e Algoritmi 1: A. Pietracaprina. Mappa/Dizionario (I parte)

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

Implementazione della coda con liste concatenate. x v. il front della coda è memorizzato nel primo nodo (head) della lista

Metodi di una Collection

L' ADT grafo è un contenitore di elementi memorizzati nelle posizioni del grafo (vertici e archi)

Collezioni, mappe e iteratori (a cura del Prof. Marco Patella)

L ADT Priority Queues Implementazione di PQ mediante Sequenza Alberi Heap Heap Sort Adaptable Priority Queues

Esercitazione 5 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016

Esempio su strutture dati dinamiche: ArrayList

Corso: Strutture Dati Docente: Annalisa De Bonis

Esercizi Capitolo 7 - Hash

Le liste. ADT e strutture dati per la rappresentazione di sequenze. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 5

Hash Table. Hash Table

Algoritmi e Strutture di Dati

Implementazione ADT: Alberi

INTRODUZIONE INTRODUZIONE TABELLE HASH FUNZIONE HASH

Algoritmi e Strutture Dati

ALBERI : introduzione SOMMARIO ALBERI ALBERI. ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI

Le liste con array. Rimuovere la perla rossa costringe a spostare molte altre perle. Dove mettere la perla verde se si è esaurito il filo?

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

Argomenti della lezione. Tipo di dato astratto. Array. Tipo di dato Lista. Liste Implementazione di liste in Java Stack Code

Alberi ( GT. 7 ) In informatica, un albero è un modello astratto con cui viene rappresentata una struttura gerarchica

Esempio su strutture dati dinamiche: ArrayList

Introduzione Generics Iteratori. Collezioni in Java. Dr. Giulio Pellitta. 13 aprile 2011

Il tipo astratto di dati Node List

lezione 9 min-heap binario Heap e Alberi posizionali generali

Esercitazione 11. Liste semplici

Problemi di ordinamento

Informatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list

Corso di Algoritmi e Strutture Dati con Laboratorio. The JCF(continua): L interfaccia Map

heap heap heap? max- e min-heap concetti ed applicazioni heap = catasta condizione di heap non è una struttura ordinata

Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java

Coda su lista concatenata

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)

Fondamenti di Informatica T-1

Organizzazione Fisica dei Dati (Parte II)

Liste doppie. Doubly Linked Lists. GT: 6.2 (e 3.3) Argomenti della lezione

argomenti Hashing Richiamo sul concetto di dizionario Tabelle hash ! Hashing ! Funzioni hash per file ! Insieme di coppie del tipo <elemento, chiave>

La struttura dati CODA

Algoritmi e Strutture Dati

Lezione 12 Tabelle Hash

Algoritmi e Strutture Dati

Corso di Algoritmi e Strutture Dati con Laboratorio. Tipi di dato pila e coda

Esercizi di Algoritmi e Strutture Dati

Implementazione Java di un ADT

COLLEZIONI. SOMMARIO Collezioni: Liste: ITERATORI ITERATORI

Esempio su strutture dati dinamiche: ArrayList

Esercizi Strutture dati di tipo astratto

Informatica 3. LEZIONE 12: Liste. Modulo 1: ADT lista e implementazione basata su array Modulo 2: Lista concatenata

Fondamenti di Informatica T1 Mappe

Linked Lists. Liste linkate (1) liste linkate ( stack, queues ), trees. Liste linkate come strutture

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto

Strutture dati. Le liste

Calcolare x n = x x x (n volte)

OCA JAVA 8 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Capitolo 9. Tipi enumerativi, tipi generici e interfacce. c 2005 Pearson Education Italia Capitolo 9-1 / 73

ADT Coda con priorità

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

Heap scenario. Ho un insieme dinamico di oggetti, ciascuno identificato con una priorità. (la priorità è semplicemente un numero);

Liste, Pile e Code. 1. L ADT Lista. Liste Pile e Code Pag. 1/18

Fondamenti di Informatica T-1

Algoritmi di Ricerca. Esempi di programmi Java

Pile e code. ADT e strutture dati per la rappresentazione di sequenze ad accesso LIFO e FIFO

Struttura dati astratta Coda

Generics & Collections

se invoco un metodo di Object che è ridefinito in Point, viene invocato il metodo definito in Point

Grafi (non orientati e connessi): minimo albero ricoprente

QUICKSORT. Basato sul paradigma divide-et-impera (come MERGE-SORT)

22 - Strutture Dati (Java Collections Framework)

Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009. Enumerativi

Specifica: la sintassi. Specifica: la semantica. Specifica: la semantica

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

Strutture Dinamiche. Fondamenti di Informatica

Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari.

Corso: Fondamenti di Informatica (Canale 5) a.a Corsi di laurea: Ing. Settore Informazione

INFORMATICA 3 Prof.ssa Sara Comai

La struttura dati LISTA

FUNZIONI che operano su LISTE

05EIP. Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Bank. Bank. BankAccount. Bank. Bank. private BankAccount[] conti; // Posizione attuale private int posizioneattuale;...

Sommario. Collezioni. Collezioni: Liste: Pile (stack) Collezioni. Collezioni. Collezioni Struttura indicizzata (array) Nodi

Alberi binari e alberi binari di ricerca

Algoritmi e Strutture Dati. Insiemi e dizionari Riassunto finale

Alberi. In informatica, un albero è un modello astratto di una struttura dati gerarchica

Pile e Code. Definiamo una collezione come un gruppo di oggetti, detti gli elementi della collezione.

Mappa di compressione

Algoritmi 2 - Dr. Simone Faro - Esercizi sulle Tabelle Hash 1

Dizionari. Corso di Programmazione 3 - Ingegneria dell Informazione e dell Organizzazione 5 dicembre, Gino Perna

Dizionari. Hashtables.

Transcript:

Come nella Mappa: un Dizionario è un contenitore di elementi del tipo (k,v) dove k è la chiave e v è il suo corrispondente valore. ogni elemento (k,v) viene detto entrata (entry) del Dizionario. chiavi e valori possono essere oggetti di qualsiasi tipo. Diversamente dalla Mappa: sono permesse entrate multiple con la stessa chiave.

Esistono due tipi di dizionari: dizionari non ordinati (non è definita alcuna relazione d'ordine totale sulle chiavi: l'unico test permesso fra chiavi è quello di uguaglianza) dizionari ordinati (è definita una relazione d'ordine totale sulle chiavi)

Metodi fondamentali size(): restituisce il numero di entrate in D. isempty(): verifica se D è vuoto. find(k): se D contiene una entrata con chiave k, restituisce tale entrata, altrimenti restituisce null. findall(k): restituisce una collezione iterabile contenente tutte le entrate con chiave k. insert(k,v): inserisce una entrata con chiave k e valore v in D; restituisce l'entrata creata. remove(e): rimuove da D una entrata e, restituendo l'entrata rimossa; si ha un errore se e non è in D. entries(): restituisce una collezione iterabile delle entrate in D.

Interfaccia public interface Dictionary<K,V> { public int size(); public boolean isempty(); public Entry<K,V> find(k key) throws InvalidKeyException; public Iterable<Entry<K,V>> findall(k key) throws InvalidKeyException; public Entry<K,V> insert(k key, V value) throws InvalidKeyException; public Entry<K,V> remove(entry<k,v> e) throws InvalidEntryException; } public Iterable<Entry<K,V>> entries();

Implementazione con liste non ordinate lista S Le entrate del dizionario D vengono mantenute in una lista non ordinata S non è definita alcuna relazione d'ordine totale sulle chiavi

Implementazione con liste non ordinate Algorithm findall(k): Crea una lista S inizialmente vuota for each entry e in D.entries() do if e.getkey() = k then S.addLast(e) return S Algorithm insert(k,v): Crea una nuova entrata e = (k,v) S.addLast(e) {lecito perché S non è ordinata} return e

Implementazione con liste non ordinate Algorithm remove(e): {assumiamo che e non memorizzi la sua position in S} for each position p in S.positions() do if p.element() = e then S.remove(p) return e lancia una InvalidEntryException {non esiste l'entrata e in D} Algorithm entries(): return S

Implementazione con liste non ordinate Analisi: spazio: O(n) tempo: insert: O(1) find e remove: O(n) (nel caso pessimo si deve scorrere tutta la lista) la performance di remove può essere portata ad O(1) se ogni entrata di D memorizza la sua posizione nella lista S Questa implementazione è opportuna solo per dizionari di piccola taglia o dizionari in cui gli inserimenti sono le operazioni più comuni, mentre le ricerche e le rimozioni sono eseguite di rado (per esempio record di login a una workstation)

ADT Dizionario Implementazione con tabelle hash Possiamo usare una tabella hash con separate chaining per risolvere le collisioni Bucket array A Dizionario basato su lista 0 1 2 3 4 Ogni cella A[i] mantiene un dizionario che contiene tutte le entrate con chiave k tale che h(k) = i

Implementazione con tabelle hash A: bucket array N: dimensione del bucket array n: numero di entrate del dizionario λ: massimo load factor della tabella hash h: funzione hash Algorithm insert(k,v): if (n + 1) / N > λ then raddoppia la taglia del bucket array e fai il rehash delle chiavi e := A[h(k)].insert (k,v) n:= n + 1 return e A[h(k)] è un dizionario quindi possiamo usare il metodo insert per inserire una nuova entrata

Implementazione con tabelle hash Algorithm findall(k): return A[h(k)].findAll (k) Algorithm remove(e): t := A[h(k)].remove (e) n = n 1 return t

Implementazione con tabelle hash Analisi: spazio: O(n) tempo: insert: O(1) remove: atteso: O(1) caso peggiore: O(n) find: atteso: O(1) caso peggiore: O(n) findall: atteso: O(1 + s) dove s è il numero di chiavi restituite. caso peggiore: O(n)