La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Introduzione alla LOGICA MATEMATICA Corso di Matematica Discreta. Corso di laurea in Informatica. Prof. Luigi Borzacchini VIII. Insiemi e Strutture Dati.

Presentazioni simili


Presentazione sul tema: "Introduzione alla LOGICA MATEMATICA Corso di Matematica Discreta. Corso di laurea in Informatica. Prof. Luigi Borzacchini VIII. Insiemi e Strutture Dati."— Transcript della presentazione:

1 Introduzione alla LOGICA MATEMATICA Corso di Matematica Discreta. Corso di laurea in Informatica. Prof. Luigi Borzacchini VIII. Insiemi e Strutture Dati

2 Insiemi come strutture dati Insiemi, matrici e relazioni sono concetti fondamentali non solo in matematica ma anche nello studio delle strutture dati nella computer science. Ogni linguaggio di programmazione ha il suo modo di implementarle, ma la loro struttura logico-algebrica è indipendente dal particolare linguaggio. Le operazioni sono o interne alla struttura dati, come le ordinarie operazioni algebriche (ad esempio in ESSE3 estrarre un dato relativo ad uno studente dalla base di dati), o sulla struttura per cambiarla, come le operazioni insiemistiche (ad esempio aggiungere un nuovo studente alla base di dati di ESSE3).

3 Il record Di norma le strutture dati sono ordinate dai numeri interi, così che la struttura base è il record a, cioè una sequenza di n elementi o n-upla (a 1, a 2,…., a n ). Scriveremo anche a i come a[i], ove gli a i possono appartenere ad insiemi diversi M i, e quindi il record è un elemento del prodotto cartesiano M 1  M 2  …  M n, in cui a 1  M 1, a 2  M 2 ….., a n  M n, Possiamo considerare ad esempio il data-base di ESSE3. In esso probabilmente ad ogni studente è associato un record che contiene le informazioni a lui relative.

4 Un record a può essere ad esempio una sequenza di informazioni personali di uno studente: (Michele, Rossi, 18-09-1995, Bari), in cui i diversi ‘campi’ contengono informazioni di diverso tipo: (nome, cognome, data di nascita, luogo di nascita). Nel nostro esempio ESSE3 M 1 può essere l’insieme dei Nomi, M 2 l’insieme dei Cognomi, M 3 l’insieme delle date di nascita, M 4 l’insieme dei luoghi di nascita, etc.. Si usa anche la notazione a:slot  value, cioè a 2 = a[cognome] =Rossi, a 1 = a[nome]=Michele, etc., ed il record appare allora come una funzione a j = a[j-esimo tipo] = t  M j

5 L’ array Si può costruire una sequenza di records, ad esempio in ESSE3 ognuno relativo ad uno studente: è l’array. Il record è detto anche l’array monodimensionale. Il concetto di array A infatti generalizza il concetto di record ed equivale alla nostra definizione di matrice: una matrice n  m corrisponde allora ad un array bidimensionale formato da n records, ciascuno con m campi: in ESSE3 ci sono n studenti per ciascuno dei quali sono memorizzati m campi di dati. L’i-esima riga di A è il record dei dati dell’i-esimo studente, A[i,j], ovvero A i,j è il valore del j-esimo campo per l’i-esimo studente, A i,j  M j

6 1645723ROSSIPAOLO26/07/922013-2014TraniVia Matteotti 6informatica 1645724BIANCHIANNA21/10/942014-2015BariVia Amendola 3lettere 1645725LORUSSONICOLA03/05/932014-2015MolaCorso Italia 33lingue 1645726RENZIMATTEO12/12/932014-2015BariVia Cavour 21informatica 1645728CASSANOANTONIO04/06/932014-2015RuvoPiazza Roma 6fisica 1645729LORUSSOPIETRO11/09/942014-2015PaloVia Garibaldi 12informatica 1645731CONTEANTONIO22/03/942014-2015BariVia Napoli 71informatica 1645732BELLUCCIMONICA30/01/952014-2015BariPiazza Moro 18biologia 1645734GRILLOGIUSEPPE18/02/932014-2015MolaVia Cairoli 60informatica 1645735BERLUSCONISILVIO24/07/942014-2015BariVia Putignani 11informatica matricola, cognome, nome, data di nasc., anno imm., città resid., indirizzo, laurea Come operazione interna alla struttura posso ‘interrogare’ il data-base per sapere quando si è immatricolato lo studente NICOLA LORUSSO. Ed allora devo trovare i records con A[i,2]= Lorusso  A[i,3]=Nicola. Se non ci sono omonimi la relazione è funzionale e troverò i* (3 nel nostro esempio, caratterizzato dalla matricola 1645724). E quindi cercherò A[i*,5] (trovandolo uguale a 2014-2015).

7 Un array bidimensionale con la specificazione degli n tipi di dati M i che devono essere usati nei vari campi è spesso detto una base di dati relazionale. Infatti esso può essere visto come una relazione n- aria sul prodotto cartesiano M 1  M 2  M 3  ….  M n Gli studenti possono comparire in altri data-base (ad esempio relativi agli esami) e per identificarli nei due data base occorre avere una ‘chiave’ univoca (il numero di matricola elemento di M 1 ). Questo vuol dire che la nostra relazione deve essere funzionale in M 1, cioè dato i  M 1, deve essere univocamente determinato il record ad esso relativo.

8 715/09/141645723ROSSIPAOLO2013-2014928no 915/09/141645726RENZIMATTEO2014-2015923si 1215/09/141645729RUSSOPIETRO2014-2015921no 1820/09/141645731CONTEANTONIO2014-2015930no 1920/09/141645734GRILLOGIUSEPPE2014-2015918si 2320/09/141645735BERLUSCONISILVIO2014-2015918si n.ro, data, matricola, cognome, nome, anno immatr., CFU, voto, flag Supponiamo di avere i data-base relativi agli esami, ad esempio Matematica Discreta. Il numero di matricola ci consente di vedere che lo studente Paolo Rossi, matricola 1645723, ha preso 28: possiamo così incrociare diversi data-base e ricavare da essi il curriculum di uno studente. I dati possono essere anche utilizzati come input per algoritmi: ad esempio si può calcolare il voto medio degli studenti con una certa residenza o immatricolati un certo anno.

9 Code e Stacks La struttura del record è la base per tipi di dati più specifici per il tipo di operazioni insiemistiche su di essi. Ad esempio le code e gli stacks si caratterizzano per avere operazioni particolari per l’aggiunta e l’estrazione di dati. La coda (queue) è detta anche first-in-first-out, FIFO, poiché gli elementi si aggiungono alla fine del record e si estraggono al suo inizio. Sia C la coda: Il primo elemento ad essere estratto sarà a, l’ultimo ad essere stato inserito sarà l. Più precisamente abcdefghil

10 ‘mettere in coda’, enquieu: M  Code  Code enquieu(m,C)= ‘estrarre dalla coda’, dequieu: Code  M  Code dequieu(C)= (a, Analogo è lo stack, detto anche last-in-first-out, LIFO, poiché sia l’estrazione che l’aggiunta degli elementi avviene sulla fine del record. Sia C lo stack: Le operazioni base sugli stacks sono usualmente denominate con push (aggiungi allo stack) e pop (elimina dallo stack), così definite push(m,C)= pop(C)= (l, abcdefghilm bcdefghil abcdefghil abcdefghilm abcdefghi ) )

11 Grafi e alberi Sia V un insieme di elementi (vertici), e E un insieme di coppie di vertici (archi), con |V|=n e |E|=m. La coppia (V,E) si dice grafo, diretto se le coppie sono ordinate, indiretto se non lo sono. a a b b c d c d e f Una sequenza di archi (a 1, a 2 ),(a 2, a 3 ), …,(a i-1, a i ),…,(a n-1, a n ), si dice una catena, un cammino se il grafo è diretto; un ciclo se a 1 = a n, un circuito se il grafo è diretto. Un cammino (circuito) si dice hamiltoniano se passa una e una sola volta per tutti i vertici, euleriano se passa una e una sola volta per tutti gli archi.

12 Abbiamo usato i grafi diretti per rappresentare le relazioni binarie, gli alberi per le tassonomie. Un grafo senza cicli si dice un albero. Se in un albero scegliamo un vertice come radice e ordiniamo da esso tutti i vertici, l’albero viene univocamente ordinato (verso il basso) a partire dalla radice. Gli a b c d e f g si dicono foglie. Nell’albero in figura sia d o b la radice e ordiniamo l’albero, ottenendo l’albero diretto: d b c f g c d a e a b f g e In un albero m=n-1

13 I grafi si rappresentano in genere tramite matrici. La matrice di incidenza M è n  m, definita come M i,j = 1 sse il vertice i  l’arco j, 0 altrimenti (per grafi indiretti), oppure M i,j = +1 se i è vertice terminale di j, M i,j = -1 se è vertice iniziale, 0 altrimenti (per grafi diretti). La matrice di adiacenza A è n  n, definita come A i,j = 1 sse l’arco (i,j)  E, 0 altrimenti (per grafi indiretti A è simmetrica). a b c d e f 11001000 10100000 01110000 00000110 00011100 00000011 111 11 111 11 111 11 abcdefabcdef abcdefabcdef M A

14 a b c d e f e d f c b a g ++- +- - +- --- +++ abcdefabcdef 1 1 1 1 111 abcdefabcdef M A Importante l’ordine di esplorazione di un albero: si può usare la depth first, in cui si scende lungo i rami, memorizzando le diramazioni, da esplorare quando un ramo sia terminato (backtracking). Un’altra tecnica è la breadth first, in cui si esplorano i livelli in successione, ma occorre memorizzare tutta l’esplorazione precedente.


Scaricare ppt "Introduzione alla LOGICA MATEMATICA Corso di Matematica Discreta. Corso di laurea in Informatica. Prof. Luigi Borzacchini VIII. Insiemi e Strutture Dati."

Presentazioni simili


Annunci Google