Percorsi su grafi, Sottoalberi Comuni e Programmazione Dinamica Fabio Massimo Zanzotto.

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Ricorsione in SQL-99.
Strutture dati per insiemi disgiunti
Master Bioinformatica 2002: Grafi Problema: cammini minimi da tutti i vertici a tutti i vertici Dato un grafo pesato G =(V,E,w), trovare un cammino minimo.
Il problem-solving Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino.
Stazione 1 Stazione 2 R1 R2 IN OUT Descrizione del sistema Stazione 1 Stazione 2 R1 R2 IN OUT Partenza da vuoto
Algoritmi e Strutture Dati
Algoritmi Avanzati Grafi e Alberi
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Alberi binari di ricerca
Insiemi disgiunti.
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.
Algoritmi e Strutture Dati
Intelligenza Artificiale 2 Metodologie di ragionamento Prof. M.T. PAZIENZA a.a
Università degli Studi di Roma Tor Vergata
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Sistemi basati su conoscenza Esercizi Prolog
Esercizi su alberi binari
Alberi binari Definizione della struttura dati: struct tree { };
Esercizi su alberi binari di ricerca
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Algoritmi e strutture Dati - Lezione 7
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Algoritmi e Strutture Dati
Albero: insieme di punti chiamati NODI e linee chiamate EDGES
Algoritmi e Strutture Dati
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
Esercizi 5 Grafi.
Fondamenti di Informatica
Intelligenza Artificiale
Verità in un Modello Herbrandt Per costruire il mondo corrente, con Universo U e interpretazione di herbandt H: makeUniverso(U) asserisce individuo(I)
Anche la RB-Delete ha due fasi: Nella prima viene tolto un nodo y avente uno dei sottoalberi vuoto sostituendolo con la radice dellaltro sottoalbero. Per.
Strutture dati per insiemi disgiunti
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.
Esecuzione dei programmi Prolog Liste ed operatori aritmetici
Per valutare la complessità ammortizzata scomponiamo ogni Union: nelle due FindSet e nella Link che la costituiscono e valuteremo la complessità in funzione.
Il primo passo: I basilari del Prolog
2. Grafi.
Recuperare tutte le risposte Gestione di input-output Fabio Massimo Zanzotto (slides di Andrea Turbati)
Algoritmi e Strutture Dati
Fabio Massimo Zanzotto (slides di Andrea Turbati con aggiunte)
Strategie per il problem solving
Esercizi su File.
Basi di conoscenza: cenni di logica Fabio Massimo Zanzotto.
Linguaggi e Modelli per i Dati e la Conoscenza Fabio Massimo Zanzotto.
Esercizi su alberi binari di ricerca
Alberi binari Definizione della struttura dati: struct tree { };
Definire operatori Strutture dati Fabio Massimo Zanzotto (slides di Andrea Turbati)
ALGORITMI a.
Linguaggi e Modelli di Programmazione Fabio Massimo Zanzotto.
Ordinamento e Operazioni su Strutture Dati Fabio Massimo Zanzotto.
Recuperare tutte le risposte Gestione di input-output Fabio Massimo Zanzotto (slides di Andrea Turbati)
alberi completamente sbilanciati
Cenni di Logica Fabio Massimo Zanzotto. Calcolo proposizionale.
Controllare Tipi Dati Decomporre fatti Controllare il database Fabio Massimo Zanzotto (slides di Andrea Turbati)
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche
Olimpiadi di Informatica 2010 Giornate preparatorie
Algoritmi e strutture Dati - Lezione 7 1 Algoritmi di ordinamento ottimali L’algoritmo Merge-Sort ha complessità O(n log(n))  Algoritmo di ordinamento.
Università degli Studi di Cagliari FACOLTA’ DI INGEGNERIA
Cammini minimi in grafi:
Transcript della presentazione:

Percorsi su grafi, Sottoalberi Comuni e Programmazione Dinamica Fabio Massimo Zanzotto

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Percorso su grafi Ritorniamo all’indietro: Data la rappresentazione di un grafo come archi tra nodi /* e(X,Y) */ Scrivere il predicato: /* path(X,Y) */ che sia vero se esiste un percorso tra X e Y

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Percorso su grafi Esempio: e(a,b). e(b,c). e(c,d). e(d,e). e(f,e). e(a,e). a bc d e f Soluzione 1 path(X,Y):- e(X,Y). path(X,Y):- e(X,Z), path(Z,Y). Soluzione 2 path(X,Y):- e(X,Y). path(X,Y):- path(X,Z), e(Z,Y).

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Percorso su Grafi Come porre i limiti di ricerca alla Soluzione 2? Cominciamo… Scrivere il predicato /*path(X,Y,PATH)*/ Vero se esiste un percorso tra X ed Y e PATH è la lista dei nodi visitati.

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Percorso su grafi con limite Soluzione 2 - modificata path(X,Y,[X,Y]):- e(X,Y). path(X,Y,P):- path(X,Z,P1), e(Z,Y), lastelem(P,Y,P1).

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Percorso su grafi con limite Come porre i limiti di ricerca alla Soluzione 2? Cominciamo… Scrivere il predicato /*path(X,Y,PATH,MAX)*/ Vero se esiste un percorso tra X ed Y, PATH è la lista dei nodi visitati e il cammino ha un numero di nodi minore di MAX.

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Percorso su grafi con limite Soluzione 2 - modificata path(X,Y,[X,Y],MAX):- MAX >= 2, e(X,Y). path(X,Y,P,MAX):- hasmaxlength(P,MAX), MAX1 is MAX – 1, path(X,Z,P1,MAX1), e(Z,Y), lastelem(P,Y,P1). hasmaxlength(_,MAX):- MAX < 0, !, fail. hasmaxlength([],MAX):- MAX >= 0. hasmaxlength([_|R],MAX):- MAX1 is MAX -1, hasmaxlength(R,MAX1).

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Percorso su grafi con limite Soluzione 2 - modificata path(_,_,_,MAX):- MAX < 0, !, fail. path(X,Y,[X,Y],MAX):- MAX >= 2, e(X,Y). path(X,Y,P,MAX):- MAX1 is MAX – 1, path(X,Z,P1,MAX1), e(Z,Y), lastelem(P,Y,P1).

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Programmazione dinamica La programmazione dinamica prevede: la memorizzazione delle computazioni intermedie per diminuire la complessità temporale a scapito di quella spaziale. La programmazione dinamica è utilissima quando ci sono dei predicati ricorsivi che dentro di se usano risultati precedentemente computati

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Programmazione dinamica Fibonacci Similitudine tra Alberi

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Programmazione dinamica Numero di Fibonacci fib(1) = 1 fib(2) = 1 fib(N) = fib(N-1) + fib(N-2).

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Fibonacci: prima! Scrivere il predicato fib(X,N) vero se X è un intero e N è il numero di fibonacci ad esso associato.

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Fibonacci: prima! fib(1,1). fib(2,1). fib(N,F):- N > 2, N1 is N - 1, fib(N1,F1), N2 is N - 2, fib(N2,F2), F is F1 + F2.

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Fibonacci dinamico :- dynamic fib/2. fib(1,1). fib(2,1). fib(N,F):- N > 2, N1 is N - 1, fib(N1,F1), N2 is N - 2, fib(N2,F2), F is F1 + F2, asserta(fib(N,F)).

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Programmazione Dinamica Similitudine tra alberi in funzione del numero di sottoalberi in comune k(T1,T2,N) è vera se T1 e T2 sono alberi ed essi hanno in comune N sottoalberi

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Prog Din: Similitudine tra alberi I sottoalberi NP D N VP V delivers a talk NP D N VP V delivers a NP D N VP V delivers NP D N VP V NP VP V

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Prog Din: Similitudine tra alberi

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Data il predicato T (t) che fornisce tutti i sottoalberi The kernel may be written as: k(T1,T2,N) è vero se N = | T (T1)  T (T2) | Prog Din: Similitudine tra alberi

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Soluzioni La strada verso la soluzione dinamica: –Ricerca esaustiva –Versione ricorsiva –Versione ricorsiva con programmazione dinamica

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Ricerca esaustiva Scrivere il predicato: k(T1,T2,N) vero se T1 e T2 sono alberi ed essi hanno in comune N sottoalberi, usando le proprietà descritte. Rappresentiamo albero come: tree(F,LIST_OF_SUBTREES).

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Ricerca esaustiva k(T1,T2,N):- t(T1,ST1), t(T2,ST2), intersect(ST1,ST2,LST), length(LST,N).

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Ricerca esaustiva t(T,STL):- bagof(ST,st(T,ST),STL). st_r(tree(A,_), tree(A,[])). st_r(tree(A,R),tree(A,R1)):- st_l(R,R1). st_l([],[]). st_l([X|R],[X1|R1]):- st(X,X1), st_l(R,R1). st(T, T1):- st_r(T,T1). st(tree(A,R),T1):- member(T,R), st(T,T1).

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Ricerca esaustiva Esercizio Realizzare intersect(A,B,A_I_B) vero se A e B sono liste con ripetizioni e A_I_B è una lista che contiene gli elementi di A e B eventualmente ripetuti

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Un passo all’indietro Dato un albero t, quanti sottoalberi ha? Focalizziamoci sui sottoalberi che partono dalla radice Versione ricorsiva R  (ch 1 )  (ch 2 )  (ch n ) …  (R)=  i (1+  (ch i )) se R non è terminale  (R)=0se R è terminale

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Versione ricorsiva [Collins and Duffy, ACL 2002] evaluate  in O(n 2 ):

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Versione ricorsiva Scrivere il predicato: k(T1,T2,N) vero se T1 e T2 sono alberi ed essi hanno in comune N sottoalberi, usando la definizione ricorsiva.

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Versione ricorsiva delta(tree(X,[]),tree(X,[]),1):- !. delta(tree(X,RX),tree(X,RX1),N):- sons(RX,SX), sons(RX1,SX) subdelta(RX,RX1,N), !. delta(_,_,0):- !. subdelta([],[],1). subdelta([T1|R1],[T2|R2], N):- delta(T1,T2,N1), subdelta(R1,R2, NR), N is (1 + N1)*NR.

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Versione ricorsiva k(T1,T2,N):- bagof(ST1,complete_st(T1,ST1),STL1), bagof(ST2,complete_st(T2,ST2),STL2), sum_deltas(STL1, STL2,N). complete_st(T,T). complete_st(tree(_,S),T):- member(T1,S), complete_st(T1,T).

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Versione ricorsiva sum_deltas([], _,0). sum_deltas([ST|STL1], STL2,N):- sum_deltas1(ST,STL2,N1), sum_deltas(STL1, STL2,N2), N is N1 + N2. sum_deltas1(_,[],0). sum_deltas1(ST,[ST2|STL2],N):- !, delta(ST,ST2,N1), sum_deltas1(ST, STL2,N2), N is N1 + N2.

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Versione ricorsiva con programmazione dinamica Scrivere il predicato: k(T1,T2,N) vero se T1 e T2 sono alberi ed essi hanno in comune N sottoalberi, usando la definizione ricorsiva e memorizzando i risultati parziali di delta in delta_m.

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Versione ricorsiva con programmazione dinamica :- dynamic delta_m/3. delta_m(x,x,0).

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Versione ricorsiva con programmazione dinamica delta(T1,T2,N):- delta_m(T1,T2,N). delta(tree(X,[]),tree(X,[]),1):- !. delta(tree(X,RX),tree(X,RX1),N):- sons(RX,SX), sons(RX1,SX) subdelta(RX,RX1,N), !, assert(delta_m(tree(X,RX),tree(X,RX1),N). delta(_,_,0):- !.

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Versione ricorsiva con programmazione dinamica k(T1,T2,N):- bagof(ST1,complete_st(T1,ST1),STL1), bagof(ST2,complete_st(T2,ST2),STL2), sum_deltas(STL1, STL2,N), retractall(delta_m(_,_,_)), assert(delta_m(x,x,0)).

© F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Esercizi Implementare ciò che manca :-)