Ordinamento e Operazioni su Strutture Dati Fabio Massimo Zanzotto.

Slides:



Advertisements
Presentazioni simili
Andrea Zandatutoraggio strutture dati STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°14 albero di ricerca binario.
Advertisements

Alberi binari Definizione Sottoalberi Padre, figli
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Strutture dati elementari
Alberi binari di ricerca
Code con priorità Ordinamento
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Esercizi su alberi binari
Esercizi su alberi binari di ricerca
Algoritmi e strutture Dati - Lezione 7
Il problema del dizionario
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 4 Ordinamento: Heapsort Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
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.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Algoritmi e Strutture Dati
Algoritmi e strutture dati
Algoritmi e Strutture Dati III. Algoritmi di Ordinamento
Algoritmi di ordinamento
Albero: insieme di punti chiamati NODI e linee chiamate EDGES
Algoritmi e Strutture Dati 20 aprile 2001
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
Alberi di ricerca binari
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
Recuperare tutte le risposte Gestione di input-output Fabio Massimo Zanzotto (slides di Andrea Turbati)
La complessità media O(n log n) di Quick-Sort vale soltanto se tutte le permutazioni dell’array in ingresso sono ugualmente probabili. In molte applicazioni.
Fabio Massimo Zanzotto (slides di Andrea Turbati con aggiunte)
Strategie per il problem solving
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.
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Alberi bilanciati (rif. Algoritmi in Java, di R. Sedgewick)
Alberi CORDA – Informatica A. Ferrari Testi da
Recuperare tutte le risposte Gestione di input-output Fabio Massimo Zanzotto (slides di Andrea Turbati)
alberi completamente sbilanciati
Percorsi su grafi, Sottoalberi Comuni e Programmazione Dinamica Fabio Massimo Zanzotto.
Complessità del problema Se non facciamo ipotesi sul tipo degli elementi della sequenza le uniche operazioni permesse sono confronti e assegnazioni. Problema.
Cenni di Logica Fabio Massimo Zanzotto. Calcolo proposizionale.
Controllare Tipi Dati Decomporre fatti Controllare il database Fabio Massimo Zanzotto (slides di Andrea Turbati)
Algoritmi e Strutture Dati Luciano Gualà
AlgoLab - Code unificabili Code unificabili con alberi binomiali Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
Ordinamento1 Algoritmi di ordinamento  Selection Sort  Quick Sort  Lower bound alla complessità degli algoritmi di ordinamento.
GLI ALGORITMI VISIBILE SUL BLOG INFORMATICA ANNO SCOLASTICO 2013 / 2014 GABRIELE SCARICA 2°T.
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati.
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Prog2 a.a. 2001/ Albero binario di ricerca Un albero binario di ricerca é un albero binario in cui ogni nodo ha un’etichetta.
Lo strano mondo degli algoritmi di ordinamento Algoritmi.
Algoritmi e strutture Dati - Lezione 7 1 Algoritmi di ordinamento ottimali L’algoritmo Merge-Sort ha complessità O(n log(n))  Algoritmo di ordinamento.
1 Un esempio: le liste ordinate di interi. 2 Liste ordinate  OrderedIntList 4 lista ordinata di interi –modificabile.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
1 Un esempio con iteratore: le liste ordinate di interi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Prof.ssa Rossella Petreschi Lezione del 15 /10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Paragrafo 7.4 del testo Kingston “Algorithms and.
Transcript della presentazione:

Ordinamento e Operazioni su Strutture Dati Fabio Massimo Zanzotto

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Ordinare una lista Ordinare liste è sempre necessario :-) /*ordinata(Lista,ListaOrdinata)*/ vera se ListaOrdinata è una lista che contiene tutti gli elementi di Lista ed è ordinata.

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Ordinamento: prima realizzazione Guardiamo alle proprietà: ordinata(L,LO):- permutazione(L,LO), /*vera se L è una permutazione degli elementi di LO*/ ordinata(LO). /*vera se L è una lista ordinata*/

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Ordinamento: prima realizzazione /*ordinata(L).*/ scrivere /*permutazione(L,LO).*/ scrivere

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” ordinata([]). ordinata([X1]). ordinata([X1,X2|R]):- X1 >= X2,!, ordinata([X2|R]). permutazione([],[]). permutazione([X|RX],Y):-permutazione(RX,RY), member_new(X,Y,RY). member_new(X,[X|R],R). member_new(X,[P|R],[P|RR]):-member_new(X,R,RR).

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Nella letteratura esistono vari algoritmi per ordinare una lista di elementi (confrontabili) I più famosi sono: –Insertion sort –Bubble sort –Quick sort Ordinare una lista

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” bubblesort(List, Sorted):- swap(List, List1),!, bubblesort(List1, Sorted). bubblesort(Sorted, Sorted). swap([X,Y|Rest], [Y,X|Rest]):- Y. swap([Z|Rest], [Z|Rest1]):- swap(Rest, Rest1). Bubble sort

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” quicksort( [], []). quicksort( [X|Tail], Sorted) :- split( X, Tail, Small, Big), quicksort( Small, SortedSmall), quicksort( Big, SortedBig), conc( SortedSmall, [X|SortedBig], Sorted). split( X, [], [], []). split( X, [Y|Tail], [Y|Small], Big) :- gt( X, Y), !, split( X, Tail, Small, Big). split( X, [Y|Tail], Small, [Y|Big]) :- split( X, Tail, Small, Big). Quick sort

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Implementare l’insertion sort Esercizio

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Cercare con Alberi Binari Cercare elemento in una lista Alberi binari come rappresentazione efficiente –Ricercare in alberi binari –Aggiungere elementi in alberi binari –Rimuovere elementi –Costruire da una lista un albero binario bilanciato

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Cercare elementi in liste member(X,[X|_]). member(X,[_|L]):- member(X,L). Costo?

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari Alberi che hanno: –una radice –un sottoalbero destro –un sottoalbero sinistro a b c d

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari: una rappresentazione /*t(SINISTRO,RADICE,DESTRO) nil albero nullo*/ t( t(nil,b,nil), a, t(t(nil,d,nil),c,nil) ). a b c d

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari: cercare in alberi binari /*in(X,T).*/ Vero se X è un elemento, T è un albero binario, e X è un nodo dell’albero. in(X,t(_,X,_)). in(X,t(L,_,_)):- in(X,L). in(X,t(_,_,R)):- in(X,R).

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari: cercare efficientemente Ipotesi: l’albero binario è costruito in modo che nella parte sinistra ci siano solo elementi minori della radice e nella parte destra solo elementi maggiori della radice b a c d

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari: cercare efficientemente Riscrivere /*in(X,T).*/ Vero se X è un elemento, T è un albero binario, e X è un nodo dell’albero. in(X,t(_,X,_)). in(X,t(L,Y,_)):- X<Y, !, in(X,L). in(X,t(_,Y,R)):- X>Y, !, in(X,R).

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari: problema Ipotesi: l’albero binario è costruito in modo che nella parte sinistra ci siano solo elementi minori della radice e nella parte destra solo elementi maggiori della radice Come costruirli?

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari: costruzione Immettere un elemento in un albero /*add(S,X,S1)*/ vero se S è un albero binario con la proprietà precedente, X è un elemento, S1 è un albero binario con X è per cui vale la proprietà precedente

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari: costruzione Partiamo da /*addleaf(S,X,S1)*/ vero se S è un albero binario con la proprietà precedente, X è un elemento, S1 è un albero binario con X come foglia e per cui vale la proprietà precedente

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari: costruzione addleaf(nil,X,t(nil,X,nil)). addleaf(t(L,X,R),X,t(L,X,R)). addleaf(t(L,Root,R),X,t(L, Root,R1)):- gt(X,Root), addleaf(R,X,R1). addleaf(t(L,Root,R),X,t(L1, Root,R)):- gt(Root,X), addleaf(L1,X,R).

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari: togliere elemento Partiamo da /*delleaf(S,X,S1)*/ vero se S è un albero binario con la proprietà precedente, X è un elemento foglia, S1 è un albero binario senza X è per cui vale la proprietà precedente delleaf(S,X,S1) :- addleaf(S1,X,S).

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari: togliere elemento Problema: ma se X non è una foglia? A X ?

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari: togliere elemento Problema: ma se X non è una foglia? X Y Y Y

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari: togliere elemento /*del(S,X,S1)*/ vero se S è un albero binario con la proprietà precedente, X è un nodo, S1 è un albero binario per cui vale la proprietà precedente senza X

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari: togliere elemento del(t(nil,X,R),X,R). del(t(L,X,nil),X,L). del(t(L,X,R),X,t(L,Y,R1)):- delmin(R,Y,R1). del(t(L,Y,R),X,t(L,Y,R1)):- gt(X,Y), del(R,X,R1). del(t(L,Y,R),X,t(L1,Y,R)):- gt(Y,X), del(L,X,L1).

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari: togliere elemento delmin(t(nil,Y,R),Y,R). delmin(t(L,Y,R),X, t(L1,Y,R)):- delmin(L,X,L1).

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome “Tor Vergata” Alberi binari Esercizio Costruire un albero binario bilanciato da una lista /*listaInAlberoBinario(L,A)*/ vero se L è una lista, A è un albero binario con tutti gli elementi della lista per cui valga la proprietà e sia bilanciato.