Modelli di Calcolo & Metodologie di Analisi
|
|
- Bernarda Biagi
- 5 anni fa
- Visualizzazioni
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 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
DettagliAlgoritmi e Strutture Dati
Strutture Elementari Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 29 ottobre 2008 Strutture Dati Astratte Il concetto di dato Il concetto
DettagliAlgoritmi e Strutture Dati
Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]
DettagliAlgoritmi e Strutture Dati
Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno Il concetto di dato Il concetto
DettagliAlgoritmi 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
DettagliGrafi 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
DettagliListe. Costo operazioni Tutte le operazioni hanno costo O(1)
Liste Liste (List, Linked List) Una sequenza di nodi, contenenti dati arbitrari e 1-2 puntatori all'elemento successivo e/o precedente Contiguità nella lista contiguità nella memoria Costo operazioni Tutte
DettagliAlberi Binari Alberi Binari
Alberi Binari Alberi Binari Un albero binario è una collezione di elementi organizzati in modo non sequenziale secondo un grafo aciclico caratterizzato da Radice Due sotto-alberi (il sotto-albero destro
DettagliAlgoritmi e strutture dati
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
DettagliAlgoritmi 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
DettagliAlgoritmi 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
DettagliEsercizi 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
DettagliAlberi ( GT. 7 ) In informatica, un albero è un modello astratto con cui viene rappresentata una struttura gerarchica
Alberi ( GT. 7 ) Albero definizioni Albero ADT (Abstract Data Type) Algoritmi di base su alberi Alberi binari Strutture dati per rappresentare alberi Implementazione AlberoBinario 1 Alberi (GT. 7) In informatica,
DettagliIn 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
DettagliTipi 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
DettagliLE 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
DettagliAlgoritmi 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
DettagliEsame 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,
Dettagliheap 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
DettagliArgomenti 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
Dettaglitempo 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.
DettagliEsercizi 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
DettagliLezione 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.
DettagliGRAFI. Angelo Di Iorio Università di Bologna
GRAFI Angelo Di Iorio Università di Bologna Esercizio 1 Implementare una classe Java per memorizzare e manipolare un grafo orientato di nodi di tipo T (usando il framework Generics) Applicazioni: rete
DettagliIntroduzione 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
DettagliHeap e Code di Priorità
Heap e Code di Priorità heap heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. ogni nodo contiene una chiave maggiore o eguale di quelle presenti negli eventuali figli non
DettagliAlgoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Appello del 24 Gennaio 2007 Esercizio 1 (ASD) 1. Sia T (n) = T (n/6) + T (n/3) + Θ(n). Considerare ciascuna delle seguenti affermazioni
DettagliAlberi 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
DettagliFondamenti 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
DettagliAlberi. 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
DettagliInformatica 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
DettagliSOMMARIO 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).
DettagliAlberi 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
DettagliAlgoritmi 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
Dettaglialberi 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
DettagliCorso 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
DettagliAlgoritmi 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
DettagliAlberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione
Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico
DettagliLaboratorio 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
DettagliAlberi 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
DettagliLaboratorio 9 ( Java 4 ) Classe astratta per BFS su grafo
Laboratorio 9 ( Java ) Classe astratta per BFS su grafo Testo esercitazione Scaricare il file EseBFS.zip, scompattarlo ed analizzare le classi in esso contenute con particolare attenzione alla classe astratta
DettagliGennaio
Laboratorio di Algoritmi e Strutture Dati I Docente: A. Murano Laurea in Informatica -- -- -- 25 Gennaio 2010 -- -- -- Università degli Studi di Napoli Federico II Nome e Cognome Numero di Matricola: Spazio
DettagliTIPO DI DATO ASTRATTO
TIPO DI DATO ASTRATTO Tipo di dato astratto Esempio: Vogliamo rappresentare un sistema di prenotazione di esami universitari. Dati immagazzinati: prenotazioni esami Operazioni supportate: prenota(esame,
Dettaglitipi di dato astratti
tipi di dato astratti liste pile code alberi grafi Alberto Ferrari Informatica ADT o un tipo di dato astratto o ADT (Abstract Data Type) è un tipo di dato le cui istanze possono essere manipolate con modalità
DettagliCorso 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
DettagliAlgoritmi 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
DettagliAlberi 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
Dettaglitipi di dato astratti
tipi di dato astratti A. FERRARI ADT Un tipo di dato astratto o ADT (Abstract Data Type) è un tipo di dato le cui istanze possono essere manipolate con modalità che dipendono esclusivamente dalla semantica
DettagliIntroduzione 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
DettagliFondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati
Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario
DettagliAlgoritmi 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.
DettagliInformatica 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
DettagliConoscere l uso delle collezioni in Java. Conoscere il concetto di Generics (programmazione
1 Conoscere l uso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali classi di Collection usare in casi specifici Conoscere
DettagliAlberi 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
DettagliProva 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).
DettagliGrafi 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
Dettagliargomenti 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
DettagliCorso 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
DettagliInformatica 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
DettagliEsercitazione 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:
DettagliQuesta 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
DettagliLa struttura dati CODA
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una coda (o queue) è una struttura dati astratta
DettagliMemorizzazione 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
DettagliGrafi: visite. Una breve presentazione. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Grafi: visite Una breve presentazione Visite di grafi Scopo e tipi di visita Una visita (o attraversamento) di un grafo G permette di esaminare i nodi e gli archi di G in modo sistematico Problema di base
DettagliOrganigramma 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
DettagliEsempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione e rimane immutato.
DettagliCorso: 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'
DettagliAlgoritmi 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
DettagliInformatica 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
DettagliLe 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
DettagliAlgoritmi 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
DettagliLaboratorio 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
DettagliPile 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
DettagliGrafi 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
DettagliINFORMATICA 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
DettagliCorso 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
DettagliImplementazione 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
Dettagliheap 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
DettagliMetodi di una Collection
Java Collections Introduzione Una java collection (a volte chiamata anche container) è un oggetto che raggruppa più elementi dello stesso tipo in una singola unità. Tipicamente è utilizzata per raggruppare
DettagliAlberi 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
DettagliALBERI : 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
DettagliAlbero Binario GT 7.3. interfacce di Positio<E>, Tree<E>, e BinaryTree<E>; il file TestLinkedBinaryTree.java
Laboratorio Java Albero Binario GT 7.3 Esercitazione Sono dati : interfacce di Positio, Tree, e BinaryTree; il file TestLinkedBinaryTree.java e i file.class che implementano le interfacce www.dei.unipd.it/corsi/fi2ae
DettagliAlgoritmi 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
DettagliAlgoritmi 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
DettagliAltri 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
DettagliLABORATORIO 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
DettagliEsercitazione 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
DettagliAlgoritmi 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
DettagliAlgoritmi 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.
DettagliCorso 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
DettagliAltri 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
DettagliCorso 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
DettagliPile 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
DettagliAlgoritmi 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) =
DettagliAlbero in cui ogni nodo ha al più due figli. I figli di un nodo costituiscono una coppia ordinata
Il TDA BinaryTree Albero Binario A B C D E F G Albero in cui ogni nodo ha al più due figli. I figli di un nodo costituiscono una coppia ordinata I figli di un nodo vengono chiamati figlio sinistro e figlio
DettagliEsercitazione 7. Grafi. Rappresentazione e algoritmi di visita
Esercitazione 7 Grafi Rappresentazione e algoritmi di visita Grafo G = (V,E) non orientato 1 1 G = (V,E) orientato 6 Rappresentazione Grafo G = (V,E) metodi standard per la rappresentazione Liste di adiacenza
DettagliImplementazione ADT: Alberi
Implementazione ADT: Alberi Livelli di astrazione 2001/2002 1 Esercitazione 5 (E6): alberi (tree) albero struttura dati fondamentale, soprattutto per le operazioni di ricerca tipi di albero con radice
Dettagli