1 Ultima Lezione del Corso di Fondamenti di Informatica 1 a.a – 06 Ma 29-Nov-2005
2
3 public interface Container { boolean isEmpty() void makeEmpty(); /* spesso si definisce anche size() che restituisce il numero di elementi nel contenitore */ // int size(); } ADTCONTENITORE
4 public interface Stack extends Container { void push(Object obj); Object top() throws EmptyStackException; Object pop() throws EmptyStackException; } Strutture Dati Complessita' Temporale Array (operazioni in coda) Lista concatenata push() O(1) top() O(1) pop() O(1) ADT PILA (STACK) LIFO java.util.Stack (con qualche differenza)
5 public interface Queue extends Container { void enqueue(Object obj); Object getFront() throws EmptyQueueException; Object dequeue() throws EmptyQueueException; } Strutture Dati Complessita' Temporale Array circolare Lista concatenata enqueue() O(1) getFront() O(1) dequeue() O(1) ADT CODA (QUEUE) FIFO Non ce implementazione nella libreria standard interfaccia java.util.Queue (con qualche differenza)
6 public interface List extends Container { ListIterator getIterator(); } public interface ListIterator { boolean hasNext(); void add(Object obj); Object next() throws NoSuchElementException; void remove() throws IllegalStateException; } hasNext() O(1) O(1) next() O(1) O(1) add() O(n) O(1) remove() O(n) O(1) Array Lista concatenata Complessita' Temporale Strutture Dati ADTLISTA java.util.ArrayList, Vector, LinkedList (con qualche differenza)
7 public interface Dictionary extends Container { void insert(Comparable key, Object value); Object find(Comparable key); void remove(Comparable key); } Strutture Dati Complessita' Temporale Array non ordinato Array ordinato Lista Concatenata insert() O(n)* O(n) O(1) find() O(n) O(lgn) O(n) remove() O(n) O(n) O(n) ADTDIZIONARIO * O(1) senza verifica di univocità della chiave java.util.HashMap, interfaccia java.util.Map
8 public interface Table extends Container { void insert(int key, Object value); Object find(int key); void remove(int key); } insert() O(1) find() O(1) remove() O(1) Array Complessita' Temporale Strutture Dati ADTTABELLA Uso non ottimale della memoria fattore di riempimento (dati contenuti/dimensione tabella)
9 interface HashTable extends Container { void insert(Object key, Object value); Object find(Object key); void remove(Object key); } insert() O(n/M)* find() O(n/M) remove() O(n/M) * M dimensione della tabella Nellipotesi che la funzione di hash sia uniforme Array e Lista Concatenata (bucket) Complessita' Temporale Strutture Dati ADTHASH TABLE java.util.Hashtablejava.util.Hashtable, java.util.HashMapjava.util.HashMap
10 interface HashTable extends Container { void add(Object obj); boolean contains(Object obj); Object[] toArray(); } add() O(n 2 ) O(n) contains() O(n 2 ) O(lgn) toArray() O(n 2 ) O(n) Union O(n 2 ) O(nlgn) Intersect O(n 2 ) O(nlgn) subtract O(n 2 ) O(nlgn) Array non ordinato Array Ordinato Complessita' Temporale Strutture Dati ADTSET interfacce java.util.Set, SortedSet classi: HashSet
11 Esercitazione