Esercizi proposti per il corso di Strutture Dati

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Esercizi proposti per il corso di Strutture Dati"

Transcript

1 Esercizi proposti per il corso di Strutture Dati Da ricordare: 1. Non modificare il contenitore su cui si invoca il metodo: significa che posso eventualmente modificarlo durante l esecuzione del metodo, ma alla fine, quando il metodo termina, il contenitore su cui è stato invocato deve essere rimasto invariato (come contenuto). 2. Utilizzare i metodi dell interfaccia per risolvere l esercizio: così scriveremo un metodo che potrà essere adattato a qualsiasi implementazione del nostro TDA. 3. Non usare array come strutture di appoggio, ma solo altri TDA di appoggio, laddove sia necessario. 4. Altri esercizi consigliati sono tutti quelli delle prove e di esame. Esercizi su 5. Aggiungere alla classe Stack<E> il metodo String ToString() che restituisce una stringa che rappresenta il contenuto dello stack su cui si invoca il metodo, come segue: gli elementi devono essere separati da virgole, l'ultimo elemento deve essere il top e deve essere seguito dalla stringa top, tutta la stringa deve essere racchiusa da parentesi tonde. Ad esempio, se nello stack sono presenti gli elementi C B A, dove A è al top, allora la stringa restituita sarà (C, B, A top). 6. Scrivere un metodo Stack<E> Clone() che invocato su uno stack S, restituisce uno stack che è la copia di S. 7. Scrivere un metodo boolean equal(stack S<E>) che invocato su uno stack P restituisce true se e solo se P e S sono uguali (stesso contenuto, nello stesso ordine), false altrimenti. 8. Scrivere un metodo E First() che invocato su uno stack restituisce (senza cancellare) l elemento inserito per primo nello stack. 9. Scrivere un metodo Stack<E> ReverseStack() che invocato su uno stack S restituisce in output uno stack che è la copia rovesciata del contenuto dello stack S. 10. Scrivere un metodo String ReverseString(String w) che fornisce in output il reverse di w, usando uno stack. L inverso (o reverse) di una parola w è quella parola w che letta da destra a sinistra risulta essere uguale a w. Ad esempio, w=alla=w ; w=libro, w =orbil. Per scandire i caratteri della stringa si può utilizzare il metodo char charat(int i). 11. Sia w una stringa contenente parentesi tonde aperte e chiuse. Scrivere un metodo boolean Bilanciate(String w) che restituisce true se le parentesi sono annidate correttamente e false altrimenti. Ad esempio, se w=x((abc)()) l annidamento è corretto, se w=(as(df)))( l annidamento è sbagliato. Esercizi su Queue 12. Scrivere un metodo String ToString() che, invocato su una coda Q, restituisce una stringa che rappresenta il contenuto di Q, come segue: gli elementi devono essere separati da virgole, il primo elemento deve essere il front e deve essere preceduto dalla parola front, 08/06/2011 1

2 tutta la stringa deve essere racchiusa da parentesi tonde. Ad esempio, se nella coda sono presenti gli elementi C B A, dove C è il front, allora la stringa restituita sar{ (front C, B, A). 13. Scrivere un metodo Queue<E> Clone() che restituisce una copia della coda su cui il metodo è invocato. 14. Scrivere un metodo boolean equal(queue<e> Q) che invocato su una coda P restituisce true se e solo se P e Q sono uguali (stesso contenuto, nello stesso ordine), false altrimenti. 15. Scrivere un metodo E Last() che, invocato su una coda Q, fornisca in output (senza cancellarlo) l elemento inserito più di recente in Q. 16. Risolvere l esercizio precedente lavorando esclusivamente sulla coda Q (senza usare TDA di appoggio). 17. Scrivere un metodo void ReverseQueue() che, invocato su una coda Q, la modifichi in modo che Q contenga il reverse del contenuto iniziale. Il metodo deve avere complessità lineare in tempo. Usare eventualmente altri TDA di appoggio Scrivere un metodo Queue<E> ReverseQueue() che, invocato su una coda Q, dia in output un altra coda contenente il reverse del contenuto di Q. Il metodo deve avere complessit{ lineare in tempo e si possono usare eventualmente altri TDA di appoggio. 19. Scrivere un metodo Queue<E> Collapse() che, invocato su una coda Q, restituisce un'altra coda in cui tutte le occorrenze di elementi consecutivi uguali collassano in una sola, ossia tutte le occorrenze di elementi consecutivi uguali sono sostituite da una sola occorrenza dell'elemento. Ad esempio, se il metodo viene invocato su una coda contenente 1; 2; 3; 3; 4; 5; 4; 4; 1; 1; 1; 2, con 1 al front, allora il metodo deve restituire una coda contenente 1; 2; 3; 4; 5; 4; 1; 2 (1 ancora al front). Esercizi su Stack e Queue 20. Descrivere come implementare uno stack usando due code. Analizzare la complessità di pop(x) e push(). Implementare quindi l interfaccia Stack scrivendo la classe QueueStack avendo come uniche variabili d istanza due code. E possibile anche usare una sola coda? Come? Porre particolare attenzione alle gestione eccezioni. 21. Descrivere come implementare una coda usando due stack. Analizzare la complessità di dequeue() e enqueue(x). Implementare quindi l interfaccia Queue scrivendo la classe StackQueue avendo come uniche variabili d istanza due stack. Porre particolare attenzione alle gestione eccezioni. Posso usare un solo stack? Esercizi su Deque 22. Scrivere un metodo String ToString() che, invocato su una deque D, restituisce una stringa che rappresenta il contenuto di D, come segue: gli elementi devono essere separati da virgole, il primo elemento deve essere il first e deve essere preceduto dalla parola first, tutta 08/06/2011 2

3 la stringa deve essere racchiusa da parentesi tonde. Ad esempio, se nella deque sono presenti gli elementi C B A, dove C è il first, allora la stringa restituita sar{ (front C, B, A). 23. Scrivere un metodo Deque<E> Clone() che restituisce una copia della deque su cui il metodo è invocato. 24. Scrivere un metodo boolean equal(deque<e> D) che invocato su una deque F restituisce true se e solo se F e D sono uguali (stesso contenuto, nello stesso ordine), false altrimenti. 25. Scrivere il metodo Deque<Integer> cancellamultipli(int x) che, invocato su una deque contenente interi, restituisce una deque che contiene gli stessi elementi della deque su cui il metodo è invocato (e nello stesso ordine) tranne quelli che sono multipli di x. Ad esempio, se il metodo è invocato su una deque che contiene "5, 10, 2,7,15,11,3,2,18,9" (5 è il primo elemento e 9 è l'ultimo elemento) e x=2, allora verrà restituita una deque che contiene "5,7,15,11,3,9". Provare a non usare strutture d appoggio 26. Implementare l interfaccia Stack e Queue mediante una Deque (usando la metodologia dell adapter pattern) creando quindi la classe DequeStack e DequeQueue rispettivamente. Usare come unica variabile d istanza una deque. Porre particolare attenzione alle gestione eccezioni. Esercizi su IndexList 27. Scrivere un metodo IndexList<E> Clone() che restituisce una copia dell IndexList su cui il metodo è invocato, senza modificarlo. 28. Aggiungere alla classe IndexList il metodo boolean equal(indexlist<e> V) che, invocato su un IndexList S, restituisce true se S è uguale a V, false altrimenti. 29. Scrivere un metodo void InvertTo(int R) che, invocato su un IndexList<E> V passando un indice R, inverte la parte di V a partire dall'inizio fino a R (incluso). 30. Applicare l'adapter design pattern per scrivere una classe IndexListStack che implementa l'interfaccia del TDA Stack usando un IndexList. La classe IndexListStack deve avere come unica variabile d'istanza un IndexList V. Si ponga particolare attenzione all'uso del try-catch per la gestione precisa delle eccezioni. Esercizi su Sequence 31. Sia S=(a_1,, a_n) una sequenza di n elementi. Scrivere metodi che restituiscono rispettivamente a. il numero di elementi di indice maggiore o uguale a r b. il numero di elementi di indice minore o uguale a r c. una sequenza contenente gli elementi il cui indice soddisfi i punti precedenti. Scrivere un metodo void InserisciOccorrenze(), che invocato su una sequenza S la modifica, in modo tale che blocchi di oggetti che sono consecutivamente uguali in S vengono separati dall'intero che indica le occorrenze consecutive dell'oggetto precedente. Ad esempio, se il metodo viene invocato sulla sequenza S=(a,a,a,b,c,b,c,c), il metodo deve produrre S=(a,a,a,3,b,1,c,1,b,1,c,c,2). 08/06/2011 3

4 Il metodo proposto deve usare i metodi dell'interfaccia del TDA Sequence per accedere alla sequenza e risolvere l'esercizio. Si assegnerà punteggio massimo solo se non si usano strutture d appoggio. Il metodo non deve modificare il contenuto della sequenza su cui viene invocato. 32. Scrivere un metodo int PrimiNumeri(int k) che, invocato su una sequenza contenente interi, restituisce la somma dei k interi più piccoli che sono presenti nella sequenza. Ad esempio, se il metodo viene invocato sulla sequenza S = (45, 3, 3, 3, 4, 44, 5, 6, 6, 14, 14, 16, 42) con k = 1, allora il metodo restituirà 3. Se invece viene invocato con k = 10, il metodo restituirà = 74. Il metodo proposto deve usare i metodi dell interfaccia del TDA Sequence per risolvere il quesito. Si possono usare altri TDA di appoggio, ma non array. Prestare particolare attenzione alle condizioni di errore (da gestire come eccezioni). Il metodo non deve modificare il contenuto della sequenza su cui il metodo è invocato (può modificarlo durante). Esercizi su PositionList 33. Aggiungere alla classe NodeList il metodo void swapelements(position p, Position q) che scambia l elemento di posizione p con quello di posizione q (e viceversa). Svolgere lo stesso esercizio supponendo di aggiungerlo alla classe ArrayVector. Usare i metodi delle interfacce dei TDA. 34. Aggiungere alla classe NodeList il metodo void removeodd() che, invocato su una lista, rimuove da essa tutti gli elementi di rango dispari. 35. Aggiungere alla classe NodeList il metodo removefrom(p) e removeto(p), che cancellano rispettivamente tutte le posizioni da p alla fine delle lista e dall inizio della lista fino a p (incluso p). In entrambi i metodi, occorre restituire un array contenente tutti gli elementi cancellati. 36. [Esercizio prova lunedì 11 aprile 2011 (primo gruppo)] a. Aggiungere alla classe NodePositionList il metodo removefrom(x), che cancella in una lista tutte le posizioni dalla prima occorrenza di x alla fine delle lista (inclusa la posizione contenente x), se x appartiene alla lista, e alla fine restituisce una lista contenente tutti gli elementi cancellati. Il metodo deve usare solo i metodi dell interfaccia PositionList. b. Quale potrebbe essere una diversa soluzione al problema al punto 1, nel caso in cui si potessero usare anche i metodi dell implementazione di PositionList tramite i DNode e le sentinelle (header e trailer)? 37. [Esercizio prova lunedì 11 aprile 2011 (secondo gruppo)] a. Aggiungere alla classe NodePositionList il metodo removeto(x), che cancella in una lista tutte le posizioni dall inizio della lista fino alla prima occorrenza di x (inclusa la posizione contenente x), se x appartiene alla lista, e alla fine restituisce una lista contenente tutti gli elementi cancellati. Il metodo deve usare solo i metodi dell interfaccia PositionList. b. Quale potrebbe essere una diversa soluzione al problema al punto 1, nel caso in cui si potessero usare anche i metodi dell implementazione di PositionList tramite i DNode e le sentinelle (header e trailer)? 08/06/2011 4

5 Esercizi su Iterator 38. Scrivere una classe StackIterator che implementa Iterator mediante uno stack (uso uno stack come variabile per conservare gli elementi). 39. Scrivere un metodo Iterator attach(iterator J) che invocato su un iteratore L restituisce un altro iteratore M che itera prima sugli elementi scanditi da L e poi su quelli scanditi da J. Esercizi su Alberi 40. Scrivere un metodo ricorsivo String postorder(position p) che, invocato su un albero T, restituisca una stringa del contenuto dei nodi del sottoalbero di T radicato nel nodo di posizione p, visitati in postorder. 41. Scrivere un metodo ricorsivo int ContaFoglie(Position p) che, invocato su un albero T, restituisca il numero delle foglie del sottoalbero di T radicato nel nodo di posizione p. 42. Scrivere un metodo ricorsivo String StringaFoglie(Position p) che, invocato su un albero T, restituisca una stringa del contenuto delle foglie del sottoalbero di T radicato nel nodo di posizione p (lette da sinistra a destra). 43. Scrivere un metodo ricorsivo BinaryTree Copia (Position p) che invocato su un albero binario T restituisca un albero binario T che è la copia del sottoalbero di T radicato nel nodo di posizione p. Occorre usare i metodi dell interfaccia BinaryTree. 44. Aggiungere a LinkedTree (e a LinkedBinaryTree) il metodo int depth(position p) che restituisce la profondità del nodo di posizione p. Il metodo deve essere ricorsivo. 45. Aggiungere a LinkedTree (e a LinkedBinaryTree) il metodo int height() che restituisce l altezza dell albero. Il metodo deve essere ricorsivo. 46. Scrivere un metodo ricorsivo che restituisca una stringa del contenuto dei nodi dell albero, secondo una visita postorder 47. Scrivere un metodo ricorsivo che, ricevendo come parametro un nodo p, restituisca il numero di foglie nel sottoalbero radicato in p 48. Scrivere un metodo ricorsivo boolean isdescendent(position<e> p, Position<E> q) che, invocato su un albero generale (che implementa l'interfaccia Tree), restituisce true" se il nodo di position p è discendente del nodo di position q, false" altrimenti. Esercizi su Alberi binari 49. Scrivere un metodo Iterator<E> NodiLivello(Position<E> p, int k) che, invocato su un albero binario S, restituisce un iteratore dei nodi (del loro contenuto) che sono a livello k relativo al solo sottoalbero di S radicato nel nodo di position p. Si osservi che p (radice del sottoalbero radicato in p) è a livello 0, i suoi figli a livello 1, e così via. Il metodo proposto deve essere ricorsivo e deve usare i metodi dell'interfaccia del TDA BinaryTree per accedere all'albero. Metodi non ricorsivi non saranno valutati. 50. Scrivere un metodo boolean equal(position<e> p, BinaryTree<E> W, Position<E> q) che, invocato su un albero binario S restituisce true se il sottoalbero di S radicato nel nodo di position p è uguale al sottoalbero di W radicato in q, false altrimenti. 08/06/2011 5

6 51. In un albero binario T, un nodo di posizione p si dice Ricco se il sottoalbero sinistro di p non è uguale al sottoalbero destro di p. Poichè due alberi vuoti sono uguali, allora un nodo foglia non è Ricco. 52. Scrivere un metodo Iterator Ricco(Position<E> p) che, invocato su un albero binario T, restituisce un iteratore dei nodi (del loro contenuto) che sono Ricco nel sottoalbero di T radicato nel nodo di posizione p. 53. [GT C-7.21] Scrivere un metodo Position<E> lca(position<e> v, Position<E> w) che prenda in input due nodi v e w dell'albero e restituisca il più basso antenato (lower common ancestor) comune fra v e w. 54. [Esercizio prova 2 del 2 maggio 2011] - - Esercizi su Priority Queue 55. Implementare PQ-Sort con: UnsortedListPriorityQueue (Selection Sort), SortedListPriorityQueue (Insertion Sort). 56. Scrivere un metodo PriorityQueue Clone() che invocato su una coda a priorità, restituisca una copia. Il metodo deve usare i metodi dell interfaccia del TDA Priorit{ Queue, senza distruggere la PQ su cui il metodo è invocato. 08/06/2011 6

7 57. Scrivere un metodo boolean equal(priorityqueue Q) che invocato su una coda a priorità P restituisca true se P è uguale a Q, falso altrimenti. Il metodo deve usare i metodi dell interfaccia del TDA Priorit{ Queue, senza distruggere le code P e Q. 58. Scrivere un metodo Iterator entries() che invocato su una coda a priorità, restituisce un iteratore delle entries della coda a priorit{. Il metodo deve usare i metodi dell interfaccia del TDA Priorità Queue, senza distruggere la PQ su cui il metodo è invocato. 59. Scrivere un metodo String tostring() che invocato su una coda a priorità P restituisca una stringa che elenca le entry in ordine come segue (chiave, valore) separate da virgole. Il metodo deve usare i metodi dell interfaccia del TDA Priorit{ Queue, senza distruggere P. 60. Scrivere un metodo String tostringkey() che invocato su una coda a priorità P restituisca una stringa che elenca le chiavi delle entry in ordine separate da virgole. Il metodo deve usare i metodi dell interfaccia del TDA Priorit{ Queue, senza distruggere P. 61. Scrivere un metodo String tostringvalue() che invocato su una coda a priorità P restituisca una stringa che elenca i value delle entry in ordine separate da virgole. Il metodo deve usare i metodi dell interfaccia del TDA Priorit{ Queue, senza distruggere P. 62. Aggiungere alla classe SortedListPriorityQueue un metodo public void setcomparator(comparator<k> comp) throws IllegalStateException che cambia il comparatore assegnato alla PQ con quello passato. Definire le condizioni di errore (che determinano IllegalStateException). 63. Scrivere un metodo void AzzeraKey(V val) che pone a 0 tutte le key dei value che sono uguali a val. Usare un comparatore per determinare i value di cui azzerare la key. 64. Scrivere un metodo Iterator removein(object x, Object y) che, invocato su una coda a priorità, restituisce un iteratore degli elementi (values) che hanno chiave compresa tra x e y, estremi inclusi, secondo l'ordine definito. Per effettuare i confronti, occorre usare il comparatore della coda a priorità (si supponga che si chiami Comp). Il metodo proposto deve usare i metodi dell'interfaccia del TDA Priorità Queue e del TDA Entry per risolvere l'esercizio. Il metodo deve lasciare inalterato il contenuto della coda a priorità su cui il metodo è invocato (può modificarlo durante). 65. Scrivere un metodo Iterator removeless(object x) che, invocato su una coda a priorità, restituisce un iteratore degli elementi (values) che hanno chiave minore di x, secondo l'ordine definito. Per effettuare i confronti, occorre usare il comparatore della coda a priorità (si supponga che si chiami Comp). Il metodo proposto deve usare i metodi dell'interfaccia del TDA Priorità Queue e del TDA Entry per risolvere l'esercizio. Il metodo deve lasciare inalterato il contenuto della coda a priorità su cui il metodo è invocato (può modificarlo durante). 66. [GT C-8.4] Mostrare come implementare il TDA Stack utlizzando come variabili di istanza una coda a priorità e una variabile intera [classe PQStack]. Scrivere un metodo Iterator<V> removein(k x, K y) che, invocato su una coda a priorità, restituisce un iteratore degli elementi (values) che hanno chiave compresa tra x e y, estremi inclusi, secondo l'ordine definito. Per effettuare i confronti, occorre usare il comparatore della coda a priorità (si supponga che si chiami Comp). Il metodo proposto deve usare i metodi dell'interfaccia del TDA PriorityQueue e del TDA Entry per risolvere l'esercizio. Il metodo deve lasciare inalterato il contenuto della coda a priorità su cui è invocato (può modificarlo durante). 67. [Prova 3 del 9 maggio 2011] Implementare il TDA Coda adattando il TDA Coda a Priorità. Precisamente si richiede di scrivere una classe (di nome PriorityQueueQueue) che implementa l interfaccia del TDA Coda (Queue) utilizzando come variabile d istanza della 08/06/2011 7

8 classe una coda a priorità PQ (scegliere una implementazione della coda a priorità tra quelle disponibili). E possibile inoltre utilizzare una variabile intera i. Non è possibile usare altre variabili. Porre particolare attenzione alla gestione delle eccezioni. Esercizi su Map 68. Scrivere il metodo tostringkey() che restituisca una stringa contenente le chiavi della mappa; scrivere un metodo tostringvalue() che restituisca una stringa contenente i values della mappa. 69. Scrivere il metodo tostringkeyvalue() che restituisca una stringa contenente le chiavi della mappa seguite dai value rispettivi. 70. Scrivere il metodo tostringpair() che fornisca in output le coppie (chiave, valore). 71. Scrivere un metodo void removemaxocc() che, invocato su una lista in cui ogni elemento può occorrere più volte, cancella dalla lista tutte le occorrenze dell'elemento che ha occorrenza 72. un metodo public static <E> int[ ] mastermind(positionlist<e> L1, PositionList<E> L2) che, utilizzando una Mappa, prenda in input due liste L1 e L2 e restituisca un array A di due elementi interi tali che A[0] contenga il numero di elementi di L2 che compaiono in L1 nella stessa posizione e A[1] contenga il numero di elementi di L2 che sono presenti in L1 ma nel posto sbagliato. Attenzione: si assuma che in ogni lista gli elementi siano tutti distinti. Facoltativo: si lanci un'eccezione nel caso le liste non siano entrambe composte di elementi tutti distinti. Esempi: Siano L1 = <7,8,9,10> e L2 = <7,8,10,9>, allora A[0] = 2, A[1] = 2. Siano L1 = <7,8,9,10> e L3 = <5,8,9> allora A[0] = 2, A[1] = 0 Esercizi su Dizionario 73. Dato un dizionario D, scrivere un metodo public void updatekey( K key, K newkey) che modifica tutte le entry di chiave key con la chiave newkey. Utilizzare l implementazione con ChainingHashTable. 74. Scrivere un metodo static Iterable <K> EliminaComuni( Dictionary<K,V> D1, Dictionary<K,V>D2) che elimina da D1 tutte le entry con chiave presente in D2 e restituisce una collezione iterabile di tali chiavi.utilizzare i metodi dell interfaccia. Esercizi su Set e Partition 75. Scrivere un metodo boolean equals(b) che invocato su un insieme A restituisce vero se A=B (gli insiemi contengono gli stessi elementi), falso altrimenti. Per risolvere l esercizio usare esclusivamente i metodi dell interfaccia del TDA Set. 76. Scrivere un metodo boolean subset(b) che invocato su un insieme A restituisce vero se A è contenuto nell insieme B, falso altrimenti. Per risolvere l esercizio usare esclusivamente i metodi dell interfaccia del TDA Set. 08/06/2011 8

9 Esercizi su Grafo 77. Sia G un grafo non orientato. Due vertici v,w si G si dicono sameadjacent se sono adiacenti di uno stesso vertice. Usando i metodi del TDA Grafo, scrivere un metodo boolean sameadj(vertex<v> v, Vertex<V> w) che dati i due vertici v e w restituisca true se v e w sono sameadjacent, false altrimenti. 78. Sia G = (V;E) un grafo non orientato e sia v in V. Si dice che v ha un ThreeCycle se esiste in G un ciclo su v di lunghezza esattamente 3, ossia un cammino chiuso su v che e composto da 3 archi. Scrivere un metodo boolean HasThreeCycle(Vertex v) che, invocato su un grafo (che implementa l'interfaccia Graph), restituisce true" se il vertice v ha un ThreeCycle, false" altrimenti. 08/06/2011 9

Prima prova intercorso 29 Novembre 2005

Prima 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

Dettagli

Laboratorio 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 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

Dettagli

Esercizio. Strutture Dati

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

Dettagli

Interfaccia del TDA albero

Interfaccia del TDA albero Interfaccia del T albero ublic interface Tree { ublic int size(); ublic boolean isemty(); ublic Iterator elements(); ublic Iterator ositions() ublic Object relace(v,e) throws InvalidPositionExcetion; ublic

Dettagli

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

Liste 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

Dettagli

Alberi. Albero binario. Un albero binario è un albero (ordinato) in cui ciascun nodo può avere al massimo due figli (figlio destro e figlio sinistro)

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

Dettagli

Il TDA List è la versione orientata agli oggetti della struttura dati lista. Una sequenza di nodi

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

Dettagli

List. Il TDA List. Interfaccia Position. Il TDA Position. Il TDA List 1. Ancora su Position

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

Dettagli

Il TDA Map. Tabelle hash

Il 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

Dettagli

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

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

Dettagli

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

Dettagli

Laboratorio 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 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

Dettagli

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi.

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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]

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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

Dettagli

Code a priorità. Progettazione di Algoritmi Matricole congrue a 1. Docente: Annalisa De Bonis

Code a priorità. Progettazione di Algoritmi Matricole congrue a 1. Docente: Annalisa De Bonis Code a priorità Progettazione di Algoritmi 2018-19 Matricole congrue a 1 Docente: Annalisa De Bonis 26 Coda a priorità Una coda a priorità è un collezione di elementi a ciascuno dei quali è assegnata una

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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

Dettagli

Albero in cui ogni nodo ha al più due figli. I figli di un nodo costituiscono una coppia ordinata

Albero 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

Dettagli

Esercizi parte 3. La classe ArrayBinTree dovra implementare, tra le altre, l operazione seguente: padre: dato un nodo, restituire l indice del padre.

Esercizi parte 3. La classe ArrayBinTree dovra implementare, tra le altre, l operazione seguente: padre: dato un nodo, restituire l indice del padre. Esercizi parte 3 RAPPRESENTAZIONE DI ALBERI BINARI 1. Definire una classe LinkedBinTree che implementa alberi binari in modo collegato, con nodi implementati come oggetti di classe BinNode. La classe dovra

Dettagli

L' 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) 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

Dettagli

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

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

Dettagli

tipi di dato astratti

tipi 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à

Dettagli

Problemi di ordinamento

Problemi di ordinamento Problemi di ordinamento Input: una sequenza di n numeri a 1, a 2,..., a n ; Output: una permutazione a 1, a 2,..., a n di a 1, a 2,..., a n tale che a 1 a 2... a n. Generalmente, la sequenza è rappresentata

Dettagli

Note per la Lezione 4 Ugo Vaccaro

Note per la Lezione 4 Ugo Vaccaro Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 4 Ugo Vaccaro Ripasso di nozioni su Alberi Ricordiamo che gli alberi rappresentano una generalizzazione delle liste, nel senso che

Dettagli

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

Fondamenti 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

Dettagli

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

PROGRAMMAZIONE 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

Dettagli

Espressioni aritmetiche

Espressioni aritmetiche Espressioni aritmetiche Consideriamo espressioni costruite a partire da variabili e costanti intere mediante applicazione delle operazioni di somma, sottrazione, prodotto e divisione (intera). Ad esempio:

Dettagli

Esercizi proposti Risolvere i problemi seguenti su espressioni rappresentate come alberi binari, mediante la dichiarazione di tipo

Esercizi proposti Risolvere i problemi seguenti su espressioni rappresentate come alberi binari, mediante la dichiarazione di tipo Esercizi proposti 8 INDICZIONI DI CRTTERE GENERLE: Quando scrivete una funzione che ne utilizza una ausiliaria, chiedetevi sempre se l ausiliaria è necessaria, ricordando che è utile quando: (a) servono

Dettagli

La Standard Template Library Heap, algoritmi e funtori

La 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

Dettagli

Alberi. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei

Alberi. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei Alberi Alberi: definizioni Alberi Binari Esercizi su alberi binari: metodi ricorsivi Struttura dati per alberi generici 1 Alberi Gli alberi sono strutture dati naturalmente ricorsive Un albero è un particolare

Dettagli

Tracce. 1. Data una lista di elementi di tipo intero, implementare in C++ le seguenti funzioni

Tracce. 1. Data una lista di elementi di tipo intero, implementare in C++ le seguenti funzioni Algoritmi e Strutture Dati Tracce 1. Data una lista di elementi di tipo intero, implementare in C++ le seguenti funzioni int freq(list &L, int k): restituisce il numero di occorrenze dei multipli

Dettagli

d. Cancellazione del valore 5 e. Inserimento del valore 1

d. Cancellazione del valore 5 e. Inserimento del valore 1 Esercizio1 Si consideri un albero binario non vuoto in cui a ciascun nodo v è associato un numero reale v.val. Scrivere un algoritmo che, dato in input l'albero T e un numero reale x, restituisce true

Dettagli

Implementazione ADT: Alberi

Implementazione 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

Dettagli

Esercizio. 2 i=i*2) j=j*2)

Esercizio. 2 i=i*2) j=j*2) Esercizio 1 Esercizio 2 i=i*2) j=j*2) Soluzione Il frammento è composto da due parti quasi identiche. L unica differenza è il modo in cui crescono i contatori. Nella prima parte la crescita è lineare mentre

Dettagli

tipi di dato astratti

tipi 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

Dettagli

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

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

Dettagli

E` 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: 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

Dettagli

Alberi Binari Alberi Binari

Alberi 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

Dettagli

Alberi binari: definizione e alcune proprietà

Alberi binari: definizione e alcune proprietà Alberi binari: definizione e alcune proprietà Alberi binari Un albero binario è un albero con radice in cui ogni nodo ha al più due figli. In maniera più formale: Definizione. (Alberi binari) Un albero

Dettagli

Università degli Studi di L Aquila Facoltà di Scienze M.F.N. Corso di Laurea in Informatica. Modulo di Laboratorio di Algoritmi e Strutture Dati

Università degli Studi di L Aquila Facoltà di Scienze M.F.N. Corso di Laurea in Informatica. Modulo di Laboratorio di Algoritmi e Strutture Dati Università degli Studi di L Aquila Facoltà di Scienze M.F.N. Corso di Laurea in Informatica Modulo di Laboratorio di Algoritmi e Strutture Dati Alberi binari Giovanna Melideo melideo@di.univaq.it 1 Alberi

Dettagli

TIPO DI DATO ASTRATTO

TIPO 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,

Dettagli

Alberi e alberi binari I Un albero è un caso particolare di grafo

Alberi e alberi binari I Un albero è un caso particolare di grafo Alberi e alberi binari I Un albero è un caso particolare di grafo I I I I È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine

Dettagli

Tipi di dato e Strutture dati elementari

Tipi di dato e Strutture dati elementari Tipi di dato e Strutture dati elementari Ing. Paolo Craca Anno accademico 2007/2008 Tipi di dato e Strutture dati elementari 1 / 40 Cosa vedremo in questo seminario 1 Introduzione 2 Pile 3 Code 4 5 Bibliografia

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica

Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 8 Corso di Tecniche di programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti

Dettagli

Alberi e alberi binari I Un albero è un caso particolare di grafo

Alberi e alberi binari I Un albero è un caso particolare di grafo Alberi e alberi binari Un albero è un caso particolare di grafo È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine ed entra

Dettagli

Algoritmi e strutture dati 16 Dicembre 2004 Canali A L e M Z Cognome Nome Matricola

Algoritmi e strutture dati 16 Dicembre 2004 Canali A L e M Z Cognome Nome Matricola Algoritmi e strutture dati 16 Dicembre 04 Canali A L e M Z Cognome Nome Matricola Problema 1 (6 punti) Determinare la funzione calcolata dal metodo mistero e la sua complessità computazionale in funzione

Dettagli

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

Esercitazione 6 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016 Esercitazione 6 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016 Tong Liu April 14, 2016 Elementi Fondamentali Rappresentazione n = V numero di vertici (nodi) m = E numero di archi Matrice di adiacenza:

Dettagli

Heap e Code di Priorità

Heap 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

Dettagli

Dati e Algoritmi I (Pietracaprina) Esercizi su Priority Queue e Heap

Dati e Algoritmi I (Pietracaprina) Esercizi su Priority Queue e Heap Dati e Algoritmi I (Pietracaprina) Esercizi su Priority Queue e Heap g Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1 Si definisca un albero ternario completo di altezza h come un albero con

Dettagli

Strutture dati Alberi binari

Strutture dati Alberi binari Strutture dati - 2 - Alberi binari Definizione L albero è un insieme di elementi (nodi), sui quali è definita una relazione di discendenza con due proprietà: esiste un solo nodo radice senza predecessori

Dettagli

Laboratorio di Python

Laboratorio di Python Laboratorio di Python Alberi binari Lab15 12 Maggio 2017 Outline Correzione esercizi per oggi Alberi binari Teoria Esercizi Esercizi per casa Saluti Esercizio 1 per casa Scrivere una funzione palindroma(s)

Dettagli

Esercitazione su Albero Binario

Esercitazione su Albero Binario Esercitazione su Albero Binario Costruzione iteratore nel preordine Costruzione albero simmetrico Attraversamento per livelli dell albero Costruttore di copia dell albero Esercitazione su Albero Binario

Dettagli

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco. Alberi Alberi Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo Fosco Dora Drogo Frodo Dudo Daisy Alberi Gli alberi sono una generalizzazione

Dettagli

Esercitazione 5 Alberi Binari di Ricerca

Esercitazione 5 Alberi Binari di Ricerca Esercitazione 5 Alberi Binari di Ricerca Corso di Fondamenti di Informatica II Algoritmi e strutture dati A.A. 2015/2016 11 Maggio 2016 Sommario Scopo di questa esercitazione è realizzare una struttura

Dettagli

Algoritmi e Strutture Dati 1

Algoritmi e Strutture Dati 1 Esonero del 31/03/2009 Compito n 1 Dimostrare che non tutte le funzioni f: ℵ 0,1 sono calcolabili. Dire se, giustificando la risposta applicando la definizione delle notazioni asintotiche, a) n log n =

Dettagli

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco. Alberi Alberi Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo Fosco Dora Drogo Dudo Frodo Daisy Alberi Gli alberi sono una generalizzazione

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 25 ADT (Abstract Data Types) tipo di dato astratto Un ADT è un modello matematico con una collezione di operatori definiti su tale

Dettagli

Alberi binari (radicati e ordinati) della radice Il padre del nodo 5 e del nodo 3

Alberi binari (radicati e ordinati) della radice Il padre del nodo 5 e del nodo 3 Alberi binari (radicati e ordinati) Il figlio sinistro della radice Il padre del nodo 5 e del nodo 3 4 3 Il figlio sinistro del nodo 2 2 5 1 6 7 8 9 La radice Il figlio destro della radice una foglia Figlio

Dettagli

GRAFI. Angelo Di Iorio Università di Bologna

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

Dettagli

Alberi. Definizioni principali

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

Dettagli

TDA Position (TDA List Sequence)

TDA Position (TDA List Sequence) 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

Dettagli

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento.

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento. Un ulteriore semplificazione si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine (e l inizio) di una lista. Questa soluzione va contemplata

Dettagli

Implementazione con alberi binari di ricerca

Implementazione 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

Dettagli

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Capitolo 3 Strutture dati elementari Gestione di collezioni di oggetti Tipo di dato: Specifica una collezione di oggetti e delle operazioni di interesse su tale collezione (es.

Dettagli

Esercizi Union-Find e su Grafi. Ugo Vaccaro

Esercizi Union-Find e su Grafi. Ugo Vaccaro Progettazione di Algoritmi Anno Accademico 0 07 Esercizi Union-Find e su Grafi. Ugo Vaccaro. Esercizio: Scrivere pseudocodice per Make-Set, Union, e Find-Set usando la rappresentazione attraverso liste

Dettagli

Coda a doppio ingresso (Deque)

Coda 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

Dettagli

Struttura dati Dizionario

Struttura dati Dizionario Struttura dati Dizionario Un dizionario è : un insieme di coppie (elemento, chiave) Sul campo chiave è definita una relazione d'ordine totale Su cui definiamo le seguenti operazioni: insert(elem e, chiave

Dettagli

Albero Binario GT 7.3. interfacce di Positio<E>, Tree<E>, e BinaryTree<E>; il file TestLinkedBinaryTree.java

Albero 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

Dettagli

Alberi ed Alberi Binari

Alberi ed Alberi Binari Alberi ed Alberi Binari Il tipo di dato Albero Un albero è una struttura di data organizzata gerarchicamente. È costituito da un insieme di nodi collegati tra di loro: ogni nodo contiene dell informazione,

Dettagli

Fondamenti teorici e programmazione

Fondamenti teorici e programmazione Fondamenti teorici e programmazione FTP(A) - modb Lezione 9 di ricerca binaria F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 1 liberi Un albero libero è un

Dettagli

Un heap binario è un albero binario con le seguenti caratteristiche:

Un heap binario è un albero binario con le seguenti caratteristiche: Heap Un heap binario è un albero binario con le seguenti caratteristiche: È quasi completo: tutti i livelli, tranna al più l ultimo sono completi e le foglie dell ultimo livello sono tutte adossate a sinistra.

Dettagli

Coda a doppio ingresso (Deque)

Coda 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

Dettagli

Soluzioni della settima esercitazione di Algoritmi 1

Soluzioni della settima esercitazione di Algoritmi 1 Soluzioni della settima esercitazione di Algoritmi 1 Beniamino Accattoli 19 dicembre 2007 1 Grafi Un grafo è non orientato se descrivendo un arco come una coppia di vertici (i,j) l ordine è ininfluente

Dettagli

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari lgoritmi e Strutture Dati Capitolo 3 Strutture dati elementari Gestione di collezioni di oggetti Tipo di dato: Specifica una collezione di oggetti e delle operazioni di interesse su tale collezione (es.

Dettagli

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

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Alberi Un albero è una collezione non vuota di: nodi con nome e informazioni

Dettagli

Definizione informale

Definizione 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

Dettagli

Definizione informale. Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche

Definizione 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

Dettagli

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmo di ordinamento sul posto che ha tempo di esecuzione : QuickSort Algoritmo di ordinamento sul posto che ha tempo di esecuzione : O(n2 ) nel caso peggiore O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior algoritmo

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 3 novembre 2010 1 Trova la somma/1 Scrivere un algoritmo che dati in input un array A[1... n] di n interi

Dettagli

Esercitazione 7. Grafi. Rappresentazione e algoritmi di visita

Esercitazione 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

Dettagli

Programmazione in Java Parte II

Programmazione in Java Parte II Programmazione in Java Parte II Lezione 7 Dott. Marco Faella Il Java Collection Framework Java Collection Framework (JCF) è una parte della libreria standard dedicata alle collezioni, intese come classi

Dettagli

Esercizi proposti 10

Esercizi proposti 10 Esercizi proposti 10 In questo gruppo di esercizi assumiamo, dove non sia specificato diversamente, di rappresentare i grafi mediante liste di archi, con il tipo di dati così dichiarato: type a graph =

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica giovedì 9

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione

Dettagli

Il TDA BinaryTree. Albero Binario. Albero sintattico. Applicazioni. Albero delle decisioni binario. Albero binario di ricerca

Il 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

Dettagli

Algoritmi e Strutture Dati Laboratorio 20/10/2008. Prof. Pier Luca Lanzi

Algoritmi e Strutture Dati Laboratorio 20/10/2008. Prof. Pier Luca Lanzi Algoritmi e Strutture Dati Laboratorio 20/10/2008 Primo Esercizio 2 Scrivere un programma per misurare il tempo necessario per ordinare un vettore di interi contenente 10-10 7 elementi utilizzando l insertion

Dettagli

lezione 9 min-heap binario Heap e Alberi posizionali generali

lezione 9 min-heap binario Heap e Alberi posizionali generali lezione 9 Heap e Alberi posizionali generali min-heap binario Un min-heap è un albero binario quasi completo in cui ogni nodo i diverso dalla radice soddisfa la seguente proprietà: il valore memorizzato

Dettagli

Gennaio

Gennaio 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

Dettagli

ESERCIZIO 1 ESERCIZIO 1

ESERCIZIO 1 ESERCIZIO 1 Si crei un progetto Java che mappi un semplice sistema medico. Il progetto deve contenere tre classi: una per i pazienti, una per le patologie e una per il main. Inoltre si definiscano le seguenti eccezioni:

Dettagli

Correzione prima esercitazione: metodo distinct

Correzione prima esercitazione: metodo distinct Alberi binari lezione 7 Correzione prima esercitazione: metodo distinct // post: ritorna il numero di elementi distinti del multi insieme public int distinct( ) { int d = 0; int i = 0; int j; // INV1:

Dettagli

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

Alberi ( 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,

Dettagli

ADT albero binario completo

ADT 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

Dettagli

PROVETTE D ESAME. Algoritmi e Strutture Dati

PROVETTE D ESAME. Algoritmi e Strutture Dati PROVETTE D ESAME Algoritmi e Strutture Dati ESERCIZIO 1 Si ottengano limiti superiori e inferiori per la seguente ricorrenza ESERCIZIO 1 ESERCIZIO 2 Dato un albero binario T, il grado di sbilanciamento

Dettagli

2 OTTIMIZZAZIONE SU GRAFI. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

2 OTTIMIZZAZIONE SU GRAFI. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1 2 OTTIMIZZAZIONE SU GRAFI E. Amaldi Fondamenti di R.O. Politecnico di Milano 1 Molti problemi decisionali possono essere formulati utilizzando il linguaggio della teoria dei grafi. Esempi: - problemi di

Dettagli

Esercizio 1. E vero che in un AVL il minimo si trova in una foglia o nel penultimo livello? FB = -1. livello 0 FB = -1. livello 1 FB = -1.

Esercizio 1. E vero che in un AVL il minimo si trova in una foglia o nel penultimo livello? FB = -1. livello 0 FB = -1. livello 1 FB = -1. Esercizio 1 E vero che in un AVL il minimo si trova in una foglia o nel penultimo livello? FB = -1 livello 0 FB = -1 FB = -1 livello 1 FB = -1 livello 2 livello 3 L altezza è 3, il minimo si trova nel

Dettagli

Fondamenti di Programmazione - Prof.ssa Gargano Anno Acc Esercitazioni 2009

Fondamenti di Programmazione - Prof.ssa Gargano Anno Acc Esercitazioni 2009 Fondamenti di Programmazione - Prof.ssa Gargano Anno Acc. 2008-09 Esercitazioni 2009 1. Mostrare per induzione che per ogni intero positivo n 0, la seguente affermazione S(n) é vera: S(n): n i=0 2i = 2

Dettagli

Esercitazione 6. Alberi binari di ricerca

Esercitazione 6. Alberi binari di ricerca Esercitazione 6 Alberi binari di ricerca Struttura base Rappresentabile attraverso una struttura dati concatenata in cui ogni nodo è un oggetto di tipo struttura Ogni nodo contiene: campo chiave (key)

Dettagli

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa: 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

Dettagli