Logo dell'Università di Catania: Siciliae Studium Generale 1434 Logo del Centro IPPARI, Programmazione
matite e gomma
Loghi istituzionali: Siciliae Studium Generale 1434, Centro ricerche IPPARI, Università di Catania, Facoltà di Scienze Matematiche, Fisiche, Naturali, Insegnamento di Programmazione

Algoritmi ricorsivi su alberi binari e su grafi

Lezione 23 di Programmazione 2

Docente: Giuseppe Scollo

Università di Catania, sede di Comiso (RG)
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Studi in Informatica applicata, AA 2007-8

Logo di Conformità WCAG-1 di Livello Tripla A, W3C-WAI Web Content Accessibility Guidelines 1.0 Validazione XHTML 1.0 Validazione CSS 2

Indice

  1. Algoritmi ricorsivi su alberi binari e su grafi
  2. attraversamento ricorsivo di alberi
  3. attraversamento preordine non ricorsivo
  4. attraversamento per livelli non ricorsivo
  5. costruzione di tornei
  6. alberi binari di ricerca
  7. attraversamento di grafi
  8. esercizi

attraversamento ricorsivo di alberi

attraversamento di un albero: visita (l'informazione associata a) tutti i vertici dell'albero

per gli alberi binari, si hanno tre discipline di visita ricorsiva, cioè basate sulla struttura ricorsiva dell'albero:

definizione ricorsiva di funzione di attraversamento in preordine (btree* = btlink):

per ottenere da questa le analoghe definizioni per le altre due discipline ricorsive di attraversamento basta spostare opportunamente l'invocazione di visita(h)

attraversamento preordine non ricorsivo

le tre discipline di visita ricorsiva di alberi binari danno soluzioni a svariati problemi

le suddette discipline di visita possono essere realizzate anche con algoritmi non ricorsivi, impiegando una pila

attraversamento per livelli non ricorsivo

nessuna delle tre suddette discipline di visita è adeguata al caso in cui si voglia attraversare un albero binario facendo procedere assieme gli attraversamenti dei suoi sottoalberi

è notevole il fatto che un algoritmo a tal scopo si può ottenere da quello non ricorsivo di attraversamento preordine, semplicemente adoperando una coda in luogo della pila, con le corrispondenti operazioni di inserimento e rimozione, dove l'ordine degli inserimenti coincide stavolta con quello della successiva visita, per via della disciplina FIFO

costruzione di tornei

è frequente la costruzione esplicita di alberi binari in algoritmi ricorsivi divide et impera

riconsideriamo ad es. il problema della ricerca del massimo fra gli elementi di un array di interi, proposto nella lezione 20: vediamone ora una soluzione basata sulla costruzione di un torneo:

l'algoritmo è simile a quello già visto nella lezione 20, eccetto che la soluzione è qui prodotta dalla funzione ricorsiva di costruzione del torneo su (una parte de)gli elementi dell'array, che restituisce un puntatore alla radice del torneo costruito

alberi binari di ricerca

un torneo è un caso particolare di una struttura dati molto utile per la realizzazione di efficienti algoritmi di ricerca su insiemi ordinati:

è facile intuire come, ad es., l'algoritmo di ricerca binaria di un elemento in un array ordinato possa tradursi in un algoritmo di ricerca in un BST

attraversamento di grafi

concludiamo con dei cenni sulla generalizzazione degli algoritmi (ricorsivi e non) visti per l'attraversamento di alberi binari all'attraversamento di grafi, ad es. rappresentati da liste di adiacenza

si possono distinguere due discipline di attraversamento:

analogamente al caso degli alberi, per i grafi:

esercizi

  1. definire una funzione non ricorsiva per l'attraversamento postordine di un albero binario, adoperando una pila
  2. definire una funzione non ricorsiva per l'attraversamento inordine di un albero binario, adoperando una pila
  3. esercizio 5.81 del testo (Sedgewick, 2003), p.250: mostrare che, se una foresta è rappresentata da un albero binario secondo la corrispondenza biunivoca indicata nella lezione precedente, l'attraversamento preordine della foresta si realizza con l'attraversamento preordine dell'albero binario, mentre quello postordine della foresta si realizza con quello inordine dell'albero binario
  4. esercizi 5.88 e 5.89 del testo (Sedgewick, 2003), p. 256: definire una funzione ricorsiva che calcoli la lunghezza del cammino interno di un albero binario, e determinare per induzione il numero di invocazioni ricorsive effettuate a seguito della sua prima invocazione (inclusa nel numero)
  5. definire una funzione ricorsiva che rimuova da un torneo tutti i vertici che contengono un elemento di valore inferiore a un valore dato, con rilascio della memoria ad essi allocata
  6. esercizio 5.98 del testo (Sedgewick, 2003), p. 262: definire una funzione non ricorsiva, basata sull'uso di una pila, per l'attraversamento in profondità di un grafo rappresentato da liste di adiacenza