TUGAS MAKALAH INDIVIDUAL
Mata Kuliah : Matematika Diskrit / IF2153 Nama : Dwitiyo Abhirama NIM : 13505013
Institut Teknologi Bandung Desember 2006
Penggunaan Struktur Pohon dalam Informatika Dwitiyo Abhirama / 13505013 E-mail :
[email protected] Program Studi Teknik Informatika, Institut Teknologi Bandung, Jl. Ganesha 10, Bandung.
Abstrak
Stuktur pohon memiliki sifat-sifat tertentu yang khas. Berbagai sifat pohon tersebut memungkinkan penggunaan struktur pohon yang luas yang mecakup pada berbagai lapangan kehidupan. Salah satu penerapan pohon misalnya dalam bidang informatika. Makalah ini membahas tentang studi dan penggunaan struktur pohon untuk memodelkan dan memanipulasi data dan informasi dalam bidang informatika. Penggunaan struktur pohon tersebut antara lain dalam memodelkan permasalahan yang biasa ditemui dalam bidang informatika. Dengan pemodelan masalah dengan menggunakan struktur pohon manipulasi informasi dan penyelesaian masalah akan menjadi lebih mudah.
Kata Kunci : pohon bebas, pohon berakar, upapohon, pohon n-ary, pohon biner, akar, daun, lintasan, simpul, sisi.
1.
Pendahuluan.
Permasalahan yang dihadapi dalam bidang informatika terkadang cukup rumit. Solusi dari persoalan tersebut terkadang tidak dapat langsung teramati dari masalah yang dihadapi. Pemodelan yang baik untuk merepresentasikan masalah merupakan suatu alternatif langkah yang patut diperhatikan. Struktur pohon dengan segala sifat-sifatnya yang diadaptasi dari teori graf merupakan konsep yang pentig untuk diterapkan dalam memodelkan permasalahan yang dihadapi sehingga dapat dimanipulasi dan diselesaikan dengan baik. Penggunaan pohon antara lain pada pemampatan data, pennganan
kondisional, pengevaluasian ekspresi, pencarian elemen, dan pengorganisasian arsip.
2.
Teori Pohon.
Pohon sebenarnya merupakan suatu bentuk graf. Berdasarkan sudut pandang teori graf pohon adalah termasuk graf yang khusus yaitu seperti yang didefinisikan pada definisi 1 berikut ini. Pohon Bebas. Definisi 1 : Pohon (pohon bebas) adalah graf tak-berarah terhubung yang tidak mengandung siruit.
1
Karena definisi pohon tersebut diacu dari teori graf, maka sebuah pohon dapat mempunyai sebuah simpul tanpa sebuah sisipun. Dengan kata lain, jika G = (V,E) merupakan sebuah pohon, maka V tidak boleh berupa himpunan kosong, tetapi E boleh merupakan himpunan kosong. Berdasarkan definisi tersebut, ada dua sifat penting pada pohon yaitu terhubung dan tidak mengandung sirkuit. Terhubung artinya pada setiap pasang simpul pada pohon terdapat lintasan yang menghubungkan. Tidak mengandung sirkuit berarti tidak terdapat lebih dari satu lintasan yang menghubungkan setiap pasang simpul pada pohon. Selain itu, dapat terlihat bahwa di dalam pohon, jumlah sisinya adalah jumlah simpul dikurangi satu. Terlihat pula bahwa pohon hanya memerlukan dua buah warna untuk mewarnai simpul-simpul di dalam pohon sedemikian rupa sehingga tidak ada dua buah simpul bertetangga yang mempunyai warna sama. Dengan kata lain, ditinjau dari teori pewarnaan graf, maka pohon mempunyai bilangan kromatik sama dengan 2. Definisi pohon yang dimaksud dalam definisi 1 biasa disebut pohon bebas (free tree) untuk membedakannya dengan pohon berakar (rooted tree). Pohon berakar akan dijelaskan kemudian. Sifat-sifat pohon. Sifat-sifat (properties) pohon dapat dirangkum dan dinyatakan dalam teorema 1 berikut ini. Teorema 1 : Misalkan G = (V,E) merupakan graf takberarah sederhana dan jumlah sisinya n. Maka, semua pernyataan berikut ini adalah ekivalen. 1. G adalah pohon. 2. Setiap pasang simpul di dalam G terhubung dengan lintasan tunggal. 3. G terhubung dan mempunyai m = n – 1 buah sisi. 4. G tidak mengandung sirkuit dan mempunyai m = n – 1 buah sisi.
5.
6.
G tidak mengandung sirkuit dan penambahan satu sisi pada graf akan membuat hanya satu sirkuit. G terhumung dan setiap sisinya adalah jembatan (jembatan adalah sisi yang bila dihapus menyebabkan graf terpecah menjadi dua komponen).
Pohon Berakar. Pada kebanyakan aplikasi pohon, simpul tertentu diperlakukan sebagai akar (root). Sekali sebuah simpul telah ditetapkan sebagai akar, maka simpul-simpul lainnya dapat dicapai dari akar dengan memberi arah pada sisi pohon yang mengikutinya. Untuk lebih jelasnya perhatikan definisi 2 berikut ini. Definisi 2 : Pohon yang sebuah simpulnya diperlakukan sebagai akar dan sisi-sisinya diberi arah sehingga menjadi graf berarah dinamakan pohon berakar. Akar mempunyai derajat-masuk sama dengan nol dan simpul-simpul lainnya berderajatmasuk sama dengan satu. Simpul yang mempunyai derajat-keluar sama dengan nol disebut daun atau simpul terminal. Simpul yang mempunyai derajat-keluar tidak sama dengan nol disebut simpul dalam atau simpul cabang. Setiap simpul di dalam pohon dapat dicapai dari akar dengan sebuah lintasan tunggal (unik). Sembarang pohon tak-berakar (pohon bebas) dapat diubah menjadi pohon berakar dengan memilih sebuah simpul sebagai akar. Pemilihan simpul yang berbeda menjadi akar akan menghasilkan pohon berakar yang berbeda pula. Sebagai perjanjian, arah sisi di dalam pohon berakar dapat dibuang karena setiap simpul di dalam pohon berakar harus dicapai dari akar, maka lintasan di dalam pohon berakar selalu dari ”atas” ke ”bawah”.Berikut ini pada gambar 1 diperlihatkan pembentukan pohon berakar dari sebuah pohon tak-berakar. Pohon berakar berikut memilih simpul a sebagai akar.
2
a
e
c
d
a
f
b
c
b
g
d
e
f
g
Gambar 1. Terminologi Pohon Berakar. Upapohon (subtree). Gambar 1 di atas (gambar pohon berakar dengan simpul a sebagai akar) akan digunakan untuk menjelaskan terminologi pohn berakar. Anak (child) dan Orangtua (parent). Misalkan d adalah sebuah simpul di dalam pohon berakar. Simpul e dikatakan anak simpul d jika ada sisi dari simpul d ke simpul e. Dalam hal ini, d merupakan orangrua dari e. Pada gambar 1, simpul b, e, f, dan g tidak mempunyai anak. Saudara Kandung (sibling). Simpul yang mempunyai orangtua yang sama dikatakan merupakan saudara kandung satu sama lain. Pada gambar 1, simpul b dan c merupakan saudara kandung satu sama lain. Lintasan (path). Lintasan adalah runtunan simpul-simpul dari simpul awal sampai simpul tujuan. Panjang lintasan adalah jumlah sisi yang dilalui dalam suatu lintasan. Keturunan (ancestor).
(descendant)
dan
Leluhur
Jika terdapat lintasan dari simpul a ke simpul d di dalam pohon, maka simpul a adalah leluhur dari simpul d, dan d adalah keturunan dari simpul a.
Misalkan c adalah simpul di dalam pohon berakar (T). Yang dimaksud dengan upapohon dengan c sebagai akarnya ialah upagraf T’ = (V,E) sedemikian rupa sehingga V’ mengandung c dan semua keturunannya dan E’ mengandung sisi-sisi dalam semua lintasan yang berasal dari c. Derajat (degree). Derajat sebuah simpul di dalam pohon berakar adalah jumlah anak simpul tersebut. Jadi yang dimaksud adalah derajat-keluar sebuah simpul. Derajat maksimum dari semua simpul merupakan derajat pohon tersebut. Pohon n-ary. Definisi 3 : Pohon berakar yang setiap simpul cabangnya mempunyai paling banyak n buah anak disebut pohon n-ary. Jika n sama dengan 2 pohon tersebut disebut pohon biner (binary tree). Pohon n-ary dikatakan teratur atau penuh (full) jika setiap simpul cabangnya mempunyai tepat n buah anak. Pohon Terurut. Definisi 4 :
3
Pohon berakar yang urutan anak-anaknya penting disebut pohon terurut. Pada pohon biner, pohon yang akarnya adalah anak kiri disebut upapohon kiri (left subtree), sedangkan pohon yang akarnya adalah anak kanan disebut upapohon kanan (right subtree). Pada bagian selanjutnya akan diterngakan penggunaan pohon dalam informatika. Penggunaan tersebut antara lain adalah untuk memodelkan permasalahan sehingga lebih mudah diselesaikan, merepresentasikan dan memanipulasi data/informasi atau arsip, serta untuk merampatkan data.
3.
Pohon Kondisional.
Kondisional merupakan serangkaian pilihan keputusan yang unik untuk mendapatkan suatu solusi tertentu. Solusi tersebut diambil jika dan hanya jika keputusan yang terkait terpenuhi. Keputusan yang unik berarti tidak saling beririsan. Bentuk kondisional yang paling umum adalah bentuk depend on. Pada bentuk kondisonal depend on, setiap solusi diambil apabila keputusan/syarat untuk mendapatkan solusi terebut terpenuhi. Depend on dapat mengandung terhingga banyaknya keputusan yang menghasilkan masing-masing solusi.
Bentuk kondisional tersebut dapat dimodelkan dengan menggunakan struktur pohon kondisional yang akan diuraikan berikut. Struktur pohon kondisional dapat digunakan untuk memodelkan persoalan kondisional yang terdiri dari serangkaian pilihan cabang keputusan yang dapat terpenuhi untuk mengarahkan pada suatu solusi tertentu. Pohon n-ary digunakan untuk memodelkan persoalan pohon kondisional tersebut. Pada kondisional depend on dengan n buah keputusan digunakan pohon n-ary. Setiap daun menunjukkan solusi tertentu dan setiap lintasan menuju simpul terseut merupakan serangkaian keputusan untuk mendapatkan solusi tersebut. Sebagai contoh kita ingin menentukan wujud air berdasarkan kondisi temperatur udara. Pohon keputusan akan menggunakan pohon 3ary untuk memodelkannya. Pohon keputusan untuk persoalan ini ditunjukkan pada gambar 2. Berdasarkan model yang direpresentasikan pada gambar 2, persoalan wujud air terselesaikan dalam algoritma dalam notasi algoritmik (pseudo-code) berikut ini. Depend on (T) : (T <= 0) : (padat) (0 < T < 0) : (cair) (T >= 0) : (gas)
depend on : temperature(T)
T <= 0 padat
0 < T < 100 cair
T >= 100 gas
Gambar 2.
4
Jika cabang keputusan hanya terdiri dari dua pilihan keputusan, maka bentuk kondisional depend on menjadi bentuk khusus yang biasa dikenal sebagai bentuk kondisional if-else. Pada bentuk kondisional if-else, jika suatu kondisi tidak termasuk dalam suatu cabang pilihan keputusan, maka kondisi tersebut secara otomatis akan termasuk dalam cabang pilihan keputusan yang satunya lagi. Hal ini tentu saja dikarenakan pilihan keputusan yang satu merupakan komplemen dari pilihan keputusan yang lain. Untuk memodelkan bentuk kondisional if-else digunakan pohon n-ary dengan n sama dengan 2. Pohon ini biasa disebut sebagai pohon biner.
Sebagai contoh kita ingin menentukan nilai maksimum di antara dua bilangan a dan b. Tentu saja nilai maksimum tersebut akan sama dengan nilai bilangan a atau akan sama dengan nilai bilangan b. Oleh karena itu, pohon keputusan akan menggunakan pohon biner untuk memodelkannya. Pohon keputusan untuk persoalan ini ditunjukan pada gambar 3. Berdasarkan model yang direpresentasikan pada gambar 3, persoalan menentukan nilai maksimum di antara dua bilangan a dan b terselesaikan dalam algoritma dalam notasi algoritmik (pseudo-code) berikut ini. If (a >= b) Then (a) Else (b)
a:b
a >= b a
b
Pohon biner dapat juga digunakan untuk merepresentasikan permasalahan yang biasa dimodelkan dengan bentuk depend on. Hal ini akan berakibat mengubah bentuk depend on menjadi bentuk if-else bersarang (nested). Sebagai contoh persoalan wujud air di atas. Persoalan tersebut akan direpresentasikan dengan pohon biner sebagaimana akan digambarkan pada gambar 4 berikut ini.
dimodelkan dengan pohon biner) terselesaikan dalam algoritma dalam notasi algoritmik (pseudo-code) berikut ini. If (T >= 100) Then (gas) Else ( If (T <= 0) Then (padat) Else (cair) )
Berdasarkan model yang direpresentasikan pada gambar 4, persoalan wujud air (yang
5
Temperature : (T) T >= 100
T < 100
gas
Temperature : (T) T <= 0
0 < T < 100
padat
cair
Gambar 4.
4.
i. ii.
Pohon Ekspresi.
Pohon ekspresi digunakan untuk mempermudah manipulasi ekspresi aritmatika. Pohon ekspresi ialah pohon biner dengan daun berupa operand dan simpul dalam (termasuk akar) berupa operator. Pohon ekspresi digunakan oleh compiler bahasa tingkat tinggi (high level language) untuk mengevaluasi ekspresi yang ditulis dalam notasi infix, prefix, dan postfix. Dalam notasi infix, operator berada di antara dua buah operand, pada notasi prefix, operator mendahului dua buah operand-nya, dan pada notasi postfix, kedua operand mendahului operator-nya.
iii.
2.
Inorder i. ii. iii.
3.
Postorder i. ii. iii.
Penggunaan pohon ekspresi memudahkan pemrogram untuk memanipulasi ekspresi aritmatika. Hal ini misalnya tanda kurung tidak lagi diperlukan bila suatu ekspresi aritmatika telah direpresentasikan sebagai pohon biner Pohon ekspresi erat kaitannya dengan cara mengunjungi pohon biner. Oleh karena itu akan dijelaskan cara mengunjungi pohon biner sebagai berikut.
Kunjungi R. Telusuri T1 preorder. Telusuri T2 preorder.
secara secara
Telusuri T1 inorder. Kunjungi R. Telusuri T2 inorder.
secara
Telusuri T1 postorder. Telusuri T2 postorder. Kunjungi R.
secara
secara
secara
Terdapat keterkaitan antara ketiga macam cara penulusuran pohon biner dengan ketiga macam penulisan notasi. Keterkaitan itu ialah penelusuran pohon secara preorder, inorder, dan post order masing-masing meghasilkan ekspresi dalam notasi prefix, infix, dan postfix. Sebagai contoh penelusuran pohon ekspresi pada gambar 5 dapat menghasilkan ketiga macam penulisan notasi.
Penelusuran Pohon Biner. Misalkan T adalah pohon biner, akarnya R, upapohon kirinya T1, dan upapohon kanannya T2. Terdapat 3 macam cara penelusuran pohon biner T yaitu sebagai berikut. 1.
Berdasarkan gambar 5 cara penelusuran pohon dan notasi yang terkait adalah sebagai berikut. Preorder : * + a / b c – d * e f (prefix)
Preorder
6
Inorder
:
a+b/c*d–e*f
Postorder : (postfix)
(infix)
abc/+def*-*
*
+
-
a
/
b
d
*
c
e
f
Gambar 5.
5.
Pohon Huffman.
Pohon Huffman berguna untuk pemampatan data. Penerapan pohon Huffman tidak terlepas dari penggunaan kode awalan. Untuk itu, berikut ini dipaparkan penggunaan kode awalan.
meminimumkan bit yang digunakan, sedapat mungkin panjang kode setiap karakter diperpendek terutama untu karakter yang kekerapannya besar. Simbol Kekerapan A 2 P 1
Kode Awalan. Kode awalan (prefix code) adalah himpunan kode sedimikian rupa sehingga tidak ada anggota kumpulan yang merupakan awalan dari anggota yang lain.
01000001 01010000
Berikut ini disajikan cara mendapatkan Kode Huffman. 1.
Pilih dua simbol yang kekerapannya paling kecil. Kedua simbol tadi dikombinasikan dan diperlakukan sebagai simpul orangtua. Simbol baru ini diperlakukan sebagai simpul baru dan diperhitungkan pada langkah selanjutnya.
2.
Selanjutnya, pilih dua simbol berikutnya yang kekerapannya paling kecil termasuk simbol baru.
Pemampatan data dilakukan dengan mengkodekan setiap karakter di dalam pesan atau di dalam arsip dengankode yang lebih pendek. Sistem kode yang umum digunakan adalah kode ASCII yang terdiri dari 8 bit biner. Sebagai contoh string ‘APA’ direpresentasikan menjadi rangkaian bit 010000010101000001000001, representasi 3 huruf itu memerlukan 3 * 8 bit = 24 bit. Untuk
Kode ASCII
7
3.
Prosedur yang sama dilakukan hingga memperoleh simbol yang sama dengan kombinasi semua simbol pada string awal.
Daun pada pohon Huffman menyatakan simbol yang digunakan dalam pesan. Dengan
membuat lintasan dari akar ke daun, akan dihasilkan kode untuk setiap simbol. Gambar 6 memodelkan pohon Huffman untuk string ’APA’. Berdasarkan gambar 6, maka hanya diperlukan 3 bit untuk merepresentasikan string ’APA’ yaitu 101.
AP, 3/3
0
1
P, 1/3
A, 2/3
Gambar 6.
6.
dimodelkan dengan pohon arsip yang berupa pohon n-ary.
Pohon Arsip.
Pengorganisasian arsip yang baik merupakan hal yang perlu diperhatikan oleh pelaku informatika. Pengorganisasian arsip dapat
Gambar 7 memberikan contoh sebuah pohon arsip. Pohon tersebut merepresentasikan struktur direktori yang umum digunakan.
C:/
My Documents
Program Files
Windows
Gambar 7. Pohon arsip dapat juga digunakan untuk merancang sebuah situs. Dengan menggunakan pohon arsip pengorgasasian informasi dalam situs dapat menjadi lebih baik sehingga meningkatkan kenikmatan pengguna dalam menjelajahi situs tersebut.
7.
Pohon Pencarian Biner.
Pohon pencarian biner (PPB) merupakan pohon yang penting dalam persoalan yang banyak melakukan operasi pencarian, penyisipan, dan penghapusan elemen. Untuk operasi semacam itu, pohon pencarian biner
8
memiliki kinerja yang lebih baik daripada struktur data lain, yang dalam hal ini waktu pencarian.
tertentu. Ketentuan pengaturan kunci adalah sebagai berikut. Misalkan R adalah akar, dan semua kunci yang tersimpan pada setiap simpul tidak ada yang sama, maka (perhatikan gambar 8) :
Simpul pada pohon pencarian biner dapat berupa kunci pada data, atau data itu sendiri (dengan catatan setiap data adalah unik). Kunci harus unik karena kunci adalah nilai yang membedakan setiap simpul dengan simpul yang lainnya sehingga tidak ada dua buah simpul yang mempunyai kunci yang sama.
a.
Semua simpul pada upapohon kiri mempunyai kunci lebih kecil dari kunci pada R.
b.
Semua simpul pada upapohon kanan mempunyai kunci lebih besar dari kunci pada R.
Pohon pencarian biner adalah pohon yang setiap kuncinya diatur dalam suatu urutan
R
Kunci(T1) < Kunci(R)
Kunci(T2) > Kunci(R)
T1
T2 Gambar 8.
Pohon pencarian biner dimaksudkan untuk memberikan pengaksesan yang cepat terhadap data pada simpul. Pencarian data dilakukan melalui kunci. Pencarian selalu dimulai dari simpul akar. Kunci di simpul akar dibandingkan dengan nilai yang dicari (x). Jika kunci di akar tidak sama dengan x, pencarian dilanjutkan di upapohon kiri atau upapohon kanan, sesuai x lebih kecil dari akar ke upapohon kiri atau x lebih besar dari akar ke upapohon kanan. Pembandingan berlanjut sampai x sama dengan nilai suatu kunci (x terdapat dalam PPB) atau tercapai sebuah daun (Jika kunci pada daun tersebut sama dengan x, maka x terdapat dalam PPB. Jika tidak, x tidak terdapat dalam PPB).
8.
informasi dalam bidang informatika ini adalah sebagai berikut. 1.
Struktur pohon merupakan suatu model yang baik untuk merepsentasikan masalah sehingga lebih mudah untuk ditangani.
2.
Pohon kondsional dapat merepresentasikan permasalahan kondisional untuk diselesaikan dengan baik.
3.
Pengevaluasian ekspresi aritmatika dapat diselseaikan dengan pohon ekspresi.
4.
Perampatan data dapat dilakukan dengan menggunakan pohon Huffman yang berdasarkan kode awalan.
5.
Pohon arsip bermanfaat dalam pengorganisasian informasi secara terstruktur dengan rapi.
Kesimpulan.
Kesimpulan yang dapat diambil dari studi dan penggunaan struktur pohon untuk memodelkan dan memanipulasi data dan
9
6.
Pohon pencarian biner merupakan struktur data yang baik dan efisien dalam hal operasi pencarian elemen.
10
DAFTAR PUSTAKA
[1]
http://coretmoret.web.id/arc/2004/06/tiga-buah-struktur Tanggal akses : 29 Desember 2006 pukul 19:00 WIB.
[2]
http://id.wikipedia.org/wiki/Pohon_Pencarian_Biner Tanggal akses : 29 Desember 2006 pukul 19:00 WIB.
[3]
Liem, Inggriani. (2001). Diktat Kuliah If2181 Struktur Data. Departemen Teknik Informatika, Institut Teknologi Bandung.
[4]
Mardiyanto, Dwi Aji. Pemrograman Web. Departemen Teknik Informatika, Institut Teknologi Bandung.
[5]
Munir, Rinaldi. (2004). Diktat Kuliah IF2153 Matematika Diskrit. Departemen Teknik Informatika, Institut Teknologi Bandung.
11