Sunteți pe pagina 1din 28

M.

Caramihai, 2012

STRUCTURI DE DATE & ALGORITMI

CURS 8

Arbori. Arbori binari

Structuri de date si arbori


Listele inlantuite sunt structuri lineare si in general sunt dificil de utilizat in organizarea reprezentarii ierarhice a obiectelor. Cozile si stivele permit reprezentari ierarhice dar au dezavantajul de a fi pe o singura dimensiune. Solutie: structuri de date de tip arbore (format din noduri si arce)

Ce este un arbore ?
Un arbore: model

abstract al unei structuri ierarhice. Un arbore este format din nosuri legate intre ele prin relatii parintecopil Aplicatii:
Scheme organizatorice Sisteme de fisiere

Calculatoare

Vanzari

Manufactura

R&D

EU

International

Laptop

Desktop

Medii de programare

USA

Asia

Canada

Toate nodurile (cu

exceptia unuia singur) are un parinte unic.

Terminologie
Radacina: nod unic fara parinte Nod intern: nod cu cel putin un
A

copil (A, B, C, F) Nod extern: nod fara copil (E, I, J, K, G, H, D) Ascendentii unui nod: parinte, bunic, strabunic, Descendentii unui nod: copil, nepot, etc. Subarbore: un arbore format dintrun nod oarecare si descendentii sai

Subarbore

Recursivitatea arborilor
Un arbore poate fi definit recursiv in felul urmator:: 1. O structura de date fara elemente (goala) reprezinta un arbore gol. 2. Daca t1, t2, , tk sunt arbori disjuncti, atunci structura a carei radacina are ca si copii radacinile lui t1, t2, , tk este de asemenea un arbore 3. Arborii pot fi generati numai prin regulile 1 si 2.

Arbori: Structuri inlantuite


Un nod este

reprezentat de un obiect ce memoreaza:


Element Nod parinte Secventa de noduri

copil

B A C D E F

Structuri de date de tip arbore


Nodurile se Metode de interogare:
boolean isInternal(p) boolean isExternal(p) boolean isRoot(p)

abstractizeaza prin pozitionare Metode generice:


integer size() boolean isEmpty()

Metoda de actualizare

(update):
object replace (p, o)

Iterator elements()
Iterator positions()

Alte metode pot fi

Metode accessor:
position root()

position parent(p)
positionIterator

definite in cadrul structurii de date ce implementeaza arborele

children(p)

Preorder Traversal (PT)


O metoda transversala permite

vizitarea nodurilor unui arbore intro maniera sistematica Prin PT, un nod este vizitat inaintea descendentilor sai. Aplicatie: tiparirea unui document structurat 1 2
1. Motivations

Algorithm preOrder(v) visit(v) for each child w of v preorder (w)

Make Money Fast!

5
2. Methods

9
References

3
1.1 Greed

4
1.2 Avidity

6
2.1 Stock Fraud

7
2.2 Ponzi Scheme

8
2.3 Bank Robbery

Postorder Traversal (PoT)


In PoT, un nod este vizitat

dupa descendentii sai Aplicatie: sa se calculeze spatiul ocupat de fisiere intrun director / subdirectoarele sale.
9 3
Tema de casa/ SDA/

Algorithm postOrder(v) for each child w of v postOrder (w) visit(v)

7
programe/

8
todo.txt 1K

1
h1c.doc 3K

2
h1nc.doc 2K

4
DDR.cpp 10K

5
Stocks.cpp 25K

6
Robot.cpp 20K

Arbori binari (1)


Un arbore binar (AB) este un arbore

cu urmatoarele proprietati: Orice nod interior are maximum 2 descendenti Descendentii unui nod formeaza o pereche ordonata
Descendentii unui nod interior: copil

Aplicatii:
Expresii aritmetice Procese de decizie cautare
A

stanga / dreapta
Definitii recursive ale AB: Un arbore cu un singur nod, sau Un arbore a carui radacina are o
B C

pereche ordonata de descendenti, fiecare dintre ei fiind la randul lui un AB.

Arbori binari (2)


Deoarece in cazul AB toate nodurile trebuie sa

aiba un acelasi numar de descendenti, au fost introduse urmatoarele denumiri:


Nod intern: are doi descendenti Nod extern (frunza): nu are nici un descendent

Arbori binari (3)


Intr-un AB, daca toate nodurile la toate nivelurile (cu exceptia ultimului) au doi descendenti, atunci vor exista 20 noduri la nivel 1 (radacina), 21 noduri la nivel 2, 2i noduri la nivel i+1. In acest caz este vorba de un AB complet (ABC). In ABC, toate nodurile non-terminale vor avea descendenti si toate frunzele (corespunzatoare) vor fi la un acelasi nivel.. Numarul total de noduri in ABC cu k nivele va fi:

1 2 2
nodurinon- terminale

k 2

2
noduriterminale(frunze)

k 1

Expresii aritmetice
AB asociat cu o expresie aritmetica
Nod intern: operatori Nod extern: operanzi

Exemplu: fie urmatoarea expresie aritmetica

implementabila cu ajutorul unui AB: (2 (a 1) (3 b))

2 a 1

Arbore de decizie
AB asociat cu un proces de decizie:
Nod intern: intrebari cu respunsuri DA / NU Nod extern: decizie

Exemplu: micul dejun

Want a fast meal?


Yes

No

How about coffee?


Yes No

On expense account?
Yes No

Starbucks

Wendys

Gotham

Apple

Structuri inlantuite pentru AB


Un nod este reprezentat

de un obiect ce memoreaza:
Element Nod parinte Nod copil stanga

Nod copil dreapta

A
C

D E
C E

AB: reprezentare matriceala


Nodurile sunt stocate intrun vector

1
A

2
B D

fie rank(node) definit in felul urmator:


i.
ii.

iii.

4 rank(root) = 1 if node is the left child of parent(node), rank(node) = 2 rank(parent(node)) if node is the right child of parent(node), rank(node) = 2 rank(parent(node))+1

5
E F

6
C J

10
G H

11

Numarul de noduri
Intr-un AB cu inaltime h trebuie sa existe minimum cate

un nod pe fiecare nivel in acest caz numarul minim de noduri va fi h + 1

Intr-un AB cu inaltime h numarul maxim de noduri va fi:

= 1 + 2 + 4 + 8 + + 2h = 2h+1 - 1

Proprietatile AB
Notatii n numar noduri Proprietati: e n h h e h h

e numar noduri externe i numar noduri interne h inaltime

i 1 2e 1 i (n 1) 2 2h log2 e log2 (n 1)

Structuri de date de tip AB


Un AB extinde o
Metodele aditionale pot fi

structura de tip arbore, i.e., mosteneste toate metodele aferente unui arbore Metode aditionale:
position left(p) position right(p) boolean hasLeft(p)

definite in cadrul structurilor de date ce implementeaza AB

boolean hasRight(p)

Inorder Traversal
Un nod este vizitat dupa

vizitarea subarborele stang si inainte de vizitarea subarborelui drept. Aplicatie: sa se deseneze un AB


x(v) = inorder rank of v y(v) = depth of v

Algorithm inOrder(v) if hasLeft (v) inOrder (left (v)) visit(v) if hasRight (v) inOrder (right (v))
8

2 1 3 4 5 7

Tiparirea expresiilor aritmetice


Specializarea unui inorder traversal
Print operand / operator

cand nodul este vizitat print ( inainte de traversare subarbore stanga print ) inainte de traversare subarbore dreapta

Algorithm printExpression(v) if hasLeft (v) print(() inOrder (left(v)) print(v.element ()) if hasRight (v) inOrder (right(v)) print ()) ((2 1)) (3 b))

(a

Evaluare expresii aritmetice


Specializare unui postorder

traversal
Metoda recursiva ce

intoarce valoarea unui subarbore Cand se viziteaza un nod intern, sunt combinate valorile din subarbore

Algorithm evalExpr(v) if isExternal (v) return v.element () else x evalExpr(leftChild (v)) y evalExpr(rightChild (v)) operator stored at v return x y

2
5 1

Euler Tour Traversal


Metoda generica de traversare a unui AB Cazuri particulare: preorder, postorder si inorder traversals Parcurgerea arborelui se face vizitand fiecare nod de trei ori: La stanga (preorder) Din jos (inorder) La dreapta (postorder)

R B

3 5 1

Cautarea in AB (1)
Complexitatea unei cautari in AB este masurata

in numarul de comparatii facute in cursul procesului de cautare. Acest numar depinde de numarul de nosuri intalnite pe unicul drum ce uneste radacina de nodul destinatie (cautat).
Prin urmare, complexitatea este data de

lungimea drumului + 1.
Ea depinde de forma arborelui si de pozitia

nodului destinatie in cadrul arborelui.

Cautarea in AB (2)
Lungimea drumului intern (internal path length, IPL) este data de suma lungimilor drumurilor la toate drumurile, i.e. (i-1)li pentru toate nivelele i, unde li reprezinta numarul de noduri de la nivelul i.
Lungimea medie a drumului (intern) = IPL/n

In cazul cel mai nefavorabil, in care arborele devine o lista inlantuita:

pathworst

1 n

n i 1 (i

1)

n 1 O ( n) 2

Cautarea in ABC (1)


IPL pentru cazul cel mai bun < IPL al unui ABC cu o aceeasi lungime Prin urmare, se aproximeaza average path length pentru cazul cel mai bun prin average path length al unui ABC cu o aceeasi inaltime, h. Pentru ABC cu inaltimea h, IPL=
h 1 i 1 (i

2i )

(h 2) 2 h

Cautarea in ABC (2)


Numarul total de noduri in ABC cu inaltimea este n=2h-1. Prin urmare,
pathbest IPLcomplete n ( h 2) 2 h 2 2h 1 h 2 log 2 (n 1) 2

O(pathbest) = O(logn)

Cazul mediu se gaseste undeva intre (n-1)/2 si log(n+1)-2.


Intrebare: in cautarea unui nod (aflat intro pozitie medie) intrun arbore, rezultatul va fi mai aproape de O(n) sau de O(logn) ?