Modelli di Calcolo & Metodologie di Analisi

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Modelli di Calcolo & Metodologie di Analisi"

Transcript

1 Modelli di Calcolo & Metodologie di Analisi

2 Modelli di Calcolo (1/4) Turing Machine (Alan Turing, 1936): S a b b a Nastro infinito bidirezionale Ogni cella può contenere un simbolo di un certo alfabeto finito Passo computazionale: lettura/scrittura di una cella, spostamento della testina, variazione dello stato Modello di riferimento nello studio della calcolabilità e della complessità computazionale

3 Modelli di Calcolo (2/4) Random Access Machine (1963): Nastro di input ACC R1 R2 R3 Programma R4 R5 PC Nastro di output Ogni registro/cella può contenere un intero grande a piacere Passo computazionale: operazione di I/O, operazione logico-aritmetica, lettura/scrittura in memoria

4 Modelli di Calcolo (3/4) La Random Access Machine (RAM) permette operazioni su interi arbitrariamente grandi in un unico passo computazionale (misura di costo uniforme): ipotesi poco realistica Ipotesi più realistica: il costo delle operazioni dipende dalla dimensione degli operandi coinvolti (misura di costo logaritmico) Esempio: qual è il tempo di esecuzione? int x=1; for (int i=1; i<=n; i++) x=x*2; Criterio di costo uniforme: ~n Criterio di costo logaritmico: ~n^2

5 Modelli di Calcolo (4/4) Approccio alternativo: limiteremo la dimensione degli interi rappresentabili a c log n bit (dove c è un opportuna costante ed n è la dimensione dell istanza del problema). Gli algoritmi che studieremo saranno quindi tutti implementabili su macchine RAM con interi di dimensione <=n^c Altri modelli computazionali: Parallel Random Access Machine (PRAM), External Memory Model

6 Esercizio: costo di findmax? int findmax (int[] v) { int currentmax=v[0]; for (int i=1; i<v.length; i++) if (v[i]>currentmax) currentmax=v[i]; return currentmax; Dipende dalla lunghezza dell array (dimensione dell input) Dipende dalla configurazione dei dati di input (caso peggiore: elementi ordinati in maniera crescente; caso migliore: massimo in prima posizione)

7 Costo dei seguenti metodi Java? public static int[] metodo1 (int[] V) { int[] W=new int[v.length]; for (int i=0; i<v.length; i++) W[i]=V[i]; return W; public static void metodo2 (int n) { for (int i=1; i<=n*n; i++) System.out.print ((i * i) + " "); System.out.print ("\n"); public static void metodo3 (int n) { for (int i=1; i<=n; i++) for (int j=1; j<=i; j++) System.out.print ((j) + " "); System.out.print ("\n");

8 Fattoriale public class Fattoriale { public static int fattoriale (int n) { if (n==1) return 1; else return n*fattoriale (n-1); public static void main (String[] args) { System.out.println (fattoriale (5));

9 isprime public class Primes { public static boolean isprime (int n) { if (n<2) return false; int i=n-1; while (i>1) { if ( (n % i)==0 ) return false; i--; return true;

10 Strutture dati elementari (liste, pile, code, alberi)

11 Liste in Java array (puo contenere tipi di dato primitivi, ha dimensione fissa, molto efficiente) classe Vector (contiene riferimenti ad Object, gestione flessibile della memoria, molti metodi a disposizione, meno efficiente, accesso sincronizzato) classe ArrayList (lista realizzata con array, fornisce anche metodi per ridimensionare l array stesso) classe LinkedList (lista doppiamente collegata) record & puntatori

12 Implementazione del tipo Coda in Java (1/4) public class MyQueueNode { public class MyQueue { public Object info; public MyQueueNode next=null; private MyQueueNode head; private MyQueueNode tail; //constructor... public MyQueue () { head=null; tail=null; public boolean isempty () { return head==null; (continua )

13 Implementazione del tipo Coda in Java (2/4) public void enqueue (Object el) { MyQueueNode myqn=new MyQueueNode (); myqn.info=el; //if queue empty... if (isempty ()) { head=myqn; tail=myqn; else { //queue not empty... tail.next=myqn; tail=tail.next; (continua )

14 Implementazione del tipo Coda in Java (3/4) public Object dequeue () { if (isempty ()) return null; Object el=head.info; //if only one node... if (head==tail) { head=null; tail=null; else { //more than one node... head=head.next; return el;

15 Implementazione del tipo Coda in Java (4/4) public class ProvaMyQueue { public static void main (String[] args) { MyQueue q=new MyQueue (); q.enqueue (10); q.enqueue (15); q.enqueue (20); while (!q.isempty ()) { System.out.print (q.dequeue ()+" "); System.out.print ("\n");

16 BFS in Java (1/4) public class BTreeNode { public class BTree { char info; BTreeNode leftchild=null; BTreeNode rightchild=null; BTreeNode parent=null; BTreeNode root; //constructor... public BTree (BTreeNode r) { (continua ) root=r;

17 BFS in Java (2/4) public void bfsbtree () { MyQueue q=new MyQueue (); q.enqueue (root); while (!q.isempty ()) { BTreeNode u=(btreenode) q.dequeue (); if (u!=null) { //visits node... System.out.print (u.info + " "); q.enqueue (u.leftchild); q.enqueue (u.rightchild); System.out.print ("\n");

18 BFS in Java (3/4) public class ProvaBFS { public static void main (String[] args) { //creates nodes... BTreeNode a=new BTreeNode (); BTreeNode l=new BTreeNode (); BTreeNode b=new BTreeNode (); BTreeNode e=new BTreeNode (); BTreeNode r=new BTreeNode (); BTreeNode o=new BTreeNode (); //sets up tree... a.info='a'; l.info='l'; b.info='b'; e.info='e'; r.info='r'; o.info='o'; (continua )

19 BFS in Java (4/4) a.leftchild=l; a.rightchild=b; l.leftchild=e; l.rightchild=r; b.rightchild=o; BTree bintree=new BTree (a); //runs bfs... bintree.bfsbtree ();

20 Implementazione del tipo Pila in Java (1/4) public class MyStackNode { public class MyStack { public Object info; public MyStackNode next=null; private MyStackNode head; //constructor... public MyStack () { head=null; public boolean isempty () { return head==null; (continua )

21 Implementazione del tipo Pila in Java (2/4) public Object top () { if (isempty ()) return null; else return head.info; public Object pop () { if (isempty ()) return null; Object el=head.info; head=head.next; return el; (continua )

22 Implementazione del tipo Pila in Java (3/4) public void push (Object el) { MyStackNode mysn=new MyStackNode (); mysn.info=el; mysn.next=head; head=mysn;

23 Implementazione del tipo Pila in Java (4/4) public class ProvaMyStack { public static void main (String[] args) { MyStack s=new MyStack (); s.push (10); s.push (15); s.push (20); while (!s.isempty ()) { System.out.print (s.top ()+" "); System.out.print (s.pop ()+" "); System.out.print ("\n");

24 Correttezza di una stringa parentetica public static boolean iscorrect (String s) { MyStack mys=new MyStack (); String token=new String ("token"); int i=0; while (i<s.length ()) { if ( s.charat (i) == '( ) mys.push (token); if (s.charat (i) == ') ) { if (mys.isempty ()) return false; else mys.pop (); i++; if (mys.isempty ()) return true; else return false;

25 Ordinamento

26 Implementazione di MergeSort in Java (1/4) public class MergeSort { public static void mergesort (int[] A, int i, int f) { if (i >= f) return; int m=(i + f) / 2; //recursive calls... mergesort (A, i, m); mergesort (A, m+1, f); merge (A, i, m, f); (continua )

27 Implementazione di MergeSort in Java (2/4) private static void merge (int[] A, int i1, int f1, int f2) { //auxiliary array... int[] X=new int [ f2 - i1 + 1]; //stores initial i1 value... int p=i1; int i=0; int i2=f1+1; //while both subsequences still have items left... while (i1 <= f1 && i2 <= f2) { (continua ) if (A[i1] <= A[i2]) { X[i]=A[i1]; i++; i1++; else { X[i]=A[i2]; i++; i2++;

28 Implementazione di MergeSort in Java (3/4) //if subseq #2 ran out of items... if (i1<=f1) { while (i1<=f1) { X[i]=A[i1]; i++; i1++; else {//subseq #1 ran out of items... while (i2<=f2) { X[i]=A[i2]; i++; i2++; //copies auxiliary vector onto input vector... for (int q=0; q<x.length; q++) { A[p]=X[q]; p++;

29 Implementazione di MergeSort in Java (4/4) public class ProvaMergeSort { public static void main (String[] args) { int v[]={25, 34, 128, -12, -128, 4000, 2, 21; MergeSort.mergeSort (v, 0, v.length-1); for (int i=0; i<v.length; i++) System.out.print (v[i]+" "); System.out.print ("\n");

30 Alberi binari di ricerca (BST)

31 Concetto di chiave Insieme di campi di un record che caratterizza il record stesso Es. { <nome>, <cognome>, <data di nascita>, <indirizzo>, <codice fiscale>, <stato civile>, <professione> Possibili chiavi: {<nome>, <cognome>, <data di nascita>, {<codice fiscale>

32 Interfaccia Comparable in Java Spesso le chiavi sono implementate in Java come riferimenti a Comparable, se occorre stabilire un ordinamento tra le chiavi. Implementata da moltissime classi. Impone un solo metodo: public interface Comparable<T> int compareto (T o) Restituisce: un intero negativo se l oggetto di invocazione è minore di o zero se l oggetto di invocazione è uguale ad o un intero positivo se l oggetto di invocazione è maggiore di o

33 BST in Java public class BSTNode { int key; BSTNode leftchild; BSTNode rightchild; BSTNode parent; public class BST { private BSTNode root; //constructor... public BST () { root=null; //returns root node... public BSTNode getroot () { return root; (continua )

34 BST in Java (operazione search ) //returns node with key==k (or null otherwise)... public BSTNode search (int k) { BSTNode v=root; while (v!=null) { if (v.key==k) return v; else { if (k<v.key) v=v.leftchild; else v=v.rightchild; return null;

35 BST in Java (operazione insert ) //inserts k into BST... public void insert (int k) { //creates new bst node... BSTNode mynode=new BSTNode (); mynode.key=k; mynode.leftchild=null; mynode.rightchild=null; mynode.parent=null; if (root==null) { (continua ) root=mynode; return; BSTNode v=root; BSTNode prev=null; while (v!=null) { prev=v; if (v.key<k) v=v.rightchild; else v=v.leftchild; if (prev.key<k) prev.rightchild=mynode; else prev.leftchild=mynode; mynode.parent=prev;

36 BST in Java (operazioni max e min ) //finds node with max key in subtree... public static BSTNode max (BSTNode t) { BSTNode v=t; while (v.rightchild!=null) v=v.rightchild; return v; //finds node with min key in subtree... public static BSTNode min (BSTNode t) { BSTNode v=t; while (v.leftchild!=null) v=v.leftchild; return v;

37 BST in Java (operazione pred ) //finds node with pred key in BST... public static BSTNode pred (BSTNode u) { if (u.leftchild!=null) return max (u.leftchild); while (u.parent!= null && u.parent.leftchild == u) u=u.parent; return u.parent;

38 Alberi AVL

39 Alberi di Fibonacci Costruzione ricorsiva di un albero di Fibonacci: T0 T1 T2 T3 T4 Sono gli alberi bilanciati piu vicini alla condizione di non bilanciamento (ogni nodo interno ha fattore di bilanciamento pari a 1)

40 Dim. altezza AVL tree=o(log n) Sia Th un albero di Fibonacci di altezza h con nh nodi. E possibile dimostrare che h=θ(log nh) (Adel son-vel skii e Landis) Poiche quelli di Fibonacci sono gli alberi AVL con minor numero di nodi, per ogni altro albero bilanciato di altezza h con n nodi sara necessariamente h=o(log n)

41 Tavole Hash

42 Hashing doppio: implementazione Java (1/5) public class MyHashTable { MyHashItem[] thetable; public class MyHashItem { public MyHashTable (int numslots) { int key; Object elem; //creates table... thetable=new MyHashItem[numSlots]; //creates table items... for (int i=0; i<thetable.length; i++) thetable[i]=new MyHashItem (); //sets all elements to null... for (int i=0; i<thetable.length; i++) thetable[i].elem=null; (continua )

43 Hashing doppio: implementazione Java (2/5) public int h1 (int k) { return (k % thetable.length); public int h2 (int k) { return (k % (thetable.length - 1)) + 1; public int c (int k, int i) { return ((h1(k) + i * h2(k)) % thetable.length); (continua )

44 Hashing doppio: implementazione Java (3/5) public void insert (int k, Object e) { for (int i=0; i<thetable.length; i++) { if (thetable[c (k, i)].elem==null) { thetable[c (k, i)].key=k; thetable[c (k, i)].elem=e; return; System.out.println ("ERROR: table is full!"); (continua )

45 Hashing doppio: implementazione Java (4/5) public Object search (int k) { for (int i=0; i<thetable.length; i++) { if (thetable[c (k, i)].elem==null) return null; if (thetable[c (k, i)].key==k) return thetable[c (k, i)].elem; return null; (continua )

46 Hashing doppio: implementazione Java (5/5) public static void main (String[] args) { //creates hash table... MyHashTable myhs=new MyHashTable (11); String s8="8"; String s10="10"; String s13="13"; myhs.insert (8, s8); myhs.insert (10, s10); myhs.insert (13, s13); for (int i=0; i<15; i++) { String o=(string) myhs.search (i); if (o!=null) System.out.println (o); String aux="*"; for (int i=20; i<30; i++) myhs.insert (i, aux);

47 Grafi & Visite di grafi

48 Nuova versione di MyQueue per valori di tipo int (1/3) public class MyQueueNode { public class MyQueue { public int info; public MyQueueNode next=null; private MyQueueNode head; private MyQueueNode tail; //constructor... public MyQueue () { head=null; tail=null; public boolean isempty () { return head==null; (continua )

49 Nuova versione di MyQueue per valori di tipo int (2/3) public void enqueue (int el) { MyQueueNode myqn=new MyQueueNode (); myqn.info=el; //if queue empty... if (isempty ()) { head=myqn; tail=myqn; else { //queue not empty... tail.next=myqn; tail=tail.next; (continua )

50 Nuova versione di MyQueue per valori di tipo int (3/3) public int dequeue () { if (isempty ()) return -1; int el=head.info; //if only one node... if (head==tail) { head=null; tail=null; else { //more than one node... head=head.next; return el;

51 Matrice di adiacenza & BFS (1/5) public class BFSadjMAT { private boolean[][] adjmat; private boolean[] marks; private int numnodes; //costo: O(n^2) public BFSadjMAT (int numnodes) { this.numnodes=numnodes; adjmat=new boolean[numnodes][numnodes]; for (int i=0; i<numnodes; i++) for (int j=0; j<numnodes; j++) adjmat[i][j]=false; marks=new boolean[numnodes]; (continua )

52 Matrice di adiacenza & BFS (2/5) //costo: O(1) public void addedge (int endpoint0, int endpoint1) { if (endpoint0 >= 0 && endpoint0 < numnodes && endpoint1 >= 0 && endpoint1 < numnodes) adjmat[endpoint0][endpoint1]=true; else System.out.println ("addedge: Endpoint id out of range!"); //costo: O(1) public void removeedge (int endpoint0, int endpoint1) { if (endpoint0 >= 0 && endpoint0 < numnodes && endpoint1 >= 0 && endpoint1 < numnodes) adjmat[endpoint0][endpoint1]=false; else System.out.println ("removeedge: Endpoint id out of range!"); (continua )

53 Matrice di adiacenza & BFS (3/5) //prints ids of visited nodes... //costo: O(n^2) public void BFS (int sourceendpoint) { if (sourceendpoint<0 sourceendpoint>=numnodes) { System.out.println ("BFS: invalid source!"); return; //unmarks all vertices... for (int i=0; i<numnodes; i++) marks[i]=false; //creates queue... MyQueue F=new MyQueue (); //enqueues souce node... F.enqueue (sourceendpoint); //marks source node... marks[sourceendpoint]=true; System.out.print (sourceendpoint+" "); (continua )

54 Matrice di adiacenza & BFS (4/5) //main loop... while (!F.isEmpty ()) { //dequeues current vertex... int u=f.dequeue (); for (int i=0; i<numnodes; i++) { if (adjmat[u][i]==true && marks[i]==false) { F.enqueue (i); marks[i]=true; System.out.print (i + " "); System.out.print ("\n"); (continua )

55 Matrice di adiacenza & BFS (5/5) public static void main (String[] args) { BFSadjMAT mygraph=new BFSadjMAT (7); mygraph.addedge (0, 1); mygraph.addedge (1, 2); mygraph.addedge (2, 0); mygraph.addedge (0, 3); mygraph.addedge (3, 2); mygraph.addedge (2, 4); mygraph.addedge (4, 5); mygraph.addedge (2, 5); mygraph.addedge (5, 3); mygraph.addedge (3, 6); mygraph.bfs (1); System.out.print ("\n");

56 Connettivita & Componenti Connesse (grafi non orientati) algoritmo isconnected (grafo G) boolean scegli arbitrariamente un vertice s in G T visitagenerica (s) if (T ha n nodi) return true else return false O(m+n) (liste di adiacenza) O(n) Le componenti connesse di G possono essere determinate modificando l algoritmo precedente, in modo da iniziare una nuova visita da un vertice non ancora esplorato (se c e ). Tempo di esecuzione: O(m+n).

57 Componenti fortemente connesse (grafi orientati) Per calcolare la componente fortemente connessa contenente il vertice x si puo procedere come segue: 1. Si calcola l insieme D(x) dei vertici raggiungibili da x. E sufficiente una visita generica a partire da x. Costo computazionale: O(m+n). 2. Si calcola l insieme A(x) dei vertici da cui e possibile raggiungere x. Occorre invertire la direzione di tutti gli archi del grafo, e poi eseguire una nuova visita partendo da x. Costo computazionale: O(m+n). A questo punto sara sufficiente individuare tutti i vertici che sono contemporaneamente in D(x) ed A(x), cioe che sono sia discendenti che antenati di x.

58 Componenti fortemente connesse (grafi orientati) Applicando per n volte l algoritmo descritto nella slide precedente, si ottengono le componenti fortemente connesse dell intero grafo. Il costo computazionale sara O(mn+n^2) NB. Esiste un algoritmo migliore (che sfrutta le proprieta della visita DFS) in grado di calcolare le componenti fortemente connesse di un grafo in tempo O(m+n).

Esercitazione 1. Possibile soluzione

Esercitazione 1. Possibile soluzione Esercitazione 1 1. Scrivere una classe Java BTreeNode per rappresentare nodi di alberi binari. Assumere che il contenuto informativo di ogni nodo sia rappresentato da un intero. 2. Fornire un implementazione

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

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

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

Grafi Tutte le strade portano a Roma

Grafi Tutte le strade portano a Roma Grafi Tutte le strade portano a Roma Un vertice v in un grafo orientato G si dice di tipo Roma se ogni altro vertice w in G può raggiungere v con un cammino orientato che parte da w e arriva a v. 1 Descrivere

Dettagli

Liste. Costo operazioni Tutte le operazioni hanno costo O(1)

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

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

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e strutture dati Argomenti Strutture dati elementari e loro implementazioni in Java: Vettori Liste Stack (Pile) Queue (Code) Esempi di applicazione Tipo di dato astratto Tipo di dato astratto

Dettagli

Algoritmi e Strutture di Dati

Algoritmi e Strutture di Dati Algoritmi e Strutture di Dati Capitolo 4 - Strutture di dati elementari This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license, visit

Dettagli

Algoritmi e strutture dati 1 luglio 2004 Canali A L e M Z Cognome Nome Matricola

Algoritmi e strutture dati 1 luglio 2004 Canali A L e M Z Cognome Nome Matricola Algoritmi e strutture dati 1 luglio 00 Canali A L e M Z Cognome Nome Matricola Problema 1 (6 punti) Determinare il costo computazionale del metodo mistero in funzione della dimensione dell input, sia in

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

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

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

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

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

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

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z Anno Accademico 2002-2003 9 luglio 2002-03 Domanda 1, punti 6 Si consideri la seguente classe Java, in cui,

Dettagli

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

heap heap heap? max- e min-heap concetti ed applicazioni heap = catasta condizione di heap non è una struttura ordinata heap heap concetti ed applicazioni heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. tutte le foglie sono a sinistra ma non è un BST!! 3. ogni nodo contiene una chiave maggiore

Dettagli

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

Argomenti della lezione. Tipo di dato astratto. Array. Tipo di dato Lista. Liste Implementazione di liste in Java Stack Code Argomenti della lezione! Tipi di dato astratti! Strutture dati elementari Liste Implementazione di liste in Java Stack Code! Esempi di applicazione Tipo di dato astratto! Tipo di dato astratto o ADT (Abstract

Dettagli

tempo a disposizione: 120 minuti

tempo a disposizione: 120 minuti Algoritmi e strutture dati 11 luglio 2005 canali A L, M Z Per gli studenti di Nettuno svolgere i Problemi 1 e 5, più un altro a scelta. Ciascun problema svolto correttamente e completamente vale 10 punti.

Dettagli

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore

Dettagli

Lezione 6: 12 Novembre 2013

Lezione 6: 12 Novembre 2013 Tutorato di Algoritmi e Strutture Dati [CT0371] Tutor: Alberto Carraro Lezione 6: 12 Novembre 2013 Disclaimer: Queste note non sono state sottoposte al consueto controllo riservato alle pubblicazioni ufficiali.

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

Introduzione Implementazione (1)

Introduzione Implementazione (1) Informatica 3 Informatica 3 LEZIONE 15: Implementazione di alberi binari - BST Modulo 1: Implementazione degli alberi binari Modulo 2: BST Lezione 15 - Modulo 1 Implementazione degli alberi binari Politecnico

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

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Algoritmi 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

Dettagli

Alberi binari e di ricerca. Parte 1 BST e GUI. Introduzione. 1. Minimo Antenato Comune. 2. Vistita in ampiezza

Alberi binari e di ricerca. Parte 1 BST e GUI. Introduzione. 1. Minimo Antenato Comune. 2. Vistita in ampiezza Alberi binari e di ricerca Introduzione L esercitazione corrente riguarda problemi su alberi binari semplici e di ricerca. 1. Nella prima parte vengono proposti esercizi da svolgere mediante le classi

Dettagli

Fondamenti di Informatica II

Fondamenti di Informatica II Università degli studi di Messina Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica e delle Telecomunicazioni Fondamenti di Informatica II Tipi di dati astratti(adt)- seconda parte Coda Struttura

Dettagli

Alberi. Definizione, realizzazione e algoritmi elementari. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 7

Alberi. Definizione, realizzazione e algoritmi elementari. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 7 Alberi Definizione, realizzazione e algoritmi elementari Cosa sono gli alberi? Strutture gerarchiche di ogni tipo Generale Colonnello 1 Colonnello k Maggiore 1,1 Maggiore 1,m Capitano Maggiore k,1 Maggiore

Dettagli

Informatica 3. LEZIONE 15: Implementazione di alberi binari - BST. Modulo 1: Implementazione degli alberi binari Modulo 2: BST

Informatica 3. LEZIONE 15: Implementazione di alberi binari - BST. Modulo 1: Implementazione degli alberi binari Modulo 2: BST Informatica 3 LEZIONE 15: Implementazione di alberi binari - BST Modulo 1: Implementazione degli alberi binari Modulo 2: BST Informatica 3 Lezione 15 - Modulo 1 Implementazione degli alberi binari Introduzione

Dettagli

SOMMARIO STACK. STACK: specifica STACK

SOMMARIO STACK. STACK: specifica STACK SOMMARIO STACK Pila (stack): una struttura dati lineare a cui si può accedere soltanto mediante uno dei suoi capi per memorizzare e per estrarre dati. Specifica (descrizione). Implementazione (realizzazione).

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

Algoritmi e Strutture Dati. Lezione 5

Algoritmi e Strutture Dati. Lezione 5 Algoritmi e Strutture Dati Lezione 5 www.iet.unipi.it/a.virdis Antonio Virdis antonio.virdis@unipi.it 1 Sommario Hashing Hashing e tipi di input Esercizi 2 Array ++ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 3

Dettagli

alberi tipo astratto, implementazione, algoritmi

alberi tipo astratto, implementazione, algoritmi alberi tipo astratto, implementazione, algoritmi argomenti tipo astratto albero definizione implementazione in Java algoritmi di visita alberi binari implementazione di alberi binari in Java ASD - Alberi

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA7 B3 Gestione di una coda 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Tecnica di allocazione dinamica Concetto di coda e operazioni relative

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Strutture dati elementari Alberto Montresor Università di Trento This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy

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

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 25 Le liste in C struct nodo { int info; struct nodo *next; }; typedef struct nodo Nodo; typedef Nodo *PNodo; Inserimento in ordine

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Definizione Un albero si dice albero binario di ricerca è un albero binario in cui: - Ogni nodo è caratterizzato un valore chiamato chiave - L insieme delle chiavi è totalmente

Dettagli

Laboratorio 9 ( Java 4 ) Classe astratta per BFS su grafo

Laboratorio 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

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

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

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

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E14 F. Gasparetti, C. Limongelli Maggio 2012 1 Verifica presenza di elementi comuni V1 - Date due liste di stringhe scrivere

Dettagli

Algoritmi e Strutture Dati. Lezione 3

Algoritmi e Strutture Dati. Lezione 3 Algoritmi e Strutture Dati Lezione 3 www.iet.unipi.it/a.virdis Antonio Virdis antonio.virdis@unipi.it 1 Sommario Alberi Binari di Ricerca Gestione Stringhe Progettazione Esercizi 2 3 4 Alberi Binari 10

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

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

Introduzione alla gestione delle collezioni di oggetti

Introduzione alla gestione delle collezioni di oggetti Introduzione alla gestione delle collezioni di oggetti Alcune tecniche di base Un esempio: l ADT Dizionario (mutabile) Un esempio: l ADT Pila (mutabile) Un esempio: l ADT Coda (mutabile) Tecniche di rappresentazione

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

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

Informatica 3. LEZIONE 26: Implementazioni avanzate per liste e array. Modulo 1: Skip list Modulo 2: Multiliste Modulo 3: Rappresentazioni di matrici

Informatica 3. LEZIONE 26: Implementazioni avanzate per liste e array. Modulo 1: Skip list Modulo 2: Multiliste Modulo 3: Rappresentazioni di matrici Informatica 3 LEZIONE 26: Implementazioni avanzate per liste e array Modulo 1: Skip list Modulo 2: Multiliste Modulo 3: Rappresentazioni di matrici Informatica 3 Lezione 26 - Modulo 1 Skip list Introduzione

Dettagli

Conoscere l uso delle collezioni in Java. Conoscere il concetto di Generics (programmazione

Conoscere 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

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

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE Prova di Algoritmi e s.d. (1o anno) 17 Settembre 2002 TESTO e RISPOSTE Esercizio 1 (punti 7 in prima approssimazione) Consideriamo alberi binari con insieme dei nodi NODI = N (l'insieme dei naturali).

Dettagli

Grafi Stessa distanza

Grafi Stessa distanza Grafi Stessa distanza In un grafo orientato G, dati due nodi s e v, si dice che: v è raggiungibile da s se esiste un cammino da s a v; la distanza di v da s è la lunghezza del più breve cammino da s a

Dettagli

argomenti alberi terminologia tipo di dato astratto albero tipo astratto, implementazione, algoritmi es.: radice R con n sottoalberi radice

argomenti alberi terminologia tipo di dato astratto albero tipo astratto, implementazione, algoritmi es.: radice R con n sottoalberi radice argomenti alberi tipo astratto, implementazione, algoritmi! tipo astratto albero! definizione! implementazione in Java! algoritmi di visita! alberi binari! implementazione di alberi binari in Java ASD

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 09 ADT: Lista, Pila, Coda A. Miola Marzo 2007 http://www.dia.uniroma3.it/~java/fondinf2/ ADT: Lista, Pila, Coda 1 Contenuti Tipo

Dettagli

Informatica 3. Informatica 3. LEZIONE 26: Implementazioni avanzate per liste e array. Lezione 26 - Modulo 1. Introduzione. Esempio

Informatica 3. Informatica 3. LEZIONE 26: Implementazioni avanzate per liste e array. Lezione 26 - Modulo 1. Introduzione. Esempio Informatica 3 Informatica 3 LEZIONE 6: Implementazioni avanzate per liste e array Lezione 6 - Modulo Modulo : Skip list Modulo : Multiliste Modulo 3: Rappresentazioni di matrici Skip list Politecnico di

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

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

La struttura dati CODA

La 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

Dettagli

Memorizzazione di una relazione

Memorizzazione di una relazione Heap file File ordinati Indici o Hash o B+-tree Costo delle operazioni algebriche Simboli: NP: numero di pagine NR: numero record LP: lunghezza pagina LR: lunghezza record Memorizzazione di una relazione

Dettagli

Grafi: visite. Una breve presentazione. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

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

Dettagli

Organigramma Gerarchia. (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre

Organigramma Gerarchia. (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre Alberi Struttura dati Albero Organigramma Gerarchia (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre Esempio di un organigramma di un azienda Tree terminology

Dettagli

Esempio su strutture dati dinamiche: ArrayList

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

Dettagli

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

Corso: Fondamenti di Informatica (Canale 5) a.a Corsi di laurea: Ing. Settore Informazione Domanda n. 1 Corso: Fondamenti di Informatica (Canale 5) a.a. 2016-17 Corsi di laurea: Ing. Settore Informazione Questionario a Risposte Multiple per auto-valutazione del Lab10 Argomento: Algoritmi e complessita'

Dettagli

Algoritmi e Programmazione Avanzata. Pile e code. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Algoritmi e Programmazione Avanzata. Pile e code. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Sommario ADT Pile Code. A.A. 2001/2002 APA - 2 1 Sommario ADT Pile Code. A.A. 2001/2002 APA - 3 ADT Le regole che

Dettagli

Informatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann

Informatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann Informatica 3 LEZIONE 16: Heap - Codifica di Huffmann Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann Informatica 3 Lezione 16 - Modulo 1 Heap e code di priorità Introduzione

Dettagli

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

Le liste. ADT e strutture dati per la rappresentazione di sequenze. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 5 Le liste ADT e strutture dati per la rappresentazione di sequenze L ADT delle liste Una lista di valori di tipo A è una sequenza finita: a1, a2, L, an dove ai A, per ogni i valore lunghezza posizione L

Dettagli

Algoritmi di ordinamento

Algoritmi di ordinamento Algoritmi di ordinamento Selection Sort Quick Sort Lower bound alla complessità degli algoritmi di ordinamento giu 03 ASD 1 Selection Sort SelectionSort(dati[]) { for (i=0; i

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 33 Le liste in C struct nodo { int info; struct nodo *next; }; typedef struct nodo Nodo; typedef Nodo *PNodo; Pila (Stack ) La struttura

Dettagli

Pile e code. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Pile e code. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Pile e code Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Sommario ADT Pile Code. A.A. 2002/2003 APA - Pile e code 2 Politecnico di Torino Pagina 1 di 23 Sommario

Dettagli

Grafi non orientati. Grafi (non orientati) Rappresentazione di Grafi: matrice delle adiacenze. Tipiche applicazioni di modelli basati su grafi

Grafi non orientati. Grafi (non orientati) Rappresentazione di Grafi: matrice delle adiacenze. Tipiche applicazioni di modelli basati su grafi Grafi non orientati Grafi (non orientati) Notazione. G = (V, E) V = nodi (o vertici). E = archi (o lati) tra coppie di nodi. Modella relazioni definite tra coppie di oggetti. aglia di un grafo: numero

Dettagli

INFORMATICA 3 Prof.ssa Sara Comai

INFORMATICA 3 Prof.ssa Sara Comai INFORMATICA 3 Prof.ssa Sara Comai ESERCIZI SESSIONE LIVE 3 Complessità, liste e alberi Ing. Paola Spoletini, Sara Comai. Complessità Si determini l ordine di grandezza Q della complessità temporale di

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA7 B1 Gestione di liste 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Tecnica di allocazione dinamica Gestione di liste Classificazione delle

Dettagli

Implementazione Java di un ADT

Implementazione Java di un ADT Implementazione Java di un ADT Primo passo definire l'interfaccia (API) dell' ADT (l'api descrive i nomi dei metodi che l'adt supporta e come essi sono dichiarati e usati) Secondo passo scrivere il codice

Dettagli

heap concetti ed applicazioni

heap concetti ed applicazioni heap concetti ed applicazioni ADT coda di priorità operazioni getfirst restituisce l'elemento nella struttura con massima priorità deletefirst cancella l'elemento nella struttura con massima priorità insert

Dettagli

Metodi di una Collection

Metodi 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

Dettagli

Alberi ed Alberi Binari di Ricerca

Alberi ed Alberi Binari di Ricerca Alberi ed Alberi Binari di Ricerca 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

Dettagli

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

ALBERI : introduzione SOMMARIO ALBERI ALBERI. ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI SOMMARIO ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI Dimensione e Altezza ALBERI BINARI DI RICERCA (BST) Introduzione Ricerca, inserimento e cancellazione Implementazione

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

Algoritmi di ordinamento

Algoritmi di ordinamento Algoritmi di ordinamento! Selection Sort! Quick Sort! Lower bound alla complessità degli algoritmi di ordinamento Ordinamento 1 Selection Sort SelectionSort(dati[]) { for (i=0; idati.length-1; i++) { min

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Grafi e visite di grafi Domenico Fabio Savo 1 Grafo: definizione Un grafo G=(V,E) consiste in: - un insieme V di vertici (o nodi) - un insieme E di coppie di vertici, detti archi

Dettagli

Altri Esercizi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E17. C. Limongelli Maggio 2012

Altri Esercizi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E17. C. Limongelli Maggio 2012 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E17 C. Limongelli Maggio 2012 1 Contenuti q Definizione di classi con ereditarietà q Uso di tipi di dati astratti q Ricorsione

Dettagli

LABORATORIO DI ALGORITMI E STRUTTURE DATI A-L. Ingegneria e scienze informatiche Cesena A.A: 2016/2017 Docente: Greta Sasso

LABORATORIO DI ALGORITMI E STRUTTURE DATI A-L. Ingegneria e scienze informatiche Cesena A.A: 2016/2017 Docente: Greta Sasso LABORATORIO DI ALGORITMI E STRUTTURE DATI A-L Ingegneria e scienze informatiche Cesena A.A: 2016/2017 Docente: Greta Sasso Grafi Un grafo è una struttura definita come un insieme di nodi (o vertici) che

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

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

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

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E04 Esercizi sui problemi di ordinamento C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Algoritmi di Ordinamento

Dettagli

Altri Esercizi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2. Dispensa E09. C. Limongelli Marzo 2008

Altri Esercizi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2. Dispensa E09. C. Limongelli Marzo 2008 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E09 Altri Esercizi C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Altri Esercizi 1 Contenuti!Definizione

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E16 Esercizi Strutture Collegate e Oggetti C. Limongelli Maggio 2012 1 Contenuti q Verifiche universali ed esistenziali su strutture

Dettagli

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

Pile e Code. Definiamo una collezione come un gruppo di oggetti, detti gli elementi della collezione. Pile e Code lezione 4 Collezioni Defiamo una collezione come un gruppo di oggetti, detti gli elementi della collezione. Durante il corso defiremo delle tecniche di base per gestire modo efficiente collezioni

Dettagli

Algoritmi e Strutture Dati 03/05/2013

Algoritmi e Strutture Dati 03/05/2013 Algoritmi e Strutture Dati 03/05/2013 Esercizio 1 L equazione di ricorrenza è la seguente: T (n) = 1 n 1 T ( n/2 ) + T ( n/3 ) + n/2 Proviamo a dimostrare che T (n) = Θ(n). E facile vedere che T (n) =

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

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

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