sd_curs-05

38
Curs 5 – conținut • arbori • arbori binari (ArbBin) Structuri de date 2013 - 2014 1 • aplicaţie: reprezentarea expresiilor ca arbori

description

APA

Transcript of sd_curs-05

Page 1: sd_curs-05

Curs 5 – conținut

• arbori

• arbori binari (ArbBin)

Structuri de date 2013 - 2014 1

• aplicaţie: reprezentarea expresiilor ca arbori

Page 2: sd_curs-05

Arbori

• Model abstract pentru structuri ierarhice;

• Un arbore este format din noduri legate printr-o relație părinte-copil– A = (N, P)

• N mulțimea de noduri;1

• N mulțimea de noduri;• P relație binară peste N,

(“părintele lui”);• r N, nod rădăcină.

– un singur drum de la x la r

– , x are un singur părinte.

Structuri de date 2013 - 2014 2

∃∈∀ ,Nx

}{rNx −∈∀

6

42 3

875

109

Page 3: sd_curs-05

Arbori – aplicații

• Arbori genealogici;

• Colecții de carți în biblioteci;

• Organizarea fișierelor;

• Medii de programare.

Structuri de date 2013 - 2014 3

Page 4: sd_curs-05

Arbori genealogici

Structuri de date 2013 - 2014 4

Page 5: sd_curs-05

Arbori de decizie

≤5?

≤7?≤3?

≤2? ≤4? ≤8?≤6?

Structuri de date 2013 - 2014 5

≤2?

≤1?

≤4?

=3?

≤8?≤6?

=4? =5? =6? =7? =8? =9?

=2?=1?

1 2 3 4 5 6 7 8 9

Page 6: sd_curs-05

Arbori sintactici

+ +

* *a a

Structuri de date 2013 - 2014 6

*

/

a

c b

c d

a

a

(a + c * b) - (a + c / d * a)

Page 7: sd_curs-05

Arbori pătratici

toată imaginea neagră:toată imaginea albă:

altfel:

Structuri de date 2013 - 2014 7

Page 8: sd_curs-05

Arbori: definiție recursivă

Λ

= arbori ,...,element, }),,...,{,(

vid,arborele ,

11 kkAArAAr

A

sau Λ=Ar

Structuri de date 2013 - 2014 8

1A

2A

kA

. . .

Dacă A este ordonat (planar), atunci

Page 9: sd_curs-05

Arbori: terminologie

• Rădăcina: nodul fără părinte

• Nod intern: nod cu cel puțin un fiu

• Nod extern (frunză): nod fără fii

• Descendenții unui nod: fii, nepoți, etc

• Frații unui nod: toate celelalte noduri având același părinte

• Subarbore: arbore format dintr-un nod și descendenții săi

Structuri de date 2013 - 2014 9

subarbore

Page 10: sd_curs-05

Arbori: terminologie

• Adâncimea unui nod x: numărul de noduri de la rădăcină la x

+=

contrar cazîn )),ărinte(adâncime(p1

radacina este dacă ,0)(adâncime

x

x

x

0• Înălțimea unui arbore: adâncimea maximă a nodurilor arborelui

• Înălțimea unui nod x: distanța de la x la cel mai depărtat descendent al său

Structuri de date 2013 - 2014 10

0

1

2

3

Page 11: sd_curs-05

Tipul de date abstract ArbBin

�obiecte : arbori binari• un arbore binar este o colecţie de noduri cu

proprietăţile:

1.orice nod are 0, 1 sau 2 succesori (fii, copii)

Structuri de date 2013 - 2014 11

2.orice nod, exceptând unul singur – rădăcina, are un singur nod predecesor (tatăl, părintele)

3.rădăcina nu are predecesori

4.fiii sunt ordonaţi: fiul stâng, fiul drept (daca un nod are un singur fiu, trebuie menţionat care)

5.nodurile fără fii formează frontiera arborelui

Page 12: sd_curs-05

Arbori binari: exempluC

DMK A

E G

rădăcină

fiu stâng fiu drept

Structuri de date 2013 - 2014 12

DMK A

IFL

H

B

subarbore stâng

Page 13: sd_curs-05

Arbori binari: definiţia recursivă:– arborele cu nici un nod (vid) este arbore binar

– daca v este un nod şi t1, t2 sunt arbori binari atunci arborele care are pe v ca rădăcină, t1 subarbore stâng al rădăcinii şi t2 subarbore drept al rădăcinii, este arbore binar

v

Structuri de date 2013 - 2014 13

t2t1

v

Page 14: sd_curs-05

Arbori binari: proprietăți

• Notații

– numărul de noduri

– numărul de noduri externe

– numărul de noduri interne

– înălțimea

n

en

in

h– înălțimea

Structuri de date 2013 - 2014 14

h

1211−≤≤+

+hnh

11)1(log2

−≤≤−+ nhn

h

en 21 ≤≤

12 −≤≤h

inh

Page 15: sd_curs-05

Arbori binari: proprietăți

• Arbore propriu: fiecare nod intern are exact doi fii

1211−≤≤+

+hnh

2/)1(1)1(log2

−≤≤−+ nhn

h

enh 21 ≤≤+

12 −≤≤h

inh

1+=ienn

• Arbore complet: arbore propriu în care frunzele au aceeași adâncime

Structuri de date 2013 - 2014 15

noduri 2 are niveluli

i

12121

−=−=+

e

hnn

Page 16: sd_curs-05

ArbBin: operaţii

• insereaza()

–intrare:

•un arbore binar t

•adresa unui nod cu cel mult un fiu (tatăl noului nod)

Structuri de date 2013 - 2014 16

noului nod)

• tipul fiului adăugat (stânga, dreapta)

• informaţia e din noul nod

–ieşire

•arborele la care s-a adăugat un nod ce memorează e; noul nod nu are fii

Page 17: sd_curs-05

ArbBin: inserareC

DMK A

E G

Structuri de date 2013 - 2014 17

DMK A

IFL

H

BX

Y

Page 18: sd_curs-05

ArbBin: eliminare

• elimina()

–intrare:

•un arbore binar t

•adresa unui nod fără fii şi adresa

Structuri de date 2013 - 2014 18

•adresa unui nod fără fii şi adresa nodului-tată

–ieşire

•arborele din care s-a eliminat nodul dat (de pe frontieră)

Page 19: sd_curs-05

ArbBin: eliminareC

DMK A

E G

Structuri de date 2013 - 2014 19

L

DMK A

IF

H

B

Page 20: sd_curs-05

ArbBin :parcurgere preordine

• parcurgePreordine()

– intrare• un arbore binar t

• o procedură viziteaza()

Structuri de date 2013 - 2014 20

• o procedură viziteaza()

– ieşire• arborele binar t dar cu nodurile procesate cu viziteaza()în ordinea:

– rădăcina (R)

– subarborele stânga (S)

– subarborele dreapta (D)

Page 21: sd_curs-05

ArbBin :parcurgere preordine -

exempluC

DMK A

E G

Structuri de date 2013 - 2014 21

L

DMK A

IF

H

B

C, E, K, B, H, A, L, F, G, M, D, I

Page 22: sd_curs-05

ArbBin:parcurgere inordine

• parcurgeInordine()

– intrare• un arbore binar t

Structuri de date 2013 - 2014 22

• un arbore binar t

• o procedură viziteaza()

– ieşire• arborele binar t dar cu nodurile procesate cu viziteaza()în ordinea S R D

Page 23: sd_curs-05

Parcurgere inordine - exemplu

C

DMK A

E G

Structuri de date 2013 - 2014 23

L

DMK A

IF

H

B

K, H, B, E, L, A, F, C, M, G, I, D

Page 24: sd_curs-05

ArbBin: parcurgere postordine

• parcurgePostordine()

– intrare• un arbore binar t

Structuri de date 2013 - 2014 24

• un arbore binar t

• o procedură viziteaza()

– ieşire• arborele binar t dar cu nodurile procesate cu viziteaza()în ordinea S D R

Page 25: sd_curs-05

Parcurgere postordine - exemplu

C

DMK A

E G

Structuri de date 2013 - 2014 25

L

DMK A

IF

H

B

K,H, B, E,L, A,F, CM, G,I, D,

Page 26: sd_curs-05

ArbBin: parcurgere BFS

• parcurgeBFS() - Breadth-first search

– intrare• un arbore binar t

• o procedură viziteaza()

Structuri de date 2013 - 2014 26

• o procedură viziteaza()

– ieşire• arborele binar t dar cu nodurile procesate cu viziteaza()în ordinea BFS (pe niveluri)

Page 27: sd_curs-05

Parcurgere BFS - exemplu

C

DMK A

E G

Structuri de date 2013 - 2014 27

L

DMK A

IF

H

B

C, E, G, K, A, M, D, B, L, F, I, H

Page 28: sd_curs-05

ArbBin: implementare cu structuri

înlănţuite• reprezentarea obiectelor

A

C

E G

Structuri de date 2013 - 2014 28

B

H

KA

L F

D

I

M

Page 29: sd_curs-05

ArbBin: structura unui nod

• un nod v (aflat la adresa v) este o structură cu trei câmpuri:

/*informaţia memorata în nod*/

Structuri de date 2013 - 2014 29

– v->inf /*informaţia memorata în nod*/

– v->stg /*adresa fiului stânga*/

– v->drp /*adresa fiului dreapta*/

Page 30: sd_curs-05

ArbBin: parcurgePreordine()

procedure parcurgePreordine(v, viziteza)

begin

if (v = NULL)

then return

Structuri de date 2013 - 2014 30

then return

else viziteaza(v)

parcurgePreordine(v->stg, viziteaza)

parcurgePreordine(v->drp, viziteaza)

end

Page 31: sd_curs-05

ArbBin: implementarea parcurgerii BFS

C

E G

Structuri de date 2013 - 2014 31

DMK A

Coada = C( E G K A M D )

Page 32: sd_curs-05

ArbBin: implementarea parcurgerii BFS

procedure parcurgeBFS(t, viziteza)

begin

if (t = NULL)

then return

else

Coada ← coadaVida()

insereaza(Coada, t)

while (not esteVida(Coada))

Structuri de date 2013 - 2014 32

while (not esteVida(Coada))

citeste(Coada, v)

viziteaza(v)

if (v→stg ≠ NULL)

then insereaza(Coada, v->stg)

if (v→drp ≠ NULL)

then insereaza(Coada, v->drp)

elimina(Coada)

end

Page 33: sd_curs-05

ArbBin: implementarea cu liste

• Reprezentarea relației “părinte”: tablou de părinți

• Avantaje:– Simplitate;

A

KJC E

B D

0

21

6543– Simplitate;

– Acces ușor de la un nod spre rădăcină;

– Economie de memorie;

• Inconveniente:

– Acces dificil de la rădăcină spre noduri

Structuri de date 2013 - 2014 33

-1 0 0 1 1 2 2 4 4 5

0 1 2 3 4 5 6 7 8 9

KJC E

M WN

65

987

3

Page 34: sd_curs-05

ArbBin:implementare cu tablouri

• Nodurile sunt memorate într-un tablou.

• Indexul unui nod este– index(rădăcină) = 0

– index(x) = 2*index(părinte(x))+1,

A

B D

0

21

6543– index(x) = 2*index(părinte(x))+1,

dacă x este fiu stâng

– index(x) = 2*index(părinte(x))+2, dacă x este fiu drept

Structuri de date 2013 - 2014 34

KJC E

M WN

A B D C E J K M N w

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

6543

12109

Page 35: sd_curs-05

Aplicaţie: expresii întregi

• Expresii întregi

– definiţie

– exemple

• Reprezentarea expresiilor ca arbori

Structuri de date 2013 - 2014 35

– similarităţi între cele două definiţii

– arborele asociat unei expresii

– notaţiile prefixate, infixate şi postfixate şi parcurgeri ale arborilor

Page 36: sd_curs-05

Definiţia expresiilor întregi<int> ::= ... –2 | -1 | 0 | 1 | 2 ...

<expr_int> ::= <int>

| <exp_int> <op_bin> <exp_int>

| (<exp_int>)

<op_bin> ::= + | − | * | / | %

Structuri de date 2013 - 2014 36

• reguli de precedenţă12-5*2 este (12-5)*2 sau 12-(5*2)?

• reguli de asociere 15/4/2 este (15/4)/2 sau 15/(4/2)?

15/4*2 este (15/4)*2 sau 15/(4*2)?

Page 37: sd_curs-05

Expresiile reprezentate ca arbori

-12 + 17 * 5 – (43 + 34 / 21 * 66)

+ +

Structuri de date 2013 - 2014 37

* *

/

-12

17 5

34 21

66

43

Page 38: sd_curs-05

Notaţiile postfixate şi prefixate

• notaţia postfixată se obţine prin parcurge postordine-12, 17, 5, *, +, 43, 34, 21, /, 66, *, +, -

• notaţia prefixata se obţine prin parcurge preordine-, +, -12, *, 17, 5, +, 43, *, /, 34, 21, 66

Structuri de date 2013 - 2014 38

+ +

* *

/

-12

17 5

34 21

66

43