Estendere i linguaggi: i tipi di dato astratti

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Strutture dati per insiemi disgiunti
Alberi binari Definizione Sottoalberi Padre, figli
Introduzione ai grafi Grafo diretto e non diretto
Tipi di dato astratti Lista, Pila, Coda, Albero.
Unità D2 Archivi e file.
Strutture dati lineari
UD 3: “Le Liste” UD 4: “Pile e Code” UD 5: “Alberi e grafi”
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Strutture dati elementari
Alberi binari di ricerca
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Esercizi su alberi binari
Alberi binari Definizione della struttura dati: struct tree { };
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Il problema del dizionario
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Interrogazioni su un albero binario di ricerca Search(S,k) – dato un insieme S ed un valore chiave k restituisce un puntatore x ad un elemento in S tale.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Algoritmi e Strutture Dati (Mod. B)
Grafi.
tipo astratto, implementazione, algoritmi
Albero: insieme di punti chiamati NODI e linee chiamate EDGES
Algoritmi e Strutture Dati
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Esercizi su alberi binari
Heap binari e HeapSort.
memoria gestita staticamente:
Fondamenti di Informatica
Strutture dati per insiemi disgiunti
15 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ora da stabilire.
Corso di informatica Athena – Periti Informatici
Ispezione lineare La funzione hash h(k,i) si ottiene da una funzione hash ordinaria h'(k) ponendo L’esplorazione inizia dalla cella h(k,0) = h'(k) e continua.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 K 4 è planare? Sì!
Algoritmi e Strutture Dati
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 08/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Alberi binari Definizione della struttura dati: struct tree { };
Corso di Informatica 2 a.a. 2003/04 Lezione 6
Alberi CORDA – Informatica A. Ferrari Testi da
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Algoritmi e Strutture Dati Strutture Dati Elementari.
MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche
Archivi Esempi Movimenti contabili di un’azienda
Olimpiadi di Informatica 2010 Giornate preparatorie
1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione.
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Capitolo 6 Il problema del dizionario Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE ABACUS Ud1Strutture dati lineariTempi -Liste semplicemente puntate 3h+3h.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Introduzione alla LOGICA MATEMATICA Corso di Matematica Discreta. Corso di laurea in Informatica. Prof. Luigi Borzacchini VIII. Insiemi e Strutture Dati.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Strutture dati di tipo astratto 19 Strutture dati,
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Prof.ssa Rossella Petreschi Lezione del 17 /10/2014 del Corso di Algoritmica Lezione n°5.
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
Transcript della presentazione:

Estendere i linguaggi: i tipi di dato astratti Unità C1 Estendere i linguaggi: i tipi di dato astratti

Obiettivi Conoscere le principali strutture dati esistenti Conoscere ed essere in grado di implementare le operazioni definite sulle strutture dati Saper scegliere la struttura dati più adatta alla soluzione di un problema

Insiemi dinamici Caratteristica di un insieme dinamico: il numero e la disposizione degli elementi che lo compongono può variare nel corso della sua esistenza Elementi dell’insieme: alcuni tipi di insiemi dinamici sono composti da elementi formati da informazioni che li identificano chiave e da dati satellite. La chiave è un campo (o un insieme di campi) che consente di identificare in modo univoco un elemento. I dati satellite sono le informazioni memorizzate nell’elemento.

Chiavi e dati satelliti Un esempio: gestione degli studenti della scuola. Ogni singolo elemento rappresenta uno studente. La chiave può essere per esempio il numero del libretto scolastico (o il codice fiscale) I dati satellite sono tutti i dati che vengono memorizzati per ogni studente: Cognome Nome Indirizzo Classe frequentata …

Chiavi e chiavi artificiali Non sempre è possibile individuare una chiave di identificazione degli elementi In molti casi si definisce una “chiave artificiale” (es il codice fiscale, il numero di libretto o in alcuni casi un ID (numero intero progressivo assegnato nel momento in cui un elemento viene inserito nell’insieme). La chiave può essere utilizzata per ordinare gli elementi in modo crescente o decrescente.

Puntatori I puntatori nei linguaggi di programmazione consentono di recuperare un dato conoscendo l’indirizzo di memoria in cui è memorizzato. Un puntatore è una variabile contenente un indirizzo di una cella di memoria. Un puntatore, quindi, è una variabile che, anziché contenere un valore numerico o una stringa di testo, mantiene l’indirizzo di memoria in cui è memorizzata l’informazione.

Operazioni sugli insiemi Le operazioni che si possono effettuare sugli insiemi dinamici si suddividono in: operazioni di interrogazione operazioni di sola lettura per recuperare informazioni dall’insieme operazioni di modifica consentono di inserire, cancellare e riordinare gli elementi dell’insieme cambiandone il numero e/o la disposizione

Le principali operazioni

Strutture dati Per gestire un insieme dinamico di elementi occorre implementarlo mediante una struttura dati. Una struttura dati è composta da nodi, ciascuno dei quali contiene un elemento dell’insieme ed eventuali altre informazioni (puntatori) che servono per la gestione della struttura.

Le strutture dati possono essere suddivise in due grandi famiglie: Tipi di strutture dati Le strutture dati possono essere suddivise in due grandi famiglie: lineari l’insieme degli elementi è organizzato in modo sequenziale. non lineari non prevedono che un elemento sia seguito esclusivamente da un altro elemento (Esempio la struttura ad albero del filesystem )

Le strutture fisiche dei dati Per implementare le strutture dati, si devono utilizzare le strutture fisiche fornite dai linguaggi che possono avere dimensione statica o dinamica. Un array, per esempio, è una struttura di memorizzazione dalla dimensione statica. Strutture fisiche dalla dimensione dinamica si possono implementare grazie all’uso dei puntatori.

Strutture dati lineari Una struttura dati si dice lineare se i suoi elementi sono organizzati in modo sequenziale, ovvero se logicamente gli stessi sono posizionati uno dopo l’altro. Pila Coda Lista

Pila (stack) La pila è una struttura dati di tipo LIFO che garantisce che l’ultimo elemento depositato nella pila sia il primo a essere servito. LIFO (Last-In First-Out, “l’ultimo arrivato è il primo ad essere servito”) Esempio pila di piatti, pila di libri, di monete

Operazioni sulla pila push pop top vuota consente di inserire un nuovo elemento in testa alla pila pop permette di estrarre il primo elemento in cima alla pila top consente di leggere il primo elemento in cima alla pila senza estrarlo da essa vuota restituisce true se la pila è vuota, false in caso contrario

Coda La coda è una struttura dati di tipo FIFO che garantisce che il primo elemento inserito sia il primo a essere servito. FIFO (First-In First-Out), il primo elemento a entrare è anche il primo a uscire

Operazioni sulla coda Le tipiche operazioni che si possono effettuare su una coda sono le seguenti: enqueue (accodare) consente di accodare un elemento alla coda dequeue (togliere dalla coda) consente invece di eliminare l’elemento che da più tempo è presente nella coda

Lista concatenata La lista concatenata è una collezione ordinata di elementi, ciascuno dei quali è concatenato al successivo mediante un riferimento che indica dove andare a prendere il successivo elemento. In una lista concatenata non è possibile accedere in modo diretto a un elemento, bensì è necessario scorrere tutti gli elementi fino a raggiungere quello cercato. Ogni elemento della lista è contenuto in un nodo, in cui è presente anche un puntatore all’elemento successivo. L’ultimo elemento della lista avrà il puntatore nullo, mentre il puntatore al primo nodo si conserva in una variabile opportuna.

Operazioni sulla lista Le operazioni principali che si possono effettuare su una lista sono: inserimento ricerca cancellazione Esempio di cancellazione:

Strutture dati non lineari Una struttura dati non lineare è composta da nodi posti in base a uno schema non sequenziale. Nelle strutture dati lineari, se ci troviamo posizionati su un nodo, possiamo decidere al più di andare sul nodo successivo come nelle liste concatenate, o sul nodo precedente come nelle liste concatenate bidirezionali. Nelle strutture dati non lineari, invece, partendo da un nodo abbiamo la possibilità di spostarci in più direzioni. Una struttura dati di questo genere assomiglia maggiormente a una rete di nodi anziché a una sequenza.

Un esempio: albero genealogico

Strutture non lineari: grafo Un grafo è una struttura dati non lineare composta da nodi e archi che li connettono. Esistono due principali categorie di grafi: grafi orientati; grafi non orientati.

Grafo orientato In un grafo orientato i nodi sono detti vertici e gli archi spigoli. Gli spigoli che connettono i vertici tra loro hanno una direzione e per definirla si utilizza una freccia. In un grafo orientato è possibile avere cappi. Un cappio è uno spigolo che inizia e termina sullo stesso vertice. Uno spigolo che esce da un vertice A o che entra in un vertice B si dice, rispettivamente, incidente da A o incidente a B. Il numero di spigoli uscenti da un vertice si chiama grado uscente. Il numero di spigoli entranti in un vertice si chiama invece grado entrante. Il grado di un vertice è il suo grado entrante più il suo grado uscente.

Grado, cammino In un grafo (orientato e non) il percorso per andare da un nodo a un altro è chiamato cammino e la sua lunghezza è pari al numero di archi attraversati. Un cammino si dice semplice se tutti i nodi della sequenza sono distinti tra loro. In un grafo orientato non è detto che esista un cammino per andare da un nodo a un altro, in quanto il percorso è condizionato dalla direzione degli spigoli. Se da un nodo A è possibile andare a un nodo B, si dice anche che B è raggiungibile da A tramite un determinato cammino c. Il grado di un vertice di un grafo non orientato è semplicemente il numero di archi incidenti su di esso. Un grafo non orientato si dice connesso se ogni coppia di nodi è collegata con un cammino. Un grafo non orientato, connesso e aciclico è detto albero libero, o più semplicemente un albero.

Albero Un albero è un grafo non orientato, connesso e aciclico. La rappresentazione grafica è simile a un albero con la radice in alto e le foglie in basso Un albero è una struttura dati gerarchica composta da nodi padri e nodi figli collegati da archi (rami). Un nodo figlio è correlato a uno e un solo nodo padre. Il nodo radice è il nodo da cui parte la struttura ad albero e che non possiede un nodo padre. Un nodo foglia non possiede nodi figli. La profondità di un nodo è la distanza tra esso ed il nodo radice. La profondità maggiore tra tutti i nodi dell’albero è l’altezza dell’albero. Il grado di un nodo è il numero di figli che esso possiede.

Albero (altre caratteristiche) Un antenato di un nodo x di un albero è qualunque nodo y che si trovi sull’unico cammino che porta dalla radice a x x è un discendente di y Se i nodi di un albero possono avere al massimo n figli, si parla di alberi n-ari Un albero si dice completo se i nodi foglia hanno tutti la stessa altezza e ogni altro nodo ha il grado pari al grado massimo.

Albero binario Un albero binario è un albero i cui nodi possono avere al più due nodi figli, denominati figlio destro e figlio sinistro. Un albero binario può essere definito anche in modo ricorsivo: non contiene alcun nodo; oppure contiene un nodo radice, un albero binario detto sottoalbero sinistro (eventualmente vuoto) e un albero binario chiamato sottoalbero destro (eventualmente vuoto). Negli alberi binari esistono 3 tipi di ricerca: PreOrdine visita prima il nodo padre, poi il sottoalbero sinistro e infine quello destro PostOrdine visita prima il sottoalbero sinistro, poi quello destro e infine il nodo padre InOrdine visita prima il sottoalbero sinistro, poi il nodo padre e infine il sottoalbero destro.