• Non ci sono risultati.

Patrizia Scandurra patrizia.scandurra@unibg.it

N/A
N/A
Protected

Academic year: 2021

Condividi "Patrizia Scandurra patrizia.scandurra@unibg.it"

Copied!
6
0
0

Testo completo

(1)

EXE su strutture dati elementari (alberi binari)

INFORMATICA III

Parte B - Progettazione e Algoritmi

Patrizia Scandurra patrizia.scandurra@unibg.it

Università degli Studi di Bergamo a.a. 2011-12

(2)

Alberi binari

Descrizione ricorsiva

• Molti algoritmi su alberi binari possono essere descritti in modo naturale sfruttando la definizione ricorsiva:

– Caso base - albero vuoto;

– Clausola ricorsiva - due chiamate ricorsive, una per ogni sotto- albero

• Esempio: Vedi i metodi numNodi() e numNodi(NodoBinario r) nell’’implementazione in Java del tipo albero binario

– Lezione3 sul sito del corso al link:

http://cs.unibg.it/scandurra/material/INF3B_1112/lezione3.zip

2

(3)

Esercizi (parte 1)

Arricchire l’interfaccia AlberoBinario e la classe AlberoBinarioImpl con le seguenti operazioni usando (dove possibile) la ricorsione:

a. public int altezza(); restituisce l’altezza di un albero binario

b. public in numFoglie(); restituisce il numero di foglie di un albero binario

c. public int numNodiInterni(); restituisce il numero di nodi interni di un albero binario; ricorda che un nodo interno è un nodo che NON è foglia.

d. public boolean isBalanced(); restituisce true se e solo se l'albero binario è perfettamente bilanciato. Un albero binario è perfettamente bilanciato se per ogni nodo n, detti sa e da le altezze rispettivamente del sottoalbero sinistro e destro, vale sa = da.

e. public boolean search (Object elem); stabilisce se un elemento appartiene o meno ad un dato albero binario, attraverso una visita esaustiva ricorsiva. Il caso base è banale: se l'albero è vuoto, si restituisce false (zero). La visita viene interrotta non appena si trova l'elemento cercato (la prima occorrenza).

f. public Comparable max(); restituisce il massimo tra gli oggetti contenuti nell'albero, assumendo che l'albero non sia vuoto e che tutti gli oggetti in esso

(4)

Ricerca del massimo elemento in una collezione

Pseudocodice:

max(A) //La collezione è un array A

max = A[1] //variabile temp. per il max corrente for i=2 to A.lenght do

if A[i]>max //Istruzione dominante: confronto max = A[i]

return max;

4

Similmente per la ricerca del minimo elemento: min(A)

Tempo esecuzione (num. confronti)= n-1 = Θ Θ Θ Θ (n)

(5)

Ricerca del massimo e del minimo in una collezione

Per ricercare sia il max che il min, minmax(A):

1. Primo modo: come in max(A) confrontando ogni elemento sia con il max che con il min

Tempo (num. confronti)= 2(n-1) =

Θ Θ Θ Θ

(n)

2. Secondo modo: ricerca simultanea del max e del min esaminando gli elementi in coppia:

• Per ogni coppia (x,y) della collezione,

confrontiamo x con y, e poi il più piccolo min(x,y)

con il min corrente ed il più grande max(x,y) con il max corrente, al costo di 3 confronti (piuttosto che 4) ogni 2

(6)

Esercizio (parte 2)

Arricchire l’interfaccia AlberoBinario e la classe AlberoBinarioImpl con la seguente operazione:

• public … minmax(…);

che restituisce il massimo ed il minimo (come riferimenti ad oggetti Comparable) tra gli oggetti contenuti nell'albero, assumendo che l'albero non sia vuoto e che tutti gli oggetti in esso contenuti implementino l'interfaccia Comparable.

6

Riferimenti

Documenti correlati

Un arco che attraversa un taglio si dice leggero se ha peso pari al minimo tra i pesi di tutti gli archi che attraversano tale taglio..

public boolean isCompleto(); restituisce true se e solo se l'albero è completo ovvero se: ogni nodo interno ha esattamente 2 figli, e tutte le foglie hanno la. stessa

che restituisce il massimo ed il minimo (come riferimenti ad oggetti Comparable) tra gli oggetti contenuti nell'albero, assumendo che l'albero non sia vuoto e che tutti gli oggetti

– Valutazione della modellazione agile: uso di UML per la modellazione dei casi d’uso (requisiti funzionali), per il design dell’architettura (diagramma delle componenti e

– Hashtable(int initialCapacity ): Constructs a new, empty hashtable with the specified initial capacity and default load factor (0.75).. – Hashtable(int initialCapacity,

CORSI DI LAUREA MAGISTRALE IN SCIENZE STORICHE E IN SCIENZE DEL GOVERNO CORSI DI LAUREA TRIENNALE IN STORIA, IN SCIENZE POLITICHE E SOCIALI E IN BENI CULTURALI. DOTTORATO IN

Piuttosto che duplicare 1000 volte il codice macchina di un oggetto il sistema che si occupa di istanziare gli oggetti carica un’unica copia in memoria del codice macchina comune

quando viene istanziato da un altro oggetto della stessa classe. l’argomento è una reference ad un