Sei sulla pagina 1di 13

Dimostrazione alternativa?

Osservazione
Dimostrazione alternativa `e per induzione su n; per`
o `e resa
complicata dal fatto che n pu`
o assumere solo valori dispari (...)
n pari

10

Dimostrazione di 2)
Propriet`a: h + 1 m 2h , cio`e: m 2h e m
Consideriamo m 2h

h+1

Dimostrazione

Per induzione su h

base: h = 0 ) m = 1: OK
passo induttivo: fissiamo h

0
Hp. induttiva: propriet`a vale 8 albero di altezza h0 h
Consideriamo T di altezza h + 1 1

r"

h1"

T1"

h2"

h+1"

T2"

h+1="max${"h1","h2"}"+"1""(h="max${"h1","h2"}")"

11

Consideriamo m 2h
Dimostrazione (continua)

r"

h1"

T1"

h2"

h+1"

T2"

h+1="max${"h1","h2"}"+"1""(h="max${"h1","h2"}")"

mi = num. foglie in Ti , i = 1, 2 ) m = m1 + m2

m = m1 + m2 (hp.ind.) 2h1 + 2h2 2 2h = 2h+1


m

h + 1: ESERCIZIO PER CASA

Nota
Un albero binario (proprio) ha altezza h 2 (log n) 2 (log m)
12

Esercizio
Dimostrare che in un albero binario T (non necessariamente
proprio) con x nodi interni e y foglie, vale
y x +1

Risoluzione
No induzione
se T `
e proprio ) OK

set T non `
e proprio lo rendo tale aggiungendo foglie:

y ! y0 > y ) y0 = x + 1

13

Esercizio
Dimostrare che se un albero binario T ha x nodi interni e
y = x + 1 foglie allora `e proprio.
Risoluzione
Per assurdo. ESERCIZIO PER CASA

14

Esercizio C-8.28 [GTG]


Sia T un albero dove ciascun nodo interno ha esattamente 3 figli
(albero ternario). Dimostrare che vale m = 2(n m) + 1 dove m=
num. foglie, n= num. totale nodi
(In [GTG]: m = nE , n m = nI )

15

T albero ternario: m = 2(n

m) + 1

Risoluzione
Induzione su h = 0.

base: h = 0 ) OK
passo induttivo: fissiamo h

0
Hp. induttiva: propriet`
a vale 8 albero di altezza h0 h
Consideriamo T di altezza h + 1 1

r"

T1"
m

T3"
T2"

m1 + m 2 + m 3

(hp.ind.)

2(n1 + n2 + n3 + 1)

2(n1

m1 ) + 1 + 2(n2

Ti":""ni"nodi,"mi"foglie","i"=1,2,3"
"
m"="m1"+"m2"+"m3""
"

n"="n1"+"n2"+"n3"+1""

m2 ) + 1 + 2(n3

2(m1 + m2 + m3 ) + 1 = 2(n

ESERCIZIO PER CASA: generalizzare a alberi d-ari

m3 ) + 1
m) + 1

16

Alberi Binari Propri Estremi

h"

"m"="h"+1""
"n""m"="h"

"n"="2h"+1""
"h"="(n+1)/2"

!m!=!2h!
!n!=!2h+1!(!1!!
!n!!m!=!2h(1! !h!=!log2(n+1)!(!1!

2h!

17

Alberi Binari e Espressioni Aritmetiche

Espressione Fully Parenthesized (Notazione Infissa)


.
a = costante o variabile
.
(E1 Op E2 ) = E1 , E2 : espressioni fully parenthesized;
Op: operatore binario
Esempio
((15 + x) (7

(9 3)))

18

Albero binario associato ad una espressione (Parse


Tree)
Definizione
.

nodi foglia = costanti o variabili

nodi interni = operatori

ogni sottoalbero rappresenta una espressione, e la radice `


e

associata al valore dellespressione

Esempio

*"
&"

+"
15"

N.B.: `e un albero binario


proprio

x"

7"

"
9"

3"
19

Se si ammettono operatori unari, lalbero non `e pi`


u proprio
Esempio:
15 (3 + 7)
*"

+"

!"

15"

3"

7"

Osservazione
Nei compilatori
Espressione)
(notazione)
inssa)))

ParseTree)

Sequenza)di)operazioni)
facilmente)calcolabile)a)
run;me)(e.g.,)notazione)
pos?issa))

Type)checking,)veriche,)
oDmizzazioni)

20

Algoritmo per la costruzione del parse tree


A partire dallespressione in notazione infissa E
Algoritmo buildExpression(E )
Input: E = e0 e1 . . . en 1 in notazione infissa, fully parenthesized; ei 2
{variabile/costante; operatore binario; (;){
Output: parse tree T per E
S
pila vuota;
for i
0 to n 1 do
if (ei =variabile/costante) OR (ei =operatore) then
T
albero binario vuoto;
T .addRoot(ei );
S.push(T )
else if ei =) then
T2
S.pop();
.
T
S.pop();
/* T = 1 nodo con operazione */
T1
S.pop();
T .attach(T .root(),T1 ,T2 );
S.push(T );
return S.pop();
21

Osservazioni
T .addRoot(ei ): metodo della classe LinkedBinaryTree che

implementa BinaryTree in [GTG]

T .attach(T .root(),T1 ,T2 ): metodo di LinkedBinaryTree;

attacca T1 e T2 come figli sx e dx di T .root().

Esempio: ((15 + x) (7

(9 3)))
*"
7"

x"

15"

+"

+"

15"

15"

"

*"
+"
15"

15"

x"

3"

9"
*"
+"

+"
x"

PARSE"TREE"

"

15"

*"
15"

x"

*"

+"

"

x"

7"

"
9"

3"

22

Potrebbero piacerti anche