Anda di halaman 1dari 18

Bab 5a

Teori Pohon
Pengantar

• Pohon adalah salah satu contoh khusus dari graf yang paling
banyak digunakan. Khususnya pada ilmu komputer, banyak
digunakan penerapan pohon. Dalam ilmu komputer, pohon
berguna dalam mengorganisasikan dan mencari hubungan data
dalam basis data. Pohon juga berguna dalam masalah-masalah
teoritis, seperti dalam hal menentukan waktu yang optimal
untuk melakukan pensortiran.
Topik-topik yang akan dibahas

1. Pendahuluan
2. Terminologi dan karakterisasi pohon.
3. Pohon spanning
4. Minimal spanning tree
5. Tree traversals
6. Pohon binari
7. Pohon keputusan
8. Keisomorfisan pohon
Contoh

A B C D
A
A
B
D
C
D
A
D D

D
Definisi

• Sebuah pohon T adalah sebuah graf sederhana yang


memenuhi sifat: jika v dan w adalah verteks dalam T, maka
ada lintasan sederhana yang unik dari v ke w. Sebuah pohon
yang memiliki root adalah sebuah pohon dimana verteks
tertentu dijadikan sebagai root.
• Jika kita membuat juara sebagai root dalam suatu
pertandingan, maka graf tersebut adalah sebuah pohon. Level
dari suatu verteks adalah panjang lintasan sederhana dari root
ke verteks itu. Sedangkan ketinggian (height) dari suatu pohon
berakar adalah level paling besar yang ada pada pohon itu.
Pohon-Struktur
organisasi
Rektor

Purek I Purek III Purek IV Purek II

Dekan Dekan Dekan …


Bendahara Purchasing
FEkon FTeknik FHukum

Kajur Kajur …
Kajur
SI TI TK
Kode Huffman
• Cara yang paling umum untuk menyatakan karakter secara internal di
dalam sebuah komputer adalah dengan menggunakan string bit dengan
panjang tetap. Sebagai contoh, ASCII (American Standard Code for
Information Interchange) menyatakan masing-masing karakter dengan
strings 7 bit. Sebuah contoh diberikan pada tabel 5.1 berikut:

Karakter Kode ASCII


A 100 0001
B 100 0010
C 100 0011
1 011 0001
2 011 0010
! 010 0001
* 010 1010
Kode Huffman
• Kode huffman, yang merepresentasikan karakter-karakter dengan
string bit panjang tetap, menyediakan alternatif bagi ASCII dan
kode-kode lain dengan panjang tetap. Idenya adalah menggunakan
string bit pendek untuk menyatakan karakter-karakter yang paling
sering digunakan dan menggunakan string bit lebih panjang untuk
menyatakan karakter-karakter yang jarang digunakan.
• Penggunnaan kode Hufmaan ini misalnya dalam alat-alat elektronik
seperti pada VCR plus +, sebuah alat yang secara otomatis
memprogram VCR untuk menghasilkan nomor chanel program yang
disediakan.
Pohon-Kode Huffman
Root
0
1
0
1
A
O
1 0

1 0 R

T S

• Kode Huffman dapat dengan mudah didefinisikan dengan sebuah


pohon berakar, seperti ditunjukkan pada gambar di atas.
• Bit 0 atau 1 menyatakan apakah bergerak ke kanan atau ke kiri.
Sebagai contoh, misalkan kita melakukan dekoding terhadap kode:
01010111. Jawabannya adalah RAT
Algoritma Pohon Huffman
Algoritma untuk kode Huffman optimal
Input: Barisan dengan n frekuensi, n  2.
Output : Pohon berakar yang mendefinisikan kode Hufmann optimal
 
procedure huffman(f,n)
if n = 2 then
begin
let f1 and f2 denote the frequencies
let T be a Tree
return(T)
end
let fi and fj denote the smallest frequencies
replace fi and fj in the list f by fi+fj
T’:= huffman(f,n-1)
replace a verteks in T’ labeled fi+fj by the tree shown as before
return(T)
end huffman
Contoh
• Bentuklah sebuah pohon Huffman untuk Karakter Frekuensi
! 2
data pada tabel di samping. @ 3
# 7
• Algoritma ini mulai dengan menggantikan $ 8
secara berulang frekuensi paling kecil % 12

dengan jumlah hingga jumlah dua barisan


elemen diperoleh: 1 0

12 20
• 2, 3, 7, 8, 12  2 + 3, 7, 8, 12  5, 7, 8,
12  5 + 7, 8, 12  8, 12, 12  8+12, 12 1
1
0

 12, 20. 12
8
0
12

• Hasilnya ada pada pohon di samping 1 0

1 0 1 0
1 0 8
5 7 12
1 0
0 1 1 0
1 0 # 1
$ 0 1 0
# %
!
1 0 7 8
! @ 12
2 3
Karakterisasi Pohon
• Jika T adalah pohon dengan root v o. Misalkan bahwa x, y, dan z adalah verteks-verteks
dalam T dan (vo, v1, …, vn) adalah path sederhana dalam T, maka:
a. vn-1 adalah parent dari vn.
b. vo, …, vn-1 adalah ancestors dari vn.
c. vn adalah child dari vn-1.
d. Jika x adalah ancestor dari y, maka y adalah descendent dari x.
e. Jika x dan y adalah children dari z, maka x dan y adalah siblings.
f. Jika x tidak memiliki children, maka x adalah verteks terminal (atau leaf)
g. Jika x bukan verteks terminal, x adalah verteks internal atau cabang
h. Subtree T yang berakar pada x adalah graf dengan kumpulan verteks V dan kumpulan
edge E, dimana V adalah x bersama dengan descendants dari x.
Contoh
• Dari gambar di atas dapat disimpulkan bahwa:
a. Parent dari Eros adalah Aphrodite Uranus
b. Ancestors dari Hermes adalah Zeus, Kronos, dan
Uranus Aphrodite Kronos Atlas Prothemeus
c. Descendants dari Kronos adalah Zeus, Poseidon,
Hades, Ares, Apollo, Athena, Hermes, Heracles.
d. Children dari Zeus adalah Apollo, Athena, Eros
Hermes, dan Heracles Zeus Poseidon Hades Ares

e. Aphrodite dan Prometheus adalah siblings


Apollo AthenaHermes Herades
f. Verteks terminal adalah Eros, Apollo, Athena,
Hermes, Heracles, Poseidon, Hades, Ares, Atlas
dan Prometheus
g. Verteks internal adalah Uranus, Aphrodite,
Kronos, Zeus
Pohon rentang (Spanning
Tree)
• Jika dari suatu graf, ditentukan sebuah subgraf T sehingga T adalah
sebuah pohon yang berisi semua verterks dalam G, maka pohon ini
disebut dengan spanning tree. Pada bagian ini akan dipelajari
metoda mencari spanning tree.
• Sebuah tree T adalah sebuah spanning tree dari graf G jika T adalah
subgraf dari G yang berisi semua verteks dari verteks-verteks G.
Sebuah graf G mempunyai sebuah spanning tree jika dan hanya jika
G adalah terhubung.
• Metode untuk menentukan sebuah spanning tree dari sebuah graf
diberikan oleh algoritma breadth-first search.
Algoritma Bread First Search
• Algoritma BFS (bread first search):
Input : Graf terhubung G dengan verteks berurutan v1, v2, …, vn.
Output : Sebuah spanning tree T
•  procedure bfs(V,E)
//V = verteks-verteks berurutan v1, …, vn; E=edge
//V’ = verteks-verteks spanning tree T; E’ edge edge spanning tree T
//v1 adalah root dari spanning tree
//S adalah list berurutan
S:=(v1)
V’:=(v1)
E’:=
while true do
begin
for each x  S, in order, do
for each y  V-V’, in order, do
if (x,y) is an edge then
add edge (x,y) to E’ and y to V’
if no edges were added then
return(T)
S:= children of S ordered consistently with the original verteks ordering
end
end bfs
Algoritma BFS vs DFS

• Algoritma BFS dapat digunakan untuk menguji apakah sebuah graf


sembarang dengan n verteks terhubung. Dengan algoritma BFS
dapat dibentuk tree T. BFS juga dapat digunakan untuk
mendapatkan lintasan yang minimum jika graf memiliki nilai
(weighted graph). Algoritma Dijkstra pada bab lalu (teori graf)
adalah merupakan generalisasi dari algoritma BFS.
• Alternatif lain dari BFS adalah depth first search (DFS), yang
menentukan level-level dalam sebuah tree mulai dari awal iterasi
program. Algoritma DFS diberikan sbb:
Algoritma DFS
• Algoritma DFS untuk Spanning Tree (ST)
Input : Graf terhubung dengan verteks terurut v1, v2, …, vn.
Output : Spanning tree T
• procedure dfs(V,E)
//V’ = verteks-verteks dari ST; E’ = edge dari ST
// v1 adalah root dari ST
V’ := {v1}
E’ := 
w := v1
while true do
begin
while there is an edge (w,v) that when added to T does not create a cycle in T do
begin
choose the edge (w,vk) with minimum k that when added to T does not create a cycle in
T
add(w,vk) to E’
add vk to V’
w := vk
end
if w := v1 then
return(T)
w := parent of w in T // backtrack
end
end dfs
Algoritma BFS vs DFS
b
• Gunakanlah algoritma DFS dan BFS untuk 5
menentukan ST pada graf di samping. a 6
2 c 9
• Pada gambar kiri bawah (garis merah) 4
ditunjukkan ST menggunakan BFS, sedangkan 3 5 3
6 12
pada kanan bawah menggunakan DFS. d 4

6 e

b
b
a
2 6
BFS c 9 a 6
4 3 2
5 c 9 DFS
6 12 4
d 4

6 3 5
e 6 12
d 4

6 e

Anda mungkin juga menyukai