SI202-042092-786-25 470KB Jul 02 2011 02:31

Download Report

Transcript SI202-042092-786-25 470KB Jul 02 2011 02:31

BAB
7
Definisi Pohon dan Pohon Biner
Pohon adalah struktur berisi sekumpulan elemen dimana
salah satu elemen adalah akar (root) dan elemen-elemen
lain adalah bagian-bagian pohon yang membentuk susunan
hirarki dengan akar sebagai awal mula. Elemen-elemen
Pohon disebut simpul (node).
Sifat sifat pohon adalah :
1. Hanya terdapat satu jalur untuk tiap pasang simpul di
pohon
2. Jumlah simpul di pohon satu lebih banyak dibanding
jumlah busur.
3. Pohon dengan dua simpul atau lebih mempunyai
sedikitnya dua daun.
Struktur pohon telah biasa digunakan dalam kehidupan
sehari-hari seperti :
1. Silsilah keluarga
2. Daftar isi buku
3. Struktur organisasi
4. Pohon keputusan
Pohon biner adalah bentuk graf yang terhubung yang tidak
memiliki sirkuit dan pada pohon biner selalu terdapat path
atau jalur yang menghubungkan dua simpul dalam pohon.
Terminologi pohon biner
Terminologi pada pohon biner dapat kita lihat pada termi –
nologi pada hubungan keluarga. Misalnya istilah anak kiri
dan anak kanan. Beberapa terminologi pada pohon biner :
1. Simpul akar (root)
simpul pohon dengan tingkatan tertinggi (dinyatakan
sebagai tingkat 1)
2. Simpul daun (leaf)
simpul-simpul pada pohon yang tidak lagi memiliki
simpul anak (child)
3. Induk (parent)
simpul yang merupakan induk dari children-nya
4. Anak dari simpul x
akar-akar (root) dari subpohon –subpohon dari simpul
x adalah anak dari x
5. Siblings
anak dari induk yang sama
6. Moyang (anchestor)
simpul-simpul disepanjang jalur dari simpul ke root
7. Level suatu node
dengan memisalkan root sebagai level 1, jika
simpul pada level p, maka children-nya adalah
berada pada level p + 1
8. HeightI atau depth
level maksimum pada suatu simpul di pohon
Untuk lebih jelas mengenai terminologi pohon biner
dapat kita lihat pada contoh pohon dibawah ini :
A
B
D
C
E
F
Dari contoh diatas diperoleh :
Banyak simpul (node) : 6 (n)
Banyak ruas (edge) : 5 (n-1)
Root
: A
Leaf
: D dan E
Parent
: A parent dari B dan C
B parent dari D dan E
Level
: 0=A
1 = B dan C
2 = D, E dan F
Height (ketinggian) : level tertinggi + 1
2+1=3
Penyajian Kait
Penyajian kait menggunakan 3 array sejajar yaitu INFO,
LEFT dan RIGHT serta sebuah variabel penuding root.
Masing-masing simpul N dari pohon T berkorespondensi
dengan sebuah lokasi k, sehingga :
INFO [k]
LEFT [k]
RIGHT [k]
= berisi data pada simpul N
= berisi lokasi dari anak kiri simpul N
= berisi lokasi dari anak kanan simpul N
Root akan berisi lokasi dari akar R dari pohon T. Jika suatu
sub pohon hampa, maka penuding yang bersangkutan akan
berisi harga nol. Jika suatu pohon T sendiri hampa, maka
root akan berisi harga nol.
Untuk lebih jelasnya dapat kita lihat pada contoh soal
berikut :
A
B
D
C
E
H
G
F
J
K
L
Dari pohon diatas dapat kita buat diagran skematiknya :
A
c
B
X D X
E X
X G X
X F X
H
J
X L X
X
K X
NO
INFO
LEFT
RIGHT
1
K
0
0
2
C
3
6
3
G
0
0
4
Root
5
5
A
10
2
6
H
17
1
7
L
0
0
8
9
9
4
10
Avail
8
14
B
11
18
13
19
12
F
0
0
13
E
12
0
14
15
15
16
16
11
17
J
7
0
18
D
0
0
19
20
20
0
Untuk menentukan atau membuat pohon biner dengan
penyajian kait juga dapat dilakukan dengan cara menentukan root yang akan dijadikan info pertama, pada contoh
misal A, penentuan left dan right secara bebas. Misal
Info A left yang dipilih 10, berarti lokasi pada anak kiri simpul
A adalah B (nomor 10), dan misal info A right yang dipilih
adalah 2, berarti anak kanan simpul A adalah C pada posisi
Ke 2.
Kemudian pada info B, left yang dipilih adalah 18, berarti
anak kiri simpul B adalah D pada posisi ke 18, dan right
adalah 13 berarti anak kanan simpul B adalah E pada posisi
ke 13.
Misalnya simpul E, anak kiri (left) adalah 12 berarti anak kiri
simpul E adalah F pada posisi ke 12, dan right adalah 0,
berarti untuk posisi kanan dari simpul E adalah tidak ada
(nol), dan begitu seterusnya…….
Sehingga diagram skematik dapat dilengkapi seperti :
5
10 A 2
18 B 13
0 D 0
3 C 6
12 E 0
0 G 0
0 F 0
17 H 1
7
0 L 0
J
0
0 K 0
Penyajian Sekuensial
Terdapat sebuah cara yang efisien untuk menyajikan T
dalam memori dengan pohon biner T yang lengkap atau
hampir lengkap . Penyajian itu hanya menggunakan sebuah
array linier.
Dapat kita lihat bahwa penyajian sekuensial membutuhkan
14 lokasi memori dalam array tree, meskipun T hanya
mempunyai 9 simpul. Kenyataannya, bila kita memasukkan
elemen nol sebagai simpul terminal, kita akan membutuhkan
Tree [29] untuk suksesor kanan dari tree [14]
45
tree
22
77
11
8
30
15
25
90
6
11 12
13 88
15
1
45
2
22
3
77
4
11
5
30
6
7
90
8
Dari pohon biner diatas dapat kita
gambarkan sebuah array linier yang
ditunjukkan pada gambar disebelah
Kanan.
9
15
10
25
11
12
13
14
15
16
…
29
88
Penyajian Pohon Biner dalam Memori
Kita dapat menyajikan pohon biner T dalam memori dengan
2 cara, yang pertama adalah penyajian kait (link) seperti
yang telah dijelaskan sebelumnya, cara ini biasa digunakan.
Cara kedua menggunakan sebuah array tunggal disebut
penyajian sekuensial dari T, juga telah dijelaskan secara
singkat sebelumnya. Kebutuhan utama yang harus
dipenuhi pada setiap penyajian dari T adalah bahwa seorang
dapat mempunyai akses langsung ke akar R dan T, dan bila
diberikan sembarang simpul N, seorang harus dapat akses
langsung ke anak dari N.
Penyajian Pohon Umum secara Pohon Biner
Kalau kita mempunyai sebuah struktur pohon yang umum
(general tree) maka ada sebuah algoritma yang dapat
menyajikannya secara pohon biner. Kita ingat kembali
bahwa pohon biner selalu terdiri atas paling banyak 2 sub
pohon, yakni sub pohon kiri dan sub pohon kanan.
Pendefinisian ini berlaku secara rekursif. Gambar dibawah
merupakan contoh pohon
A biner :
B
D
C
E
F
G
H
I
J
K
Pada pohon biner dapat kita lihat bahwa setiap simpul selalu
mempunyai 0, 1, atau 2 anak, tidak lebih dari itu.
Gambar di bawah ini menunjukkan sebuah contoh pohon
Umum yang bukan pohon biner :
A
B
E
C
F
D
G
K
H
I
J
L
Pohon pada gambar tersebut bukan pohon biner, karena
simpul D mempunyai 3 anak yakni simpul H, I, J.
Algoritma yang kita gunakan untuk menyajikan pohon umum
secara pohon biner terdiri atas 2 langkah. Pertama kita
tambahkan ruas (edge) baru, menghubungkan 2 simpul
bersaudara yang berdampingan, lalu kita hapus ruas dari
simpul ayah (parent)ke simpul anak bersaudara tersebut,
kecuali ruas ke simpul anak paling kiri. Langkah kedua, kita
melakukan rotasi sebesar 45 , searah jalannya putaran
jarum jam terhadap pohon hasil langkah pertama tersebut.
Pohon biner tidak mempunyai bentuk umum, karena setelah
pohon biner diubah menjadi umum tidak dapat dikembalikan
ke pohon binernya lagi.
Notasi Infix, Postfix dan Prefix serta Transversal Pohon
Transversal pohon atau kunjungan pohon adalah proses
kunjungan dalam pohon dengan setiap simpul hanya
dikunjungi satu kali saja.
Ketika dilakukan transversal pohon, koleksi simpul dari
pohon terlihat satu persatu. Hasil dari transversal pohon
adalah suatu untai simpul pohon yang urut secara linier.
Suatu simpul dikatakan dikunjungi, bila simpul tersebut kita
masukkan ke dalam urutan linier tersebut.
Ada 3 jenis transversal pohon, yaitu :
1. Transversal Pre-order (prefix)
2. Transversal In-order (infix)
3. Transversal Post-order (postfix)
Ada 3 kegiatan yang terdapat dalam transversal pohon
biner :
• Mengunjungi simpul akar (root)
• Melakukan transversal sub pohon kiri dan
• Melakukan transversal sub pohon kanan
Transversal Pre-order (prefix)
Transversal pre-order (prefix) merupakan kunjungan dalam
pohon yang dilakukan dari atas ke bawah.
Pada transversal pre-order (prefix) dilakukan berturut-turut :
• Mengunjungi simpul akar
• Melakukan transversal sub pohon kiri secara pre-order
• Melakukan transversal sub pohon kanan secara
pre-order
Dari notasi infix yang tersedia akan kita buat menjadi
sebuah pohon biner, kemudian akan kita tentukan
transversal pre-order (prefix) :
Notasi infix : ( ( A – B ) / ( C * D ) + E )
Dari notasi infix diatas kita tentukan root yaitu “/” merupakan
posisi paling tengah, sehingga didapat :
/
-
A
+
B
*
C
E
D
Pada penyajian ini masing-masing simpul yang bukan daun
mewakili operator, sedangkan sub pohon kiri dan kanannya
merupakan operand.
Setelah menjadi sebuah pohon biner dapat kita tentukan
transversal pre-order (prefix) nya, yaitu dari atas ke bawah,
yang dinyatakan dengan urutan simpul yang telah diberi
tanda panah berwarna biru, mulai dari awal yaitu dari root
sampai akhir simpul yaitu simpul E
Dengan urutan pre-order (prefix) : / - A B + * C D E.
Transversal In-order (Infix)
Transversal in-order (infix) merupakan kunjungan dalam
Pohon yang dilakukan dari kiri ke tengah dan ke kanan.
Transversal in-order (infix) dilakukan berturut turut :
1. Lakukan transversal sub pohon kiri secara in-order
2. Kunjungi simpul akar
3. Lakukan transversal sub pohon kanan secara in-order
/
A
+
B
*
C
E
D
Dari pohon tersebut dapat kita tentukan transversal
in-order (infix) yaitu berturut-turut dari kiri ke tengah dan
ke kanan. Dari panah berwarna merah yang menunjukkan
Urutan simpul tersebut didapat transversal in-order (infix)
Dengan urutan : A – B / C * D + E
Transversal Post-order (Postfix)
Transversal post-order (postfix) merupakan kunjungan
Dalam pohon yang dilakukan dari bawah ke atas.
Transversal post-order (postfix) ini memakai irutan :
1. Lakukan transversal sub pohon kiri secara post-order
2. Lakukan transversal sub pohon kanan secara post-order
3. Kunjungi simpul akar
Dari pohon biner yang telah kita bahas secara pre-order
(prefix) dan in-order (infix) juga akan kita gunakan untuk
menentukan atau membahas urutan simpul pada transversal
post-order (postfix), dan pada gambar dapat kita lihat urutan
transversal post-order (postfix) pada tanda panah berwarna
orange berikut yang dimulai dari simpul A sampai dengan
simpul terakhir yaitu bagi (/).
/
-
A
+
B
*
C
E
D
Dan urutan transversal post-order (postfix) dapat kita
tentukan dari simpul bawah yaitu A sampai simpul atas
yaitu bagi (/), dapat kita lihat urutannya yaitu
AB–CD*E+/