You are on page 1of 37

Algoritmi i Strukture Podataka

IR2ASP

Stabla
Zadatak 1

Predstaviti jednostruko ulančanu listu pomoću binarnog


stabla i realizovati algoritam za nalaženje k-tog elementa
u datoj listi.

• 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

• Za dugačke liste, pristup elementima na kraju je izuzetno


neefikasan (za listu dužine 10 000, prosečan broj
ponavljanja koraka 3 i 4 je 5 000 !!)

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.

1 1 E F Prosečan broj koraka da


bi se pristupilo nekom
elementu liste od 10 000
A B C D elemenata bi bio ~ 13
(log210000)

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.

Najjednostavnije (loše) rešenje:


porediti jedan novčić (napr. a)
sa svim ostalim novčićima. U
najboljem slučaju, potrebna su 2
merenja, u najgorem 7, u
proseku između 4 i 5 merenja.

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+

Ovakav proces odlučivanja dovodi do rešenja za tačno 3 merenja.

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).

• Stabla mogu da se koriste za reprezentaciju stanja u igrama poteznog


karaktera
• Koren stabla predstavlja početno stanje
• Unutrašnji čvorovi predstavljaju međukorake
• Listovi predstavljaju krajnje (završno) stanje
• svakom stanju se pridružuje vrednost uspešnosti – od mogućih stanja,
bira se “najuspešnije”, odnosno ono koje garantuje pobedu
• “Veštačka inteligencija”

Elektrotehnički fakultet, 8
Beograd
Rešenje
ig ra X
0 – neodređen pobednik
0 1 – pobednik “X”
-1 – pobednik “O”

x x • Podrazumeva se da igrači igraju


ig ra X x o najjače poteze
o o
• Igrač “X” teži ka pozicijama koje
1
imaju vrednost 1, a “O” -1
x x x x x x x • Pridružene vrednosti se propagiraju
ig ra O x o x x o x o od listova ka korenu stabla:
o o o o o x o •kada je “X” na potezu, uzima se
1 -1 0
maksimalna vrednost potomaka
x o x x x x o x x x •kada je “O” na potezu, uzima se
ig ra X x x o x x o x o o x o minimalna vrednost potomaka
o o o o o o x o o x o • metod minimaks
0 -1 0 1

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

Igra "15 šibica" se igra tako što se 15 šibica poređa u 5


vrsta na sledeći način: u prvoj vrsti se nalazi jedna
šibica, u drugoj dve, u trećoj tri, itd. Igrači naizmenično
uzimaju šibice. Pri tom, u jednom uzimanju igrač uzima
proizvoljan broj šibica iz samo jedne vrste (može uzeti
jednu, dve, ... ili sve šibice iz date vrste). Igru gubi onaj
igrač koji poslednji uzima.

Proces odlučivanja realizovati u vidu stabla. Prikazati deo


stabla igre.

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.

U ovoj igri ima


garantovano jedan |||| ||||
pobednik. 1 ||| || ||| | ... ||| ||
| |
... ... ...
2 ... ... ... ...
|| | -1
-1 +1
| | | ||
+1
1
+1
2 -1 +1 | | +1 | -1
Elektrotehnički fakultet, 11
Beograd 1 +1 +1 +1
Zadatak 5 – Za stamostalnu vežbu
Šest žaba treba da pređe potok: tri sa leve strane potoka na desnu,
preostale tri sa desne strane potoka na levu.
Prelaz preko potoka čini 7 kamenčića velikih taman toliko da jedna
žaba može da stane na svaki od njih. Žabe mogu da se kreću
samo unapred (žabe sa desne strane ulevo i obrnuto) tako što
mogu da preskoče najviše jedan kamen.
Kako (kojim redosledom) treba da se kreću žabe? Proces
odlučivanja prikazati u vidu stabla.

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.

• Obilazak stabla: posećivanje svih čvorova samo jednom


• Postoji više načina da se obiđe stablo:
– preorder
– inorder
– postorder

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

Skicirati i objasniti iterativnu realizaciju inorder algoritma


obilaska binarnog stabla. Ilustrovati rad algoritma po
koracima na primeru sledećeg stabla.

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

U poruci se javlja 8 simbola (A, B, C, D, E, F, G, H)


sa datim verovatnoćama pojavljivanja.
Prikazati postupak izbora optimalnih prefiksnih kodova
primenom standardnog Huffman-ovog algoritma.

Simboli A B C D E F G H

Verovatnoće 8 6 13 12 23 10 18 10

Napomena: verovatnoće su izražene u procentima

Elektrotehnički fakultet, 20
Beograd
Rešenje

• Simboli se najpre urede po rastućoj vrednosti


verovatnoće pojavljivanja.

Simboli B A F H D C G E

Verovatnoće 6 8 10 10 12 13 18 23

• Svaki od prikazanih simbola treba shvatiti kao nezavisno


stablo sa jednim čvorom (tj. korenom).
• Time je dobijena šuma

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

Rešenje: 2.35 bita

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.

Dinamički (ili adaptivan) Huffman-ov algoritam se bazira na istoj ideji


kao i statički: simboli koji se češće pojavljuju se kodiraju sa manje bita.
Algoritam poseduje prednosti u odnosu na običan (statički)
Huffman-ov algoritam:

1. stablo se dinamički pravi, ne treba učestanost pojedinih simbola


2. tabela kodova ne mora da se prenosi do mesta prijema

Postoje razne implementacije algoritma (Knuth, FGK, Vitter, ...)

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

Elektrotehnički fakultet, NYT A 31


#0,[0] #1,[1]
Transmit 0
Beograd
Zadatak 12 - rešenje ABCCCDDDCABBB

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

Dekodirati niz bitova 11000010010011110110001110 koji


predstavlja dinamički Huffmano kod za niz simbola
sastavljen od simbola A, B, C i D čiji kodovi fiksne dužine
se kodiraju sa po dva bita 00, 01, 10, 11, respektivno.

Prijemnik (dekoder) formira stablo identično stablu koje je formirao


predajnik, korak po korak. Zato je postupak dekodovanja sličan
postupku kodiranja.

Elektrotehnički fakultet, 35
Beograd
Zadatak 13 - rešenje 11000010010011110110001110

rcv: 11 - D rcv: 000 – NYT A rcv: 01 – A


root root root
1 2 3

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

Kodirati dinamičkim Huffman-ovim kodovima niz simbola


BHCEHECCBBBBBB ako se simboli A, B, C, D, ..., H
kodovima fiksne dužine kodiraju sa po tri bita 000, 001,
010, 011,..., 111 respektivno.

Rešenje:
001 0111 00010 100100 01 001 01 01 001 001 10 11 0 0

Elektrotehnički fakultet, 37
Beograd

You might also like