Professional Documents
Culture Documents
IR2ASP
Stabla
Zadatak 1
• Binarno stablo:
– (izlazni) stepen čvorova je 2:
svaki čvor ima najviše 2 direktna potomka
– veoma često korišćeno stablo
Elektrotehnički fakultet, 2
Beograd
Rešenje
A B C D E F
• Bez stabla:
1. postavi brojač na 0
2. pristupi prvom čvoru liste
3. povećaj brojač za 1 i proveri da li je brojač = k
4. ako nije pređi na sledeći element liste i pređi na korak 3
Elektrotehnički fakultet, 3
Beograd
Rešenje
A B C D E F
4 Da bi pristup nekom
elementu stabla (liste)
bio efikasan, stablo treba
formirati tako da njegova
2 1 dubina bude najmanja
moguća.
Elektrotehnički fakultet, 4
Beograd
Rešenje
4 FIND(root, k)
r=k
p = root
while (left(p) nil or right(p) nil) do
2 1 if (r lcount(p)) then
p = left(p)
else
1 1 E F r = r – lcount(p)
p = right(p)
end_if
A B C D end_while
return p
Elektrotehnički fakultet, 5
Beograd
Zadatak 2 – Stablo odlučivanja
Neka je dato osam novčića a, b, c, d, e, f, g i h od kojih je
jedan lažan i ima različitu težinu od drugih. Na
raspolaganju je vaga (terazije), a potrebno je odrediti koji
je novčić lažan i da li je lakši ili teži od ostalih uz
minimalan broj merenja. Optimalan proces odlučivanja
realizovati u vidu stabla.
Elektrotehnički fakultet, 6
Beograd
Rešenje
a+b+c ? d+e+f
> = <
a+d ? b+e g?h a+d ? b+e
> = < > < > = <
a?b c?f b?a g?a h?a a?b f ?c b?a
> = > = > = > = > = > = > = > =
a+ e- c+ f- b+ d- g+ h- h+ g- b- d+ c- f+ a- e+
Pitanje: zašto se u drugom merenju, ako težine levog i desnog tasa nisu iste,
zamenjuju mesta novčićima b i d?
Elektrotehnički fakultet, 7
Beograd
Zadatak 3 – Stablo odlučivanja
Prikazati deo stabla za igru krstića i kružića “X-OX” (tic-tac-toe).
Elektrotehnički fakultet, 8
Beograd
Rešenje
ig ra X
0 – neodređen pobednik
0 1 – pobednik “X”
-1 – pobednik “O”
x o x x o x x x x
x x o x x o o x o
o x o o x o o x o
0 0 1
Elektrotehnički fakultet, 9
Beograd
Zadatak 4 – Stablo odlučivanja
Elektrotehnički fakultet, 10
Beograd
||||| ||||
Rešenje 1 |||
|
||
...
Stablo odlučivanja ||||| |||| ||||| |||| ||||
je slično kao kod 2 ||| || ||| | ... ||| ||
| |
igre X-OX. ... ...
... ... ... ... ...
Može da se koristi
minimax metoda.
Elektrotehnički fakultet, 12
Beograd
Zadatak 6
Šta je preorder, a šta inorder obilazak stabla? Ako za jedno
binarno stablo preorder obilazak daje poredak
ATNEIFCSBDGPMLK, a inorder obilazak daje poredak
EINSCFBTGPDLMKA, rekonstruisati izgled ovog stabla i
objasniti postupak.
Elektrotehnički fakultet, 13
Beograd
Rešenje A
Preorder B E
1. Poseti se koren
2. Obiđe se levo podstablo na preorder način
C D F
3. Obiđe se desno podstablo na preorder način
ABCDEF
Inorder Prvi čvor je koren
1. Obiđe se levo podstablo na inorder način
2. Poseti se koren
3. Obiđe se desno podstablo na inorder način Prvi čvor je “najlevlji”
čvor u stablu
CBDAEF
Postorder
1. Obiđe se levo podstablo na postorder način
2. Obiđe se desno podstablo na postorder način
3. Poseti se koren Poslednji čvor je koren
CDBFEA
Elektrotehnički fakultet, 14
Beograd
Rešenje A
preorder: ATNEIFCSBDGPMLK T
inorder: EINSCFBTGPDLMKA
N D
E M
F G
I C B P L K
S
Početak rekonstrukcije stabla:
- prvi čvor, E, u inorder poretku je “najlevlji” čvor stabla. Prati se preorder poredak
sve dok se ne dođe do čvora E: A-T-N-E. Sigurno je da je T levi potomak čvora
A, N, levi potomak čvora T i E levi potomak čvora N.
- u inorder poretku, pre čvora N dolazi čvor I – iz toga se zaključuje da je I desni
potomak čvora E.
Elektrotehnički fakultet, 15
Beograd
Zadatak 7
Šta je inorder, a šta postorder obilazak stabla? Ako za
jedno binarno stablo inorder obilazak daje poredak
JBLAEDKCHFGI, a postorder obilazak daje poredak
JLBEKDHIGFCA, rekonstruisati izgled ovog stabla i
objasniti postupak.
Postorder
1. Obiđe se levo podstablo na postorder način A
2. Obiđe se desno podstablo na postorder
način
3. Poseti se koren B C
J L D F
E K H G
I
Elektrotehnički fakultet, 16
Beograd
Zadatak 8
Napisati proceduru koja prikazuje iterativnu realizaciju inorder
obilaska binarnog stabla.
INORDER-I(root)
next = root
Kako bi izgledala rekurzivna varijanta? loop
while (next nil) do
INORDER-R(root) PUSH(S, next)
if root then next =left(next)
end_while
INORDER-R( left(root) )
if (not STACK-EMPTY(S))
P(root)
then
INORDER-R( right(root) ) next = POP(S)
end_if P(next)
next = right(next)
else
return
end_if
end_loop
Elektrotehnički fakultet, 17
Beograd
Zadatak 9
Elektrotehnički fakultet, 18
Beograd
Rešenje next Stack inorder poredak
A A -
B AB -
D ABD -
nil AB D
nil A DB
INORDER-I(root)
next = root E AE DB
loop
G AEG DB
while (next nil) do
PUSH(S, next) nil AE DBG
next =left(next)
end_while
nil A DBGE
if (not STACK-EMPTY(S)) nil DBGEA
then
next = POP(S)
C C DBGEA
P(next) nil DBGEAC
next = right(next)
else F F DBGEAC
return nil DBGEACF
end_if
end_loop nil
Elektrotehnički fakultet, 19
Beograd
Zadatak 10 – Huffman-ov algoritam
Simboli A B C D E F G H
Verovatnoće 8 6 13 12 23 10 18 10
Elektrotehnički fakultet, 20
Beograd
Rešenje
Simboli B A F H D C G E
Verovatnoće 6 8 10 10 12 13 18 23
Elektrotehnički fakultet, 21
Beograd
Rešenje
• Huffman-ov algoritam:
– od dva stabla čiji koreni imaju najmanju težinu (verovatnoću),
formirati jedno stablo
– težina (verovatnoća) korena tog stabla je zbir težina (verovatnoća)
korenova stabala od kojih je to stablo nastalo
– novo stablo se vraća u skup stabala koji se ponovo uredi
– postupak se ponavlja dok se ne formira jedinstveno stablo
F H D C G E
10 10 12 13 14 18 23
B A
6 8
Elektrotehnički fakultet, 22
Beograd
Rešenje
D C G E G E
12 13 14 18 20 23 14 18 20 23 25
B A F H B A F H D C
6 8 10 10 6 8 10 10 12 13
E
20 23 25 32 25 32 43
F H D C G D C G E
10 10 12 13 14 18 12 13 14 18 20 23
B A B A F H
6 8 6 8 10 10
Elektrotehnički fakultet, 23
Beograd
Rešenje
• Nakon konstruisanja stabla, grane treba
100 obeležiti
0 1 • Na primer, sve leve grane dobijaju
identifikator 0, sve desne identifikator 1
43 57
0 1 0 1 Simboli A B C D E F G H
E Kodovi 1101 1100 101 100 01 000 111 001
20 23 25 32
0 1 0 1 0 1
F H D C G
10 10 12 13 14 18
0 1
B A
6 8
Elektrotehnički fakultet, 24
Beograd
Zadatak 11
U jednom prenosnom sistemu poruke se sastoje od simbola
A, B, C, D, E, F, G i H sa verovatnoćama pojavljivanja
0.29, 0.25, 0.2, 0.12, 0.05, 0.04, 0.03 i 0.02, respektivno.
Kodirati simbole tako da prosečna dužena prenesene
poruke bude minimalna i izračunati ovu dužinu.
Obrazložiti postupak.
Simboli A B C D E F G H
Verovatnoće 0.29 0.25 0.2 0.12 0.05 0.04 0.03 0.02
Elektrotehnički fakultet, 25
Beograd
Rešenje
Simboli A B C D E F G H
Verovatnoće 0.29 0.25 0.2 0.12 0.05 0.04 0.03 0.02
Simboli A B C D E F G H
Kodovi 10 00 01 110 1110 11110 111110 111111
Prosečna dužina:
2*0.29 + 2*0.25 + 2*0.2 + 3*0.12 + 4*0.05 + 5*0.04 + 6*0.03 + 6*0.02 = 2.54 bita
Kada bi se kodiranje vršilo bez uvida u verovatnoće, prosečna dužina bi bila 3 bita
Elektrotehnički fakultet, 26
Beograd
Zadatak za samostalnu vežbu
U jednom prenosnom sistemu poruke se sastoje
od simbola A, B, C, D, E, F, G i H sa verovatnoćama
0.18, 0.36, 0.15, 0.17, 0.07, 0.02, 0.03 i 0.02, respektivno.
Kodirati simbole tako da prosečna dužina prenesene poruke
bude minimalna i izračunati ovu dužinu. Obrazložiti postupak.
Simboli A B C D E F G H
Verovatnoće 0.18 0.36 0.15 0.17 0.07 0.02 0.03 0.02
Elektrotehnički fakultet, 27
Beograd
Zadatak 12
Kodirati dinamičkim Huffman-ovim kodovima niz simbola
ABCCCDDDCABBB ako se simboli A, B, C i D
kodovima fiksne dužine kodiraju sa po dva bita 00, 01,
10, 11, respektivno.
Elektrotehnički fakultet, 28
Beograd
Zadatak 12 - rešenje
Skica dinamičkog algoritma za kodiranje:
DHuffman
tree = CreateEmptyTree NYT : Not Yet Transmitted
InsertNode( tree, NYT ) predstavlja list stabla težine 0
next = getchar()
while next ≠ EOF Kada se stablu dodaje nov
if NodeExist(tree, next) then čvor, on postaje brat čvora
TransmitCode(tree, next) NYT.
else
TransmitCode(tree, NYT)
TransmitSymbol(next)
SpawnNode(tree, NYT, next)
end_if
UpdateTree : vrši ažuriranje
UpdateTree(tree, next)
rasporeda čvorova u stablu.
next = getchar()
end_while
Elektrotehnički fakultet, 29
Beograd
START
Ažuriranje stabla
DA Simbol se
prvi put
pojavljuje
NYT se deli
na unutrašnji
čvor(R), novi NYT NE
i novi list (S)
Pronađi list R
koji odgovara
simbolu; R je
Povećaj težinu R tekući čvor
i S; ažuriraj
jedinstvene
brojeve čvorova
Zameni mesta
NE tekućeg čvora i
Jedinstveni broj čvora koji ima
maksimalan u najveći
bloku? jed. br. u bloku
R postaje tekući
čvor
DA
Inkrementiraj
težinu tekućeg
čvora
NE Roditelj tekućeg
Da li je tekući čvora postaje
čvor koren? tekući čvor
DA
Elektrotehnički fakultet, 30
Beograd STOP
Zadatak 12 - rešenje ABCCCDDDCABBB
Insert A Insert B Insert C
root root root root
#2,[1] #4,[2] #6,[2] #6,[3]
0 1 0 1 0 1 0 1
NYT A A A A
#2,[1] #4,[1] #5,[2]
#0,[0] #1,[1] #3,[1] #5,[1] #4,[1]
0 1 0 1 0 1
NYT B B B
Transmit A #0,[0] #1,[1]
#2,[1]
#3,[1]
#2,[1]
#3,[1]
0 1 0 1
Transmit 0B NYT C NYT C
#0,[0] #1,[1] #0,[0] #1,[1]
Insert C
root
#6,[4] Transmit 00C
0 1 Insert C
C
#5,[2] root
#4,[2]
0 1 #6,[5]
0 1
B
#2,[1] C
#3,[1] #4,[2]
0 1 #5,[3]
NYT A
0 1
#0,[0] #1,[1] B
#2,[1]
#3,[1]
Transmit 101 0 1
Insert D
root root
#8,[5] #8,[6]
0 1 0 1
C C
#6,[2] #6,[3]
#7,[3] #7,[3]
0 1 0 1
B B
#4,[1] #5,[2]
#5,[1] #4,[1]
0 1 0 1
A A
#2,[1] #2,[1]
#3,[1] #3,[1]
0 1 0 1
NYT D NYT D
#0,[0] #1,[1] #0,[0] #1,[1]
Transmit 000D
Elektrotehnički fakultet, 32
Beograd
Zadatak 12 - rešenje ABCCCDDDCABBB
Insert D
root root root
#8,[6] #8,[6] #8,[7]
0 1 0 1 0 1
C C C
#6,[3] #6,[3] #7,[4]
#7,[3] #7,[3] #6,[3]
0 1 0 1 0 1
B D D
#5,[2] #5,[2] #5,[2]
#4,[1] #4,[2] #4,[2]
0 1 0 1 0 1
A A
#2,[1] #2,[1] A
#3,[1] #3,[1] #2,[1]
0 1 #3,[1]
0 1 0 1
NYT D NYT B
#0,[0] #1,[1] NYT B
#0,[0] #1,[1] #0,[0] #1,[1]
Transmit 0101
Elektrotehnički fakultet, 33
Beograd
Zadatak 12 - rešenje
Preneta sekvenca: A 0B 00C 100D 001 11 111 111 1101 001 10
odnosno 00 001 0010 10011 001 11 111 111 1101 001 10
root
11
4 7
2 A 2 D 3 B 4
NYT
0
C 2
Elektrotehnički fakultet, 34
Beograd
Zadatak 13
Elektrotehnički fakultet, 35
Beograd
Zadatak 13 - rešenje 11000010010011110110001110
NYT D 1 1 D 1 1 A 2
0
NYT NYT
A 1 0
D 1
rcv: 0010 – NYT C 0
root
4
root
5 rcv: 01 – D
2 A 2
A 2 3
1 D 1
Dekodovana poruka: 1 D 2
NYT
0
C 1 DAACDDCBB
Elektrotehnički fakultet, NYT 36
0
C 1
Beograd
Zadatak 14 – za samostalnu vežbu
Rešenje:
001 0111 00010 100100 01 001 01 01 001 001 10 11 0 0
Elektrotehnički fakultet, 37
Beograd