TDA Position (TDA List Sequence)
|
|
- Guglielmo Graziani
- 5 anni fa
- Visualizzazioni
Transcript
1 TDA Position (TDA List Sequence) [GT3, 5.3] TDA Position: motivazione Vediamo se e come è possibile definire qualcosa che ci permetta di accedere ai nodi in tempo costante (quasi come in un array ) conservando la dinamicità della struttura. Potremmo ad esempio trovare un modo per riferirci ai nodi della lista in tempo costante quindi vorremmo dei metodi che possano prendere in input un nodo della lista e dare in output un nodo della lista Allora sarebbe possibile riferirsi DIRETTAMENTE ad un nodo e perciò diventerebbe possibile RIMUOVERE UN QUALSIASI elemento della lista in tempo costante 2 (dovuto solo all aggiornamento dei puntatori ) 1
2 Position: definizione informale In altre parole la position è il NOME che permette di riferirci (senza ambiguità) all elemento associato a quella position. Position X Position X Quindi è sempre associata allo stesso elemento. La position X assegnata ad un certo elemento e non cambia neanche se cambia il rango di e (l ordine) oppure cambia l elemento e memorizzato in X (il contenuto) 3 Astraiamo : TDA Position Il TDA Position astrae il concetto di nodo, quindi: nasconde il modo in cui il contenitore è implementato Il TDA Position modella la nozione di posto dove si trova memorizzato un singolo elemento del contenitore (attenzione a non confondersi con posizione ) Ragioniamo in maniera MODULARE 4 2
3 L interfaccia del TDA Position public interface Position { // Restituisce l elemento memorizzato in questa position public Object element(); È l unica cosa in comune a tutte le possibili versioni di Position 5 TDA Position: come implementiamo? DIPENDE DA ***COSA*** VOGLIAMO IMPLEMENTARE!!! Elemento base di una lista (ossia nodo che contiene un elemento) Elemento base di un albero (ossia nodo di un albero che contiene un elemento) Elemento base di un albero binario (ossia nodo di un albero binario che contiene un elemento) Elemento base di un grafo (ossia nodo-vertice- di un grafo che contiene un elemento; arco di un grafo) Elemento base di un set di una partition (ossia elemento di un set che fa parte della partition) 6 3
4 TDA Position: come implementiamo? Quindi l implementazione di Position sarà effettuata su ESTENSIONI dell interfaccia di Position (in cui si aggiungono i metodi specifici del **nodo** che caratterizza il contenitore che stiamo considerando) Elemento base di una lista (DNode implements Position) Elemento base di un albero (TNode implements TPosition extends Position) Elemento base di un albero binario (BTNode implements BTPosition extends Position) Elemento base di un grafo (GraphPosition; Vertex extends Position; MyVertex implements Vertex) Elemento base di un set di una partition (SetPosition extends Position; SetNode implements SetPosition) 7 Implementazione del TDA Position per le liste class DNode implements Position { // Variabili istanza private Object element; private DNode next, prev; //posso riferirmi al nodo precedente e successivo //Costruttori public DNode(Object e,dnode p,dnode n) { element = e; next = n; prev = p; public void setelement(object newelem) { element = newelem; public void setnext(dnode newnext) { next = newnext; public void setprev(dnode newprev) { prev = newprev; public DNode getnext() { return next; public DNode getprev() { return prev; // Metodo dell interfaccia Position public Object element() throws InvalidPositionException{ if ((prev == null) && (next == null)) return element; throw new InvalidPositionException( Position non valida ) Perché occorre questo controllo??? Vediamo dopo 8 4
5 Il metodo CheckPosition E quello che cambia a seconda di cosa stiamo implementando Occorre controllare se la position p è valida Allora il metodo QuelloCheCiServe CheckPosition(Position p) consentirà (in tempo O(1)) di: 1. Verificare che sia stata passata una position valida 2. (casting) Convertire la position passata in QuelloCheCiServe, se valida [scopro p per rivelare l implementazione] 3. Lanciare un eccezione per position non valida se fallisce uno dei due punti precedenti 9 CheckPosition per DNode protected DNode CheckPosition(Position p) throws InvalidPositionException{ if (p == null) throw new InvalidPositionException( Position nulla passata a NodeList ); if (p == header) throw new InvalidPositionException( Header non è una position valida ); if (p == trailer) throw new InvalidPositionException( Trailer non è una position valida ); try { DNode temp = (DNode) p; // si tenta il cast: se ha successo, potrò //riferirmi al nodo e quindi implementare, ad es., before(p) con v.getprev() if ((temp.getprev() == null) (temp.getnext() == null)) throw new InvalidPositionException( Position non appartenente ad una valida NodeList ); return temp; catch (ClassCastException e) { throw new InvalidPositionException( Position di tipo sbagliato per questo contenitore lista ); 10 5
6 Implementazione del TDA Position per le liste class DNode implements Position { // Variabili istanza private Object element; private DNode next, prev; //posso riferirmi al nodo precedente e successivo //Costruttori public DNode(Object e,dnode p,dnode n) { element = e; next = n; prev = p; public void setelement(object newelem) { element = newelem; public void setnext(dnode newnext) { next = newnext; public void setprev(dnode newprev) { prev = newprev; public DNode getnext() { return next; public DNode getprev() { return prev; // Metodo dell interfaccia Position public Object element() throws InvalidPositionException{ if ((prev == null) && (next == null)) return element; throw new InvalidPositionException( Position non valida ) Perché occorre questo controllo??? Se invoco element() senza aver fatto checkposition, la Position potrebbe esistere, ma potrebbe non essere di un nodo che fa parte di una lista (nodo creato e basta!). 11 Quando viene creata la Position? Quando viene creato il **nodo** associato alla Position (DNode, TNode, BTNode ) Lo fa il codice nell implementazione public Position insertlast(object element) { numelementi++; DNode newnode=new DNode(element,trailer.getPrev(),trailer); trailer.getprev().setnext(newnode); //settaggio del successore dell ex-last trailer.setprev(newnode); //ecco il nuovo last return newnode; Vedremo l utilità di CONSERVARE la position creata (cioè tenerne traccia) che viene assegnata (univocamente) all oggetto nel momento in cui viene inserito nella struttura [location] 12 6
7 Implementazione di Vertex Sia v un vertice che memorizza l'elemento o. L oggetto vertex per v contiene: un riferimento a o un riferimento alla position dell'oggetto-vertex nel contenitore V dei vertici del grafo (ci sarà un metodo di Vertex che setterà questa position) un riferimento a un contenitore I(v) (contenitore di incidenza di v) i cui elementi sono riferimenti (position) agli archi incidenti su v Riferimento alla pos. di v in V I(v) o v 13 Interfacce Vertex e Edge public interface GraphPosition extends Position{ public interface Vertex extends GraphPosition{ public interface Edge extends GraphPosition{ Element può rappresentare il nome del vertice Element può rappresentare il nome dell arco N.B. A scopo didattico, presento una versione semplificata. Esiste un design pattern DECORATOR che consente di aggiungere qualsiasi attributo a Edge e Vertex [potrebbe servire per BFS, Dijkstra ]. Vedremo la prossima volta questa possibilità. 14 7
8 Implementazione di Vertex protected class MyVertex extends MyPosition implements Vertex { /** Lista di incidenza del vertice. */ protected List incedges; /** Posizione del vertice nel contenitore V del grafo. */ protected Position loc; /** Costruisce il vertice con il dato elemento. */ MyVertex(Object o) { elem = o; incedges = new NodeList(); 15 Implementazione Graph /** Inserisce e restituisce un nuovo vertice con un dato elemento */ public Vertex insertvertex(object o) { MyVertex vv = new MyVertex(o); VList.insertLast(vv); Position p = VList.last(); vv.setlocation(p); return vv; 16 8
9 /** Rimuove un vertice (e tutti gli archi incidenti) */ public Object removevertex(vertex v) throws InvalidPositionException { MyVertex vv = checkvertex(v); Iterator inc = incidentedges(v); while (inc.hasnext()) { MyEdge e = (MyEdge) inc.next(); if (e.location()!= null) // if the edge has not been marked invalid removeedge(e); VList.remove(vv.location()); return v.element(); La rimozione del vertice dalla lista dei vertici sarà fatta senza cercarlo 17 TDA Sequence Il TDA Sequence è un TDA general-purpose che consente di rappresentare un insieme di elementi (arbitrari) su cui è definito un ordine lineare. Supporta sia i metodi del TDA List sia quelli del TDA Vector E possibile accedere ad un elemento sia attraverso il suo RANGO sia attraverso la sua POSITION TDA Vector TDA sequence TDA List 18 9
10 TDA Sequence: (operazioni) interfaccia public interface Sequence extends List, Vector { // Metodi aggiuntivi (metodi ponte ): mettono in relazione ranghi e positions //Restituisce la position dell elemento di rango r (errore se r<0 o r>size-1) public Position atrank(int rank) throws BoundaryViolationException; //Restituisce il rango dell elemento in position p public int rankof(position p) throws InvalidPositionException; 19 TDA Sequence: operazioni //Operazioni generiche size() isempty() //Operazioni dal TDA Vector Object elematrank(r), Object replaceatrank(r, o), void insertatrank(r, o), Object removeatrank(r) //Operazioni dal TDA List Position first() Position last() Position before(p) Position after(p) Object replace(p, o) Object remove(p) Position insertbefore(p, o) Position insertafter(p, o) Position insertfirst(o) Position insertlast(o) 20 10
11 Implementazione con liste d.l. (occorre implementare solo i metodi ponte e i metodi del TDA Vector. CheckPosition è lo stesso) public class NodeSequence extends NodeList implements Sequence { // controlla che il rango sia nel range [0,numElements-1] protected void checkrank(int rank, int n) throws BoundaryViolationException { if (rank < 0 rank >= n) throw new BoundaryViolationException( Rango " + rank + " non valido per questa sequenza di " + n + " elementi."); Stesso metodo della classe ArrayVector 21 Implementazione con liste d.l. public Position atrank(int rank) throws BoundaryViolationException{ DNode node; checkrank(rank, size()); if (rank <= size()/2) { //scorre la lista a partire dall header node = header.getnext(); for (int i=0; i < rank; i++) node = node.getnext(); else { //scorre la lista all indietro a partire dal trailer node = trailer.getprev(); for (int i=1; i < size()-rank; i++) node = node.getprev(); return node; 22 11
12 Implementazione con liste d.l. public void insertatrank (int rank, Object element) throws BoundaryViolationException { checkrank(rank, size()+1) if (rank == size()) insertlast(element); else insertbefore(atrank(rank), element); public Object removeatrank (int rank) throws BoundaryViolationException { checkrank(rank,size()); return remove(atrank(rank)); 23 Implementazione con liste d.l. public int rankof (Position p) throws BoundaryViolationException { DNode node = checkposition((position) p); DNode node1=header; int rango=0; while (node1.getnext()!=node) { node1=node1.getnext(); rango=rango+1; return rango; public Object elematrank (int rank) throws BoundaryViolationException{ Position node; checkrank(rank,size()); node = atrank(rank); return node.element(); 24 12
13 Scrivere un metodo void makefirst(position p) che, senza usare remove(p), sposta l elemento in posizione p all inizio della sequenza lasciando inalterato l ordine dei rimanenti elementi (la posizione p non deve essere persa). Usare i metodi dell interfaccia Sequence. Soluzione mostrata e spiegata in aula 25 Scrivere un metodo void makefirst(position p) che, senza usare remove(p), sposta l elemento in posizione p all inizio della lista lasciando inalterato l ordine dei rimanenti elementi (la posizione p non deve essere persa). Usare i metodi dell interfaccia List. Soluzione mostrata e spiegata in aula 26 13
14 II appello Soluzione mostrata e spiegata in aula Scrivere un metodo void LocalReverse(Position p, Position q) che, invocato su una sequenza S la modifica in modo che gli elementi compresi tra quello di position p e quello di position q compaiano nell ordine rovesciato (estremi esclusi). Ad esempio, se S = (1, 2, 3, 4, 5, 6, 7, 8), con p position di 3 e q position di 7, allora dopo l invocazione del metodo si avrà S = (1, 2, 3, 6, 5, 4, 7, 8). Si richiede di porre particolare attenzione alle condizioni di errore. Il metodo proposto deve usare i metodi dell interfaccia del TDA Sequence per accedere alla sequenza e risolvere l esercizio. Si possono usare altri TDA di appoggio, purchè non si usino array. Si assegnerà il punteggio massimo solo se l esercizio non prevede strutture di appoggio
Il TDA List è la versione orientata agli oggetti della struttura dati lista. Una sequenza di nodi
List Il TDA List Il TDA List è la versione orientata agli oggetti della struttura dati lista Una sequenza di nodi La versione astratta del nodo sarà il TDA Position Possiamo scrivere dei metodi che prendono
DettagliList. Il TDA List. Interfaccia Position. Il TDA Position. Il TDA List 1. Ancora su Position
Il TDA List List Il TDA List è la versione orientata agli oggetti della struttura dati lista Una sequenza di nodi La versione astratta del nodo sarà il TDA Position Possiamo scrivere dei metodi che prendono
DettagliImplementazione della coda con liste concatenate. x v. il front della coda è memorizzato nel primo nodo (head) della lista
Liste concatenate Implementazione della coda con liste concatenate head (front della coda) tail (rear della coda) Ø e y a x v il front della coda è memorizzato nel primo nodo (head) della lista il rear
DettagliE` un tipo astratto di dati che supporta tutti i metodi dell'adt Array list e dell'adt Lista di nodi più i seguenti:
E` un tipo astratto di dati che supporta tutti i metodi dell'adt Array list e dell'adt Lista di nodi più i seguenti: Position atindex(int r): restituisce la posizione dell'elemento di indice r; si verifica
DettagliIl tipo astratto di dati Node List
Il tipo astratto di dati Node List Tipo di dati e operazioni Tipi di dati: oggetti arbitrari (come al solito) Operazioni: Metodi generici: - integer size() - boolean isempty() Metodi di accesso: - Position
DettagliCoda a doppio ingresso (Deque)
Coda a doppio ingresso (Deque) Definizione informale Una coda a doppio ingresso o Deque è un TDA simile alla Coda che supporta inserimenti e cancellazioni ad entrambe le estremità Deque si pronuncia deck
DettagliCoda a doppio ingresso (Deque)
Coda a doppio ingresso (Deque) Definizione informale Una coda a doppio ingresso o Deque è un TDA simile alla Coda che supporta inserimenti e cancellazioni ad entrambe le estremità Deque si pronuncia deck
DettagliDefinizione. Un grafo è una coppia (V, E), dove
Il TDA Graph Definizione Un grafo è una coppia (V, E), dove V è un insieme di nodi, chiamati vertici E è un insieme di coppie di nodi, chiamati archi Maggiori dettagli nelle slide Grafi Nella nostra implementazione,
DettagliIl TDA Graph. Definizione. Note 1. Interfacce Vertex ed Edge
Il TDA Graph Definizione Un grafo è una coppia (V, E), dove V è un insieme di elementi, chiamati vertici (nodi) E è un insieme di coppie di nodi, chiamati archi Nella nostra implementazione, vertici ed
DettagliParte di laboratorio
Ultima lezione Parte di laboratorio Alcuni hints per l implementazione di DecoratedGraph 1 Uso delle Mappe per decorare Sia p la posizione di un nodo. Posso considerare una mappa con chiavi (Object) COLORE,
DettagliListe doppie. Doubly Linked Lists. GT: 6.2 (e 3.3) Argomenti della lezione
Liste doppie GT: 6.2 (e 3.3) Doubly Linked Lists 1 Argomenti della lezione ADT Position NodeList interface Position PositionList class DNode NodePositionList inserzione rimozione Iteratore ADT Iterator
DettagliListe concatenate. Collezione ordinata di nodi. Carlo Paolo Simona. Anna. ciascun nodo contiene due riferimenti:
Liste concatenate Collezione ordinata di nodi head tail next next next next element element element element Ø Anna Carlo Paolo Simona ciascun nodo contiene due riferimenti: - un riferimento "element" a
DettagliL' ADT grafo è un contenitore di elementi memorizzati nelle posizioni del grafo (vertici e archi)
L' ADT grafo è un contenitore di elementi memorizzati nelle posizioni del grafo (vertici e archi) le informazioni possono essere memorizzate sia sui vertici sia sugli archi del grafo Metodi fondamentali
DettagliIl TDA Map. Tabelle hash
Il TDA Map Tabelle hash Definizione informale Il TDA Map memorizza coppie formate da una chiave k e da un valore v La coppia è chiamata entry Ogni chiave deve essere unica Questa è la differenza principale
DettagliDefinizione informale. Il TDA Map memorizza coppie formate da una chiave k e da un valore v. La coppia è chiamata entry. Ogni chiave deve essere unica
Il TDA Map Tabelle hash Definizione informale Il TDA Map memorizza coppie formate da una chiave k e da un valore v La coppia è chiamata entry Ogni chiave deve essere unica Questa è la differenza principale
DettagliIl TDA Map. Definizione informale. I metodi del TDA Map 2. I metodi del TDA Map 1. Interfaccia Map 1 NO_SUCH_KEY. Tabelle hash
Il TDA Map Tabelle hash Definizione informale Il TDA Map memorizza coppie formate da una chiave k e da un valore v La coppia è chiamata entry Ogni chiave deve essere unica Questa è la differenza principale
DettagliEsercizio. Strutture Dati
Esercizio Si scriva un metodo public Position sibling(position v) che preso in input un nodo v restituisca il fratello di v. Il metodo dovrà lanciare una BoundaryViolationException nel caso in cui
DettagliAlberi. Albero binario. Un albero binario è un albero (ordinato) in cui ciascun nodo può avere al massimo due figli (figlio destro e figlio sinistro)
Albero binario Un albero binario è un albero (ordinato) in cui ciascun nodo può avere al massimo due figli (figlio destro e figlio sinistro) albero binario proprio: ogni nodo interno ha esattamente due
DettagliSTRUTTURE DATI: OLTRE GLI ARRAY LISTE
STRUTTURE DATI: OLTRE GLI ARRAY le strutture dati progettate per ospitare una collezione di elementi, sono variazioni di array Ma l'array ha dimensione fissa anche in Java determinata a priori, in linguaggi
DettagliAlberi. In informatica, un albero è un modello astratto di una struttura dati gerarchica
Il TDA Tree Alberi In informatica, un albero è un modello astratto di una struttura dati gerarchica Struttura dati non lineare Si pensi al file system di un sistema operativo Le relazioni in un albero
DettagliADT albero binario completo
ADT albero binario completo Un albero binario completo è un albero binario in cui ogni livello, fino al penultimo, è completamente riempito. L'ultimo livello è riempito da sinistra a destra a 1 nodo b
DettagliEsercizio: Lista Circolare
Esercizio: Lista Circolare Si realizzi in Java un gestore di una lista circolare. La dimensione minima della lista è 2 elementi (ed è anche la dimensione iniziale). La dimensione massima è 20 elementi.
DettagliEsercizi proposti per il corso di Strutture Dati
Esercizi proposti per il corso di Strutture Dati 2010-2011 Da ricordare: 1. Non modificare il contenitore su cui si invoca il metodo: significa che posso eventualmente modificarlo durante l esecuzione
DettagliIl TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3
Il TDA Dictionary Definizione informale Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Una voce è una coppia (chiave, elemento) Le principali
DettagliDefinizione informale
Il TDA Dictionary Definizione informale Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Una voce è una coppia (chiave, elemento) Le principali
DettagliDefinizione informale. Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche
Il TDA Dictionary Definizione informale Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Una voce è una coppia (chiave, elemento) Le principali
Dettaglisemplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente
Liste doppie Liste: semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente Rappresentazione grafica semplice: doppia: Gli
Dettaglisemplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente
1 of 23 22/11/2004 10.23 Liste: semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente Rappresentazione grafica Lista semplice:
DettagliAlbero in cui ogni nodo ha al più due figli. I figli di un nodo costituiscono una coppia ordinata
Il TDA BinaryTree Albero Binario A B C D E F G Albero in cui ogni nodo ha al più due figli. I figli di un nodo costituiscono una coppia ordinata I figli di un nodo vengono chiamati figlio sinistro e figlio
DettagliVettori, liste e sequenze
Vettori, liste e sequenze Il concetto di Sequenza Il concetto di sequenza come insieme ordinato di oggetti è fondamentale. La sequenza è una entità lineare composta di elementi in cui ogni elemento viene
DettagliPrima prova intercorso 29 Novembre 2005
Laboratorio di Algoritmi e Strutture Dati R.Zizza (matr. dispari-dispari) Anno Acc. 2005-06 Prima prova intercorso 29 Novembre 2005 Cognome: Nome: Matricola: Regole del gioco: La soluzione del compito
DettagliLINKEDLIST: implementazione iteratore. LINKEDLIST: iteratore INNERITERATOR INNERITERATOR
LINKEDLIST: iteratore Il metodo iterator() restituisce un oggetto iteratore sulla lista per scandire gli elementi in sequenza a partire dall inizio della lista. public Iterator iterator() { return new
DettagliLaboratorio di Algoritmi e Strutture Dati Anno Accademico 2005/06 Prof. Carlo Blundo. Raccolta di esercizi Versione del 26 ottobre 2005
Laboratorio di Algoritmi e Strutture Dati Anno Accademico 2005/06 Prof. Carlo Blundo Raccolta di esercizi Versione del 26 ottobre 2005 Alcuni di questi esercizi sono tratti dai libri di testo del corso
DettagliImplementazione con alberi binari di ricerca
public class LinkedBinaryTree implements BinaryTree { /** Espande una foglia in un nodo interno con due foglie come figli */ public void expandexternal(position v, E l, E r) throws InvalidPositionException
DettagliLaboratorio di Algoritmi e Strutture Dati Anno Accademico 2005/06 Prof. Carlo Blundo. Raccolta di esercizi Versione del 20 dicembre 2005
Laboratorio di Algoritmi e Strutture Dati Anno Accademico 2005/06 Prof. Carlo Blundo Raccolta di esercizi Versione del 20 dicembre 2005 Alcuni di questi esercizi sono tratti dai libri di testo del corso
DettagliFondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati
Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario
DettagliAlberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione
Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico
DettagliAlberi Binari Alberi Binari
Alberi Binari Alberi Binari Un albero binario è una collezione di elementi organizzati in modo non sequenziale secondo un grafo aciclico caratterizzato da Radice Due sotto-alberi (il sotto-albero destro
DettagliAlgoritmi e Strutture Dati
Strutture Elementari Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 29 ottobre 2008 Strutture Dati Astratte Il concetto di dato Il concetto
DettagliSET: specifica INTRODUZIONE. SET: esempio Si stampano i numeri casuali in ordine di generazione e il contenuto dell insieme.
INTRODUZIONE Il tipo di dati astratto insieme (set) definisce operazioni, quali inserimento e rimozione, su collezioni di oggetti che presentano molteplicità uno, cioè non sono ammessi duplicati. Una possibile
DettagliParte I Java. Metodologie di Programmaziona Secondo Appello, 14/2/2006 1
Metodologie di Programmaziona 05 06 Secondo Appello, 14/2/2006 1 Parte I Java Considerate le seguenti definizioni di classe. class T { class S extends T { class A { public void print(string s) { System.out.println(s);
DettagliAlberi. Definizioni principali
Definizioni principali Un albero è una struttura dati che contiene oggetti organizzati gerarchicamente (a differenza della lista di nodi, dell'array list, i cui elementi sono organizzati linearmente) radice
DettagliListe concatenate. Violetta Lonati
Liste concatenate Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 2 novembre 2017 Violetta Lonati Liste
DettagliTipi di dati astratti
Tipi di dati astratti ADT 1 Dati strutturati e algoritmi Una struttura di dati è un insieme di regole per organizzare e manipolare dei dati Un algoritmo è un procedimento composto in passi elementari in
DettagliUna breve introduzione all implementazione in C di algoritmi su grafo
Una breve introduzione all implementazione in C di algoritmi su grafo A cura di Gianmaria Leo Introduzione La lezione è un introduzione a concetti e strumenti che permettono l implementazione di algoritmi
DettagliAlgoritmi e Strutture Dati
Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]
DettagliImplementazione ADT: Alberi
Implementazione ADT: Alberi Livelli di astrazione 2001/2002 1 Esercitazione 5 (E6): alberi (tree) albero struttura dati fondamentale, soprattutto per le operazioni di ricerca tipi di albero con radice
DettagliAlgoritmi e Strutture Dati
Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno Il concetto di dato Il concetto
DettagliPolimorfismo parametrico vs polimorfismo per inclusione
Polimorfismo parametrico vs polimorfismo per inclusione Esercizio Definire il tipo di dato Stack con operazioni Push( element ) Pop() Non forzare una specifica implementazione Non forzare un tipo specifico
DettagliEsercitazione 7. Grafi. Rappresentazione e algoritmi di visita
Esercitazione 7 Grafi Rappresentazione e algoritmi di visita Grafo G = (V,E) non orientato 1 1 G = (V,E) orientato 6 Rappresentazione Grafo G = (V,E) metodi standard per la rappresentazione Liste di adiacenza
DettagliSul pattern Iterator
Sul pattern Iterator 1 Introduzione Capita spesso di aver a che fare con strutture dati complesse, come ad esempio, liste, code, ecc. È buona norma accedere a queste strutture senza esporre la loro organizzazione.
Dettaglitipi di dato astratti
tipi di dato astratti A. FERRARI ADT Un tipo di dato astratto o ADT (Abstract Data Type) è un tipo di dato le cui istanze possono essere manipolate con modalità che dipendono esclusivamente dalla semantica
DettagliAlbero Binario GT 7.3. interfacce di Positio<E>, Tree<E>, e BinaryTree<E>; il file TestLinkedBinaryTree.java
Laboratorio Java Albero Binario GT 7.3 Esercitazione Sono dati : interfacce di Positio, Tree, e BinaryTree; il file TestLinkedBinaryTree.java e i file.class che implementano le interfacce www.dei.unipd.it/corsi/fi2ae
DettagliAlberi binari ( 7.3)
Alberi binari ( 7.3) + a 3 b Albero Binario ( 7.3) DEFINIZIONE Albero Binario è un albero ordinato in cui ogni nodo ha al più due figli. Un albero binario si dice proprio se ogni nodo ha o zero o figli
DettagliEsempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione e rimane immutato.
DettagliCorso: Strutture Dati Docente: Annalisa De Bonis
Heap Corso: Strutture Dati Docente: Annalisa De Bonis Definizione l Un heap è un albero binario che contiene entrate della forma (key, value) nei suoi nodi e soddisfa le seguenti proprietà: l Heap-Order:
DettagliUniversità Ca Foscari DAIS. Programmazione ad Oggetti. Esame del modulo 1
Università Ca Foscari DAIS Programmazione ad Oggetti Esame del modulo 1 Nome: Matricola: Samuel Rota Bulò, a.a. 2012/2013 Programmazione ad Oggetti a.a. 2012/2013 Esame del modulo 1 Nome: Samuel Rota Bulò
DettagliConoscere l uso delle collezioni in Java. Conoscere il concetto di Generics (programmazione
1 Conoscere l uso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali classi di Collection usare in casi specifici Conoscere
DettagliTDA Priority Queue. Situazioni concrete. Definizione. Alta priorità come trovarla? Relazione di ordine totale ( ) Le implementazioni che vedremo
TDA Priority Queue TDA Coda a priorità [GT3, cap.7,7.1-7.2] Situazioni concrete La vita è piena di decisioni ognuno ha le sue priorità Ad es., decidere se questo fine settimana studiare, dormire, uscire
DettagliStrutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05
Strutture dati Il che cosa e il come Il che cosa ed il come Struttura dati: descrive come sono organizzati i dati e come sono realizzate le operazioni su di essi (cioe come si accede ai dati) Specifica
DettagliAlberi ( GT. 7 ) In informatica, un albero è un modello astratto con cui viene rappresentata una struttura gerarchica
Alberi ( GT. 7 ) Albero definizioni Albero ADT (Abstract Data Type) Algoritmi di base su alberi Alberi binari Strutture dati per rappresentare alberi Implementazione AlberoBinario 1 Alberi (GT. 7) In informatica,
DettagliEsercizio laboratorio (Java 0) Raccolto stampato nel turno successivo di laboratorio
Esercizio laboratorio (Java 0) Presentato oggi: lista semplice (senza er) Raccolto stampato nel turno successivo di laboratorio Dovrà essere indicato: cognome e nome matricola turno laboratorio tempo impiegato
DettagliEsercizio. Scrivere una classe ListMap<K, V> che implementa la mappa con una lista. Strutture Dati
Esercizio Scrivere una classe ListMap che implementa la mappa con una lista Esercizio Si scriva un metodo public static PositionList preorder(linkedbinarytree T) che preso in
DettagliIl TDA Tree. Alberi. Esempio. Alberi. Applicazioni. Definizione di albero
Il T Tree lberi In informatica, un albero è un modello astratto di una struttura dati gerarchica Struttura dati non lineare Si pensi al file system di un sistema operativo Le relazioni in un albero sono
DettagliProgrammazione a Oggetti Modulo B
Programmazione a Oggetti Modulo B Design Pattern Dott. Alessandro Roncato 18/10/2011 Design Patters I Design Patters sono soluzioni di progettazione standard e ben collaudate che possono essere usate in
DettagliStrutture dati: array & co.
Strutture dati: array & co. Programmazione in Rete e Laboratorio Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-10149 Torino baldoni@di.unito.it http://www.di.unito.it/~baldoni/didattica
DettagliMetodi di una Collection
Java Collections Introduzione Una java collection (a volte chiamata anche container) è un oggetto che raggruppa più elementi dello stesso tipo in una singola unità. Tipicamente è utilizzata per raggruppare
DettagliUniversità Ca Foscari DAIS. Programmazione ad Oggetti. Esame del modulo 1
Università Ca Foscari DAIS Programmazione ad Oggetti Esame del modulo 1 Nome: Matricola: Samuel Rota Bulò, a.a. 2012/2013 Programmazione ad Oggetti a.a. 2012/2013 Esame del modulo 1 Nome: Samuel Rota Bulò
DettagliIl TDA BinaryTree. Albero Binario. Albero sintattico. Applicazioni. Albero delle decisioni binario. Albero binario di ricerca
Il T inarytree lbero inario F G lbero in cui ogni nodo ha al più due figli. I figli di un nodo costituiscono una coppia ordinata I figli di un nodo vengono chiamati figlio sinistro e figlio destro H I
DettagliOCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO
CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 7 SE PROGRAMMER
DettagliLe liste con array. Rimuovere la perla rossa costringe a spostare molte altre perle. Dove mettere la perla verde se si è esaurito il filo?
Liste Linkate Le liste con array Volendo usare una metafora, l implementazione delle liste tramite array è come infilare le perle (gli oggetti della lista) in un filo di lunghezza predefinita. E chiaro
DettagliTIPO DI DATO ASTRATTO
TIPO DI DATO ASTRATTO Tipo di dato astratto Esempio: Vogliamo rappresentare un sistema di prenotazione di esami universitari. Dati immagazzinati: prenotazioni esami Operazioni supportate: prenota(esame,
DettagliLe liste. Prof. Francesco Accarino IIS Sesto San Giovanni Via Leopardi 132
Le liste Prof. Francesco Accarino IIS Sesto San Giovanni Via Leopardi 132 Le Liste Le liste non sequenziali (concatenate) sono costituite da elementi che vengono memorizzati in memoria centrale non uno
DettagliScope e visibilità per classi
Scope e visibilità per classi Packages Classi interne nelle loro diverse forme Interne / statiche / locali Utilizzo congiunto con interfacce Implementazione di iteratori Gestione di eventi Classi interne
Dettaglitipi di dato astratti
tipi di dato astratti liste pile code alberi grafi Alberto Ferrari Informatica ADT o un tipo di dato astratto o ADT (Abstract Data Type) è un tipo di dato le cui istanze possono essere manipolate con modalità
DettagliArray. Walter Didimo
Array Walter Didimo Un problema ricorrente Gli strumenti di programmazione che abbiamo visto sin qui non sono ancora sufficienti per risolvere tutti i problemi di base Consideriamo ad esempio il seguente
DettagliLezione 15 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona
Lezione 15 programmazione in Java Nicola Drago nicola.drago@univr.it Dipartimento di Informatica Università di Verona Anteprima Approfondimenti della programmazione OO Il modificatore abstract Le classi
DettagliLa struttura dati CODA
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una coda (o queue) è una struttura dati astratta
DettagliCode a priorità (comparatore) Set Mappe. TDA Priority Queue: def. informale
Oggi rivedremo Code a priorità (comparatore) Set Mappe TDA Priority Queue: def. informale Una coda a priorità (PQ) è un contenitore di elementi, ciascuno dei quali possiede una chiave (tipicamente numerica),
DettagliLa Standard Template Library Heap, algoritmi e funtori
La Standard Template Library Heap, algoritmi e funtori Pericle Perazzo 27 maggio 2011 Riassunto contenitori e iteratori Un contenitore è un oggetto che contiene un insieme di altri oggetti di tipo omogeneo
DettagliPROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE
PROGRAMMAZIONE II canale A-D 2007-2008 14 luglio 2008 TRACCIA DI SOLUZIONE 1. Si vogliono realizzare mediante puntatori delle liste circolari, cioè delle liste tali che l ultimo elemento della lista punta
DettagliNON ABBIAMO ANCORA CORRETTO LE PROVETTE!!!
NON ABBIAMO ANCORA CORRETTO LE PROVETTE!!! OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/
DettagliGerarchie e polimorfismo: liste
Gerarchie e polimorfismo: liste 1 Generalizzare le liste di interi List lista di oggetti non modificabile vorremo poi definire un sottotipo versione ordinata 2 List classe astratta usate i sottotipi per
DettagliGennaio
Laboratorio di Algoritmi e Strutture Dati I Docente: A. Murano Laurea in Informatica -- -- -- 25 Gennaio 2010 -- -- -- Università degli Studi di Napoli Federico II Nome e Cognome Numero di Matricola: Spazio
DettagliGrafi: visite. Una breve presentazione. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Grafi: visite Una breve presentazione Visite di grafi Scopo e tipi di visita Una visita (o attraversamento) di un grafo G permette di esaminare i nodi e gli archi di G in modo sistematico Problema di base
DettagliGRAFI. Angelo Di Iorio Università di Bologna
GRAFI Angelo Di Iorio Università di Bologna Esercizio 1 Implementare una classe Java per memorizzare e manipolare un grafo orientato di nodi di tipo T (usando il framework Generics) Applicazioni: rete
DettagliAlgoritmi e Strutture di Dati A.A Esempio di prova scritta del 19 gennaio 2018 D.M CFU Libri e appunti chiusi Tempo = 2:00h
Algoritmi e Strutture di Dati A.A. 2017-2018 Esempio di prova scritta del 19 gennaio 2018 D.M. 270-9CFU Libri e appunti chiusi Tempo = 2:00h Note (es: correzione veloce, eventuali indisponibilità, ecc.)...
DettagliHeap e Code di Priorità
Heap e Code di Priorità heap heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. ogni nodo contiene una chiave maggiore o eguale di quelle presenti negli eventuali figli non
DettagliLaboratorio 9 ( Java 4 ) Classe astratta per BFS su grafo
Laboratorio 9 ( Java ) Classe astratta per BFS su grafo Testo esercitazione Scaricare il file EseBFS.zip, scompattarlo ed analizzare le classi in esso contenute con particolare attenzione alla classe astratta
DettagliADT Mappa. Le chiavi (il mezzo per accedere agli elementi) hanno lo scopo di rendere efficiente la ricerca. Strutture Dati
ADT Mappa Una mappa è 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) della mappa entrate multiple con la
DettagliListe. Costo operazioni Tutte le operazioni hanno costo O(1)
Liste Liste (List, Linked List) Una sequenza di nodi, contenenti dati arbitrari e 1-2 puntatori all'elemento successivo e/o precedente Contiguità nella lista contiguità nella memoria Costo operazioni Tutte
DettagliEsempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList! Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione
DettagliInterfacce. Esempio: interfaccia I con una sola funzione g() public interface I {
Interfacce Una interfaccia è un astrazione per un insieme di funzioni pubbliche delle quali si definisce solo la segnatura, e non le istruzioni. Un interfaccia viene poi implementata da una o più classi
DettagliRiassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.
OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione,
DettagliCollezioni, mappe e iteratori (a cura del Prof. Marco Patella)
, mappe e iteratori (a cura del Prof. Marco Patella) 1 Introduzione al Java Collections Framework Una collezione (o contenitore) consente di organizzare e gestire un gruppo di oggetti collezioni (vere
DettagliAlberi Binario in Java
Alberi Binario in Java Realizzare un albero binario di ricerca. L albero binario è di ricerca se esiste una relazione di ordinamento tra i valori dei nodi (valori comparabili). In particolare, dato un
DettagliAlgoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Appello del 24 Gennaio 2007 Esercizio 1 (ASD) 1. Sia T (n) = T (n/6) + T (n/3) + Θ(n). Considerare ciascuna delle seguenti affermazioni
DettagliLinked Lists. Liste linkate (1) liste linkate ( stack, queues ), trees. Liste linkate come strutture
Linked Lists Liste linkate () La combinazione di class/struct e puntatori porta alla creazioni di interessanti Abstract Data Type liste linkate ( stack, queues ), trees Liste linkate come strutture struct
DettagliInserimento in una lista ordinata
Inserimento in una lista ordinata Vogliamo inserire un nuovo elemento in una lista in cui gli elementi sono memorizzati in ordine crescente: Passo 1: creare un nuovo nodo della lista Passo 2: trovare il
Dettagli