LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica...

32
Grafi e Grafi Diretti Aciclici Grafi e Grafi Diretti Aciclici Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Transcript of LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica...

Page 1: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Grafi e Grafi Diretti AcicliciLaboratorio di Programmazione IICorso di Laurea in Bioinformatica

Dipartimento di Informatica - Università di Verona

Page 2: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Sommario

Grafi ed implementazione in JavaVisita di un grafoGrafi Diretti Aciclici

Page 3: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Grafi

Page 4: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Grafi

Concetti di baseStruttura dati per rappresentare relazioni binarie

reti di trasportoreti stradaligrafo webrelazioni tra classi nei linguaggi OO

Page 5: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Terminologia

DefinizioniG (V ,E ) V insieme di vertici, E insiemi di archiArco: < vi , vj > |vi , vj ∈ VCammino (di lunghezza k):< v1, v2, · · · , vk > |∀i = 1, · · · , k − 1 < vi , vi+1 >∈ ECircuito: cammino con v1 = vk

Ciclo: Circuito con vi 6= vj , 1 < i , j < k ,i 6= jGrafo pesato: valore reale wi ,j associato ad ogni arco< vi , vj >

Page 6: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Rappresentazioni

Rappresentare grafiListe di adiacenza:

ad ogni vertice e’ associata la lista dei vertici adiacentiMatrice di adiacenza:

matrice |V | × |V |aij = 1 se < vi , vj >∈ E , aij = 0 altrimenti

Page 7: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Esempio: lista adiacenze

Esempio: lista adiacenze

A

B

C

D

E

F

A

B

C D

B DC

DB EC F

D

D

C

A

B

D

E F

A

B

C D

B D

B C E F

D

D

A

B

E

F

Page 8: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Esempio: matrice adiacenza

Esempio: matrice adiacenza

C

A

B

D

E F

A B C D E FA 0 1 0 0 0 0B 1 0 1 1 0 0C 0 1 0 1 0 0D 0 1 1 0 1 1E 0 0 0 1 0 0F 0 0 0 1 0 0

Page 9: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Caratteristiche

Vantaggi e svantaggi delle reppresentazioni

Liste di adiacenza (Memoria O(|E|)):Vantaggi: posso scorrere i nodi adiacenti a v inO(grado(v))Svantaggi: inserimento e cancellazione O(grado(v))

Matrice di adiacenza: (Memoria O(|V |2))Vantaggi: inserimento e cancellazione O(1)Svantaggi: posso scorrere i nodi adiacenti a v in O(|V|)

Page 10: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Implementazione in Java

Implementazione in javaUtilizziamo una rappresentazione basata su liste diadiacenzaLa lista di nodi e’ realizzata con una HashMap

non voglio avere nodi replicatiinserimento e cancellazione dei nodi sono efficienti

La lista di nodi successori viene rappresentata come uninsieme di archi

Insieme: un solo arco tra ciascuna coppia di nodiArco: piu’ efficiente per algoritmi che operano sull’insiemedegli archi

Vedere classi Grafo.java e Arco.java

Page 11: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Visite

Page 12: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Vistare il grafo

Visitare il grafoObiettivo: visitare una sola volta tutti i nodi del grafoDifficolta’:

1 Cicli: marcare i nodi visitati2 nodi isolati: visita termina quando tutte le componenti del

grafo sono state visitate

Page 13: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Visita in profondita’

Visita in Profondita’: DFSTipicamente ricorsivoDato un nodo, visita uno qualsiasi dei nodi adiacenti nonancora visitatiSe tutti i nodi adiacenti sono stati visitati, ritornare alpredecessoreI nodi possono essere enumerati secondo l’ordine di visita

Page 14: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Esempio: DFS

Esempio DFS

C

A

B

D

E F

H

K1

2

3 4

5

6

7

8

Page 15: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

DFS

Visita in Profondita’: DFSInizializzare tutti i nodi come non visitatiFino a che esiste un nodo v non visitato

eseguire DFS(v)

DFS(v): vista il nodo e lo marca come visitatoper ciascun nodo v adiacente non visitato

eseguire DFS(v)

Page 16: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

DFS: discussione

Visita in Profondita’: discussioneMarcatura: varie opzioni:Mantenere una Map di nodi e interi

inizializzo la map con tutti i nodi e valore pari a zeroun nodo con valore maggiore di zero e’ visitato

Un insieme di nodi non visitatiinizializzo il vettore con tutti i nodiquando visito un nodo lo rimuovo dal vettore

Creare un oggetto nodo che contiene un campo visitato edaggiornarlo di conseguenza

Page 17: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Visitare in ampiezza

BFSTipicamente iterativo: usa una coda di appoggiometti in coda il nodo inizialeFino a che la coda non e’ vuota:

estrai il primo nodo e visitalometti in coda tutti i nodi adiacenti non visitati

quando la coda e’ vuota controllare se ci sono altri nodinon visitati se si metterli in coda e continuare.

Page 18: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Esempio: BFS

Esempio BFS

�������������������������������������������������������������������������������������������

�������������������������������������������������������������������������������������������

������������������������������������������������������������������������

������������������������������������������������������������������������

������������������������������������������������������������������������������������

������������������������������������������������������������������������������������

C

A

B

D

E F

H

K1

2

7

8

3

4

5 6

Page 19: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Esercizi

EserciziImplementare il metodo dfs(...) della classe Visite.javaImplementare il metodo visitaBFS() della classe Visite.java

Page 20: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Grafi Diretti Aciclici (DAG)

Page 21: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Grafi Diretti Aciclici (DAG)

Concetti di baseGrafo Diretto: archi sono coppie ordinate di nodi

< u, v > 6=< v , u >

Grafo diretto aciclico: grafo diretto senza ciclinon esiste nessun cammino < v1, v2, · · · , vk > tale chev1 = vkpossono esistere diversi cammini da v1 a vk

Page 22: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

DAG: Esempio

Example (DAG)

CB

D

E F

CB

D

E F

Page 23: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Ordinamento parziale e DAG

Ordinamento parzialeDato un insieme A, ordinamento parziale: relazione diordine transitiva parziale sugli elementi di Aparziale: possono esistere coppie di elementi per cui non e’definito alcun ordineUn DAG rappresenta un ordinamento parziale:

Vertici: elementi di AArcho < u, v > se u < v secondo l’ordine parziale

Esempio: sviluppo di moduli per un progetto softwareCiclo nel grafo → il grafo non puo’ rappresentare un ordineparziale

Page 24: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Ordinamento Topologico di un DAG

Ordinamento TopologicoOrdinamento lineare dei veritci tale che:

per ogni arco < u, v > u precede v nell’ordinamento

ad ogni vertice u associamo un intero p(u) tale che seesiste l’arco < u, v > allor p(u) < p(v)di conseguenza se esiste un cammino da u a w allora p(u)< p(w): ogni nodo e’ seguito nell’ordine dai suoi successorie’ sempre possibile trovare un ordinamento topologico perun DAGl’ordinamento topologico non e’ univoco

Page 25: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Ordinamenti Topologici: Esempio

Example (ordinamenti topologici validi)

BD FE C

D B C FE

Page 26: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Ordinamenti Topologici: Esempio II

Example (ordinamento topologico non valido)

D F BE

C

Page 27: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Ordinamento Topologico e DFS

DFS di un DAGUna DFS di un DAG induce un ordinamento topologico

Eseguo una DFS registrando il tempo di inizio visista(startValues) e fine visita (finalValues) per ogni nodoad ogni esecuzione della DFS aggiorno il tempoOrdinamento topologico: ordine inverso di visita dei verticiUtilizzo il tempo di fine visita come p(u)Intuizione: ciascun nodo avra’ un ordine di fine visitamaggiore dei suoi successori.

Page 28: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Esempio: DFS per Ordinamenti Topologici

Example (esempio esecuzione di DFS per ordinamentotopologico)

CB

D

E F1/2

3/8

4/7 5/6

9/10

Page 29: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

DFS per ordine topologico

Pseudocodice ordine topologico

Algorithm 1 OrdineTopologicoRequire: G grafo

for ogni vertice v di G doinizializza a zero startValues e endValues di v

end forfor ogni vertice v di G do

if startValues di v == 0 thendfs(G,v);

end ifend forcostruisci una lista res con i vertici in ordine inverso di fine visitareturn res

Page 30: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

DFS per ordine topologico

Pseudocodice per DFS

Algorithm 2 dfsRequire: G grafo, v node

time++;startValues di v = time;for ogni vertice u adiacente a v do

if startValues di u == 0 thendfs(G,u);

elseif finalValues di u == 0 then

errore G non e’ un DAGend if

end ifend fortime++finalValues di v = time

Page 31: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Realizzazione DAG in java

DAG in javaClasse ArcoOrdinato.java

estende la classe Arco definendo un ordine tra i nodidell’arco

classe DAG.javaestende la classe Graforidefinisce il metodo add(Object from, Object to, ObjectValue)ridefinisce il metodo toString()implementa nuove funzionalita: ordineTopologico(...)

Page 32: LaboratoriodiProgrammazioneII CorsodiLaureainBioinformatica …profs.sci.univr.it/~farinelli/courses/algBio/slides/... · 2017. 1. 16. · GrafieGrafi Diretti Aciclici Rappresentazioni

Grafi e GrafiDirettiAciclici

Esercizi: DAG

Esercizi sui DAG(valido per il progetto) realizzare il metodogetTopologicalOrder(...) della classe DAG.java

utilizzare il metodo pullMax(...) (implementato) perestrarre il nodo con endValues piu’ alta alla fine della visitautilizzare il metodo ricorsivo dfs(...) (da implementare) perrichiamare la visita in profondita’ sui nodile strutture startValues, endValues e la variabile time sonogia dichiarate come variabili di classe