320 likes | 494 Views
Gli alberi. E' un tipo di dato astratto che rappresenta relazioni gerarchiche tra oggetti Le relazioni esplicate sono tra: genitori figli fratelli Radice, foglie Alberi binari, N-ari. Gli alberi binari. Ogni nodo ha al massimo 2 figli Sui figli è definito un ordinamento
E N D
Gli alberi • E' un tipo di dato astratto che rappresenta relazioni gerarchiche tra oggetti • Le relazioni esplicate sono tra: • genitori • figli • fratelli • Radice, foglie • Alberi binari, N-ari Fondamenti di Informatica
Gli alberi binari • Ogni nodo ha al massimo 2 figli • Sui figli è definito un ordinamento • Ogni figlio può essere la radice di un nuovo albero binario • Vantaggio: migliorare l'efficenza della visita di una lista Fondamenti di Informatica
Gli alberi binari • Metodi: • test_albero_vuoto: alb_bin boolean • costruisci: alb_bin x nodo x alb_bin alb_bin • radice: alb_bin nodo • sinistro: alb_bin alb_bin • destro: alb_bin alb_bin Fondamenti di Informatica
Gli alberi binari • Algoritmi di visita: • visita in preordine (ABCD) • visita in postordine(BDECA) • visita simmetrica(BADCE) A B C D E Fondamenti di Informatica
Alberi binari: rappr. sequenziale • Utilizza array di lunghezza predefinita • radice in prima posizione • figli in posizione (2i) e (2i+1) • Alberi completi • Per gli alberi non completi serve un tag booleano che indica se il nodo esiste Fondamenti di Informatica
Alberi binari: rappr. sequenziale 1 A true 2 B true A 3 C true 4 0 false B C 5 0 false 6 D true D E 7 E true Fondamenti di Informatica
Alberi binari: rappr. sequenziale • Svantaggi: • utilizzo elevato memoria • operazioni in inserimento complesse (richiedono spostamenti nell'array) • Vantaggi: • accesso semplice (anche per elementi ad una specifica profondità) Fondamenti di Informatica
Alberi binari:rappresentazione collegata • Ogni elemento della lista contiene: • un atomo (la radice dell'albero) • una lista (sottoalbero sinistro) • una lista (sottoalbero destro) ( A (B () () ) ( C (D () () ) (E () () ) ) ) Fondamenti di Informatica
Alberi binari:rappr. collegata mediante array • Array a tre valori: • indice sottoalbero sinistro • valore del nodo • indice sottoalbero destro • Serve una variabile inizio per definire l'indice della radice all'interno dell'array Fondamenti di Informatica
Alberi binari:rappr. collegata mediante array 1 0 D 0 A 2 5 A 3 3 1 C 6 B C 4 0 0 0 5 0 B 0 6 0 E 0 D E Inizio = 2 Fondamenti di Informatica
Alberi binari: rappr.collegata mediante puntatori • Ogni nodo viene rappresentato con tre campi: • l'informazione associata al nodo • un puntatore al sottoalbero di sinistra • un puntatore al sottoalbero di destra Fondamenti di Informatica
Alberi binari: rappr. collegata mediante puntatori A A 0 B 0 B C C D E 0 D 0 0 E 0 Fondamenti di Informatica
Esercizio • Data in ingresso una rappresentazione parentetica di un albero, generare l'albero corrispondente utilizzando la rappresentazione collegata sia mediante array che mediante puntatori Fondamenti di Informatica
Alberi binari di ricerca • Problema: • memorizzare grosse quantità di dati soggetti a frequenti operazioni di ricerca • Soluzione: • utilizzo di alberi di ricerca in cui il valore di un nodo è per definizione maggiore o uguale di quello dei nodi del sottoalbero sx, e minore del sottoalbero dx Fondamenti di Informatica
Alberi binari di ricerca • Vantaggi: • minor complessità • Requisiti: • profondità ridotta dell'albero • alberi bilanciati • bilanciamento dell'albero Fondamenti di Informatica
Alberi n-ari • Non hanno limiti sul numero di figli • Generalmente: • visita solo preordine e postordine • rappresentazione mediante lista • rappresentazione mediante albero binario (miglior sfruttamento della memoria) • rappresentazioni tramate(per ottimizzare certe operazioni) Fondamenti di Informatica
I grafi • Strutture che rappresentano relazioni binarie su un insieme di elementi (grafi orientati) • E' necessario definire politiche di visita (in presenza di cicli è possibile raggiungere nodi già visitati; serve un tag di visita) Fondamenti di Informatica
Visita in profondità di un grafo Depth first serach: analoga alla visita in preordine 1 3 4 6 5 7 2 2 1 3 4 7 6 5 Fondamenti di Informatica
Visita in ampiezza di un grafo Breadth first serach: analoga alla visita in postordine 7 5 6 4 2 3 1 2 1 3 4 7 6 5 Fondamenti di Informatica
Rappresentazione dei grafi • Per rappresentare un grafo esistono diverse possibilità: • matrice delle adiacenze • liste dei successori • lista doppia Fondamenti di Informatica
Matrice delle adiacenze • La matrice è così definita: • tante righe e colonne quanti sono i nodi del grafo • gli elementi della matrice sono di tipo booleano • il generico elemento ei,j è definito: • true, se esiste un arco tra il nodo i e il nodo j • false, altrimenti Fondamenti di Informatica
2 1 3 4 7 5 6 Matrice delle adiacenze 1 2 3 4 5 6 7 1 0 0 1 0 0 0 0 2 1 0 1 0 0 0 0 3 0 1 0 1 0 0 0 4 0 0 0 0 0 1 1 5 0 0 0 0 0 0 0 6 0 0 1 1 1 0 0 7 1 0 0 0 0 0 0 Fondamenti di Informatica
S A E V K P R Matrice delle adiacenze • Se i valori dei nodi non sono numerici, serve una corrispondenza tra nodi (ad es. stringhe) con gli indici • "Vettore dei nodi" A S R V K P E 1 2 3 4 5 6 7 Fondamenti di Informatica
Matrice delle adiacenze • Se anche gli archi sono etichettati, gli elementi della matrice non saranno booleani, ma del tipo usato per le etichette Fondamenti di Informatica
Matrice delle adiacenze • Vantaggi: • semplice • accesso diretto alle informazioni sugli archi (meccanismi di accesso ad una matrice) • Svantaggi: • numero massimo di nodi del grafo • occupazione in memoria pari a N2 • l'analisi di un nodo richiede una scansione Fondamenti di Informatica
Matrice delle adiacenze:rappresentazione compatta • Generalmente la matrice delle adiacenze è sparsa, quindi si può usare: • la rappresentazione compatta usata per le matrici sparse • una nuova rappresentazione che evidenzia solo gli archi nodo di part: 1 2 2 3 3 4 4 6 6 6 7 nodo di arr: 3 1 3 2 4 6 7 3 4 5 1 Fondamenti di Informatica
Liste di successori • Si associa ad ogni nodo una lista semplice, realizzata mediante rappresentazione collegata • In ogni lista si memorizza l'insieme dei successori del nodo senza un ordinamento particolare • I nodi sono in corrispondenza con gli archi per cui si possono memorizzare anche evenuali etichette Fondamenti di Informatica
2 1 3 4 7 5 6 Liste di successori 1 3 0 2 1 3 0 3 2 4 0 4 6 7 0 5 0 6 3 4 5 0 7 1 0 Fondamenti di Informatica
Liste di successori • Vantaggi: • migliore occupazione della memoria: proporzionale a N+M • più efficiente determinare la lista dei successori • Svantaggi: • verifica di un arco tra i e j è poco agevole • l'utilizzo di un vettore per le info sui nodi Fondamenti di Informatica
Liste doppie • Si utilizza una lista per memorizzare le informazioni dei nodi • Vantaggi: • il numero di nodi non ha un limite massimo • Svantaggi: • l'accesso ai nodi è più complesso Fondamenti di Informatica
Percorso minimo in un grafo • Problema: • dato un grafo con archi etichettati con valore interi positivi, si trovi il percorso più breve tra due nodi • Soluzione: • proposta da Dijkstra Fondamenti di Informatica