STRUKTUR DATA POHON BINER Gilang Maulana
[email protected] gilang.mendozha@gmail./com Manajamen Informatika Akademik Bina Sarana Informatika Salemba, Jakarta INONESIA 2008
Pendahuluan
Poho Pohon n atau atau (tre (tree) e) adal adalah ah sala salah h satu satu bent bentuk uk grap graph h terh terhub ubun ung g yang yang tida tidak k mengandung sirkuit. Karena merupakan graoh terhubung, maka pada pohon (tree) selalau terdapat path atau jalur yan menghubungkan setiap simpul dalam dua pohon. Pohon (tree) dpat juga didefinisikan sebagai kumpulan element yang salah satu elemen elemennya nya disebut disebut dengan dengan akar (root (root)) dan sisa sisa elemen elemen lain lain (simpu (simpul) l) yang yang terpeca terpecah h menjadi sebuah hmpuna yang saling tidak berhubungan yang disebut dengan subpohon (subtree) atau cabang.
1. Sifat Sifat Utam Utama a Poho Pohon n Bera Beraka karr
Sifat utama pohon berakar : Jika pohon mempunyai simpul sebanyak n, maka banyaknya ruas adalah (n-1). Pada contoh : banyak simpul adalah 8 maka banyaknya ruas adalah 7. Mempunyai simpul khusus yang disebut Root (Akar), jika simpul tersebut memiliki derajat keluar ≥ 0 dan derajat masuk = 0. Simpul P merupakan root. Memp Mempun unya yaii simp simpul ul yang yang dise disebu butt Leaf Leaf (Dau (Daun) n),, jika jika simp simpul ul ters terseb ebut ut memiliki derajat keluar = 0 dan derajat masuk = 1. Simpul R, S, V, W merupakan daun pada pohon T. Setiap simpul mempunyai tingkatan (level), dimulai dari root dengan level 0 sampai dengan level n pada daun yang paling bawah. Pada contoh : P mempunyai level 0 Q, T mempunyai level 1 R, S, U mempunyai level 2 V, W mempunyai level 3
Simpul yang mempunyai level yang sama disebut Bersaudara (Brother
/Stribling)
Pohon mempunyai ketinggian (kedalaman / height) yaitu level tertinggi +1. Ketinggian pohon T adalah 3+1 = 3 Pohon Pohon mempuny mempunyai ai berat berat (bobot (bobot / weight weight)) yaitu yaitu banyak banyaknya nya daun pada pada pohon. Berat pohon T adalah 4 Ketinggian Minimum Dan Maksimum Pohon Binar
Jika banyaknya simpul = N, maka : 1. Ketinggian Mi Minimum ad adalah : Hmin = INT(2log N) + 1 2. Ketinggian Maksimum adalah : N Contoh : untuk N = 8 Ketinggian Minimum adalah : Hmin = INT(2log N) + 1 = INT(2log 8) + 1 = INT(2log 23) + 1 = INT(3) + 1 =3+1 =4 Ketinggian Maksimum adalah : 8 Penyajian Pohon Binar Dalam Memori
Penyajian pohon binar dalam memori dengan dua cara, yaitu : 1. Peny Penyaj ajia ian n Kai Kaitt (li (link nk)) 2. Peny Penyaj ajia ian n Seq Sequen uenti tial al..
Penyajian Kait Kalau tidak dinyatakan lain, suatu pohon binar T akan disimpan dalam memori secara penyajian kait. Penyajian ini menggunakan tiga array sejajar INFO, LEFT dan RIGHT, serta variabel penuding ROOT. Masing-masing simpul N dari pohon T berkorespondensi dengan suatu lokasi K, sedemikan sehingga : (1) INFO(K) INFO(K) berisi berisi data data pada simpul simpul N. (2) LEFT(K) LEFT(K) berisi lokasi lokasi dari anak kiri kiri simpul N. (3) RIGHT(K) RIGHT(K) berisi berisi lokasi dari dari anak kanan simpul N.
Contoh : Pohon Binar A
B
C
D
E
G
H
F
J
K
L
Skema Penyajian Kait dari pohon binar T Root
•
A
•
B
•
x
D
•
x
F
C
•
E
•
x
•
x
x
x
G
x
•
x
L
x
•
•
J
x
H
•
x
K
x
Root 2
Avail 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
INFO L A G C B F J E
D H
K
LEFT 0 7 8 0 4 13 16 6 0 3 1 9 15 19 18 0 11 14 0 0
RIGHT 0 5 0 17 12 0 0 0
0 20
0
Penyajian Sequential
Penyajian pada pohon binar T ini hanya menggunakan sebuah array linear tunggal TREE sebagai berikut : 1. Akar R dari dari pohon pohon T tersim tersimpan pan sebag sebagai ai TREE[ TREE[1] 1] 2. Jika simpul simpul N menduduk mendudukii TREE[K] TREE[K] maka anak anak kirinya kirinya tersimpa tersimpan n dalam TREE[2 TREE[2*K] *K] dan anak kanannya dalam TREE[2*K+1] Contoh : 45
22
11
77
30
90
15
25
88
TREE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 . . . 29
45 22 77 11 30 90 15 25
88
Dapat Dapat diliha dilihatt bahwa bahwa penyaj penyajian ian membut membutuhka uhkan n 14 lokasi lokasi dalam dalam array TREE, meskipun T hanya mempunyai 9 simpul. Kenyataannya, bila kita memasukkan elemen nol sebagai suksesor dari simpul terminal, dibutuhkan TREE[29] untuk suksesor kanan dari TREE[14].
A. KUNJUN KUNJUNGAN GAN PADA PADA POHO POHON N BINER BINER
Ada Ada tida tida maca macam m kunj kunjun unga gan n pada pada poho pohon n bine biner, r, yait yaitu u kunjunga kunjungan n PreOr PreOrder der,, InOrde InOrder, r, dan PostOr PostOrder der.. Selain Selain itu itu ada kunjungan kunjungan LevelOrder, LevelOrder, yaitu yang berdasarkan berdasarkan kedudukan kedudukan tiap simpul simpul dalam dalam pohon. pohon. Keempat Keempat kunjun kunjungan gan itu dibagi dibagi menjad menjadii orie orient ntas asi, i, yait yaitu u left left to righ rightt orie orient nted ed (LRO (LRO)) atau atau kunj kunjun ungan gan dilakukan di cabang kiri dulu baru ke cabang kanan dan right to left oriented (RLO) atau kunjungan dilakukan di cabang kanan dulu baru ke cabang kiri.
1. Ku Kunj njun unga gan n Pre PreOr Orde derr
Kunj Kunjun unga gan n PreOr reOrde derr LRO LRO atau atau seri sering ng dise disebu butt deng dengan an dept depth h firs firstt orde order r menggunakan urutan sebagai berikut : Cetak isi simpul yang dikunjungi. Kunjungi cabang kiri. Kunjungi cabang kanan. Prosed Prosedur ur kunjunga kunjungan n PreOr PreOrder der dapat dapat dilakuk dilakukan an dengan dengan cara cara rekurs rekursif if atau atau non rekursif. Prosedur kunjungan secara PreOrder LRO dengan rekursif disajikan berikut ini : Procedure PreOrder (Root:Pohon); Begin If Root <> nil then Begin Write (Root^.Info); PreOrder (Root^.kiri); PreOrder (Root^.kanan); End;
End; 2. Ku Kunj njun unga gan n InOr InOrde derr
Kunj Kunjun unga gan n InOr InOrde derr LRO LRO atau atau seri sering ng dise disebu butt deng dengan an symm symmet etri ricc orde order r menggunakan urutan sebagai berikut : Kunjungi cabang kiri. Cetak isi simpul yang dikunjungi. Kunjungi cabang kanan. Seperti pada kunjungan PreOrder, prosedur kunjungan InOrder dapat dilakukan dengan cara rekursif atau non rekursif. Prosedur kunjungan secara InOrder LRO dengan rekursif disajikan berikut ini : Procedure InOrder (Root:Pohon); Begin If Root <> nil then Begin InOrder (Root^.kiri); Write (Root^.Info); InOrder (Root^.kanan); End; End; 3. Ku Kunj njun unga gan n Post PostOr Orde derr
Kunjungan PostOrder LRO menggunakan urutan sebagai berikut : Kunjungi cabang kiri. Kunjungi cabang kanan. Cetak isi simpul yang dikunjungi. Seperti halnya PreOrde dan InOrder, prosedur kunjungan PostOrder juga dapat dilakukan dilakukan dengan cara rekursif rekursif atau non rekursif. rekursif. Prosedur kunjungan secara PostOrder LRO dengan rekursif disajikan berikut ini : Procedure PostOrder (Root:Pohon); Begin If Root <> nil then Begin PostOrder (Root^.kiri); PostOrder (Root^.kanan); Write (Root^.Info); End; End;
B. SORTING
Sorting adalah sebuah proses merangkai benda dalam urutan tertentu dan/atau dalam himpunan himpunan yang berbeda, berbeda, dan oleh karena itu dia memiliki memiliki dua arti umum yang berbeda: 1. Pengurutan: Pengurutan: merang merangkai kai benda benda yang yang sejeni sejenis, s, sekela sekelas, s, dll, dll, dalam dalam urutan urutan yang yang teratur, 2. Kategorisasi: Kategorisasi: pengelompokan dan pemberian label kepada benda dengan sifat yang serupa. Sorting (pengurutan) adalah operasi yang sangat banyak dilakukan dalam ’Bussines Data Procesing’ . Dalam hal ini pengurutan yang dilakukan adalah secara Ascepding (menaik dari kecil ke besar). Macam macam sorting (pengurutan) sebagai berikut : SELECTION SORT BUBLE SORT MERGE SORT QUICK SORT INSERTION SORT HEAP SORT Mensortir informasi atau data Salah satu cara sorting yang penting adalah mengatur benda informasi dalam urut urutan an alfa alfabe beti tik k sesu sesuai ai denga dengan n hubung hubungan an peny penyus usun unan an yang yang tela telah h didef didefin inis isik ikan an sebelumnya, misal ketika seseorang mensortir buku-buku di perpustakaan berdasarkan judul, subyek atau penulis (Biasanya diurutkan dalam urutan membesar). Urutan yang dihasilkan dapat membesar atau mengecil, karena biasanya seluruh sorting adalah sorting angka. Sorting dalam Ilmu Komputer adalah salah satu subjek riset yang paling luas karena kebutuhan mempercepat operasi dalam ribuan atau jutaan data selama operasi pencarian. Tujuan utama mensortir informasi adalah untuk mengoptimalkan tugas tertentu. Pada umumnya, ada dua cara pengelompokan informasi: berdasarkan kategori, kategori, misal sebuah katalog belanja di mana barang disusun bersama di bawah judul seperti 'rumah', 'olah raga', 'pakaian wanita', dll. dan berdasarkan intensitas seperti harga, misal dari yang termurah sampai yang termahal.
C. GRAPH
Graph Graph meru merupak pakan an stru strukt ktur ur data data yang yang pali paling ng umum umum.. Jika Jika stru strukt ktur ur line linear ar memungkinkan pendefinisian keterhubungan sikuensial antara entitas data, struktur data tree tree memu memung ngki kink nkan an pend pendef efin inis isia ian n keter keterhub hubung ungan an hira hirark rkis is,, maka maka stru strukt ktur ur grap graph h memungkinkan pendefinisian keterhubungan tak terbatas antara entitas data.
1. Himpuna Graph dan Jenis Graph a.
Himpuna Graph
Suatu Graph terdiri dari himpunan verteks (node) dan himpunan sisi (edge, arc). Verteks menyatakan entitas-entitas data dan sisi menyatakan keterhubungan antara verteks. Notasi matematis graph G adalah : G = (V, E) Sebuah sisi antara verteks x verteks x dan y dan y ditulis { x, x, y}. y}. Subgraph : graph yang merupakan suatu subset (bagian) graph yang connected Graph H = (V1 (V1,, E1) E1) disebut subgraph dari graph G jika V1 adalah himpunan bagian dari V dan V dan E1 E1 himpunan bagian dari E dari E . b.
Jenis Graph
1.
Directed Graph (Digraph) Jika sisi-sisi graph hanya berlaku satu arah. Misalnya : {x,y} yaitu arah x arah x ke y, ke y, bukan dari y dari y ke x ke x;; x disebut origin x, y). y). dan y dan y disebut terminus. Secara notasi sisi digraph ditulis sebagai vektor ( x, Contoh Digraph G = {V, E} : V = {A, B, C, D, E, F, G, H, I,J, K, L, M} E = {(A,B),(A,C), (A,D), (A,F), (B,C), (B,H), (C,E), (C,G), (C,H), (C,I), (D,E), (D,F), (D,G), (D,K), (D,L), (E,F), (G,I), (G,K), (H,I), (I,J), (I,M), (J,K), (J,M), (L,K), (L,M)}. 2.
Graph Tak Berarah (undirected graph atau undigraph) setiap sisi { x, x, y}berlaku y}berlaku pada kedua arah: baik x x ke y ke y maupun y maupun y ke x ke x.. Secara grafis sisi pada undigraph tidak memiliki mata panah dan secara notasional menggunakan kurung kurawal. Contoh Undigraph G = {V, E} V = {A, B, C, D, E, F, G, H, I,J, K, L, M} E = { {A,B},{A,C}, {A,D}, {A,F}, {B,C}, {B,H}, {C,E}, {C,G}, {C,H}, {C,I}, {D,E}, {D,F}, {D,G}, {D,K}, {D,L}, {E,F}, {G,I}, {G,K}, {H,I}, {I,J}, {I,M}, {J,K}, {J,M}, {L,K}, {L,M}}. Bany Banyak ak entit entitas as-en -enti tita tass data data dalam dalam masa masala lahh-ma masa sala lah h nyat nyataa seca secara ra alam alamia iah h memiliki memiliki keterhubunga keterhubungan n langsung langsung (adjacency) (adjacency) secara tak terbatas terbatas demikian. demikian. Contoh: Contoh: informasi topologi dan jarak antar kota-kota di pulau Jawa. Dalam masalah ini kota x kota x bisa berhubungan langsung dengan hanya satu atau lima kota lainnya. Untuk memeriksa
keterhubungan dan jarak tidak langsung antara dua kota dapat diperoleh berdasarkan data keterhubungan-keterhubungan langsung dari kota-kota lainnya yang memperantarainya. Representasi data dengan struktur data linear ataupun hirarkis pada masalah ini masih masih bisa bisa digunak digunakan an namun namun akan membut membutuhka uhkan n pencari pencarianan-penc pencari arian an yang yang kurang kurang efisien. efisien. Struktur Struktur data graph secara eksplisit eksplisit menyatakan keterhubungan keterhubungan ini sehingga pencariannya langsung (straightforward) dilakukan pada strukturnya sendiri.
Masalah-masalah Graph Masalah path minimum (Shortest (Shortest mencar mencarii route route dengan dengan jarak jarak terpend terpendek ek dalam dalam suatu suatu path problem) problem) jaringan transportasi. Masalah aliran maksimum menghitung volume aliran BBM dari suatu reservoir problem) (maximum flow problem) ke suatu titik tujuan melalui jaringan pipa. Masala Masalah h pencar pencariah iah dalam dalam graph graphmenca mencari ri langk langkah ah-l -lan angk gkah ah terb terbai aik k dala dalam m prog progra ram m ( graph graph searching problem) problem) permainan catur komputer. menent menentukan ukan urutan urutan pengam pengambil bilan an mata-m mata-mata ata kuliah kuliah Masa Masala lah h pengu penguru ruta tan n topo topolo logi giss yang yang sali saling ng berk berkai aita tan n dalam dalam hubun hubungan gan pras prasya yara ratt (topological ordering problem) problem) (prerequisite). Masa Masallah jar jaringa ingan n tugas ugas (Task membuat penjadwalan pengerjaan suatu proyek yang Network Problem) Problem) memungkinkan waktu penyelesaian tersingkat. Masalah pencarian pohon rentang mencari rentangan kabel listrik yang totalnya adalah mini minim mum (Mini Minimu mum m Span Spanni ning ng minimal untuk menghubungkan sejumlah kota. Tree Problem) Problem) tukang pos mencari mencari lintasan lintasan terpendek melalui melalui semua Travelling Salesperson Problem alamat alamat peneri penerima ma pos tanpa tanpa harus harus mendat mendatangi angi suatu suatu tempat lebih dari satu kali. dalam dalam mengga menggamba mbarr peta, peta, member memberika ikan n warna warna yang yang Four-color problem berbeda pada setiap propinsi yang saling bersebelahan.
D. MATRIKS IKS
Pandang bahwa G graf dengan N simpul dan M ruas. Untuk mempermudah mempermudah komputasi, komputasi, graf dapat disajikan disajikan dalam bentuk matriks, matriks, disebut Matriks Ruas, Ruas, yang berukuran (2 x M) atau (M x 2) yang menyatakan ruas dari graf. Matriks adjacency dari graf G tanpa ruas sejajar adalah matriks A berukuran (N x N), yang bersifat : 1, bila ada ruas (vi, v j) aij = 0, dalam hal lain Matriks adjacency merupakan matriks simetri. Untuk graf dengan ruas sejajar, matriks adjacency didefinisikan sebagai berikut :
p, bila ada p buah ruas menghubungkan (vi, v j) (p > 0) aij = 0, dalam hal lain Matriks Incidence dari graf G, tanpa self-loop didefinisikan sebagai matriks M berukuran (N x M) 1, bila ruas e j berujung di simpul vi, mij = 0, dalam hal lain Contoh :
e5 v1
v4
v5
•
•
•
e4 e1
e2
e8 e6
•
v2
e7
•
e3
v3
Matriks Ruas 1 1 1 1 2 3 3 4 2 3 4 5 3 4 5 5
atau
1 1 1 1 2 3 3 4
2 3 4 5 3 4 5 5
Matriks Adjacency : N x N
v1 v2 v3 v4 v5
v1
v2
v3
v4
v5
0 1 1 1 1
1 0 1 0 0
1 1 0 1 1
1 0 1 0 1
1 0 1 1 0
Matriks Incidence : N x M
v1 v2 v3 v4 v5
e1
e2
e3
e4
e5
e6
e7
e8
1 1 0 0 0
1 0 1 0 0
0 1 1 0 0
1 0 0 1 0
1 0 0 0 1
0 0 1 1 0
0 0 1 0 1
0 0 0 1 1
GRAF BERARAH (DIGRAF)
Suatu graf berarah (digraf) D terdiri atas 2 himpunan : 1. Himpuna Himpunan n V, anggot anggotany anyaa disebut disebut simpul simpul 2. Himpunan Himpunan A, merupakan merupakan himpunan himpunan pasangan pasangan terurut, terurut, yang yang disebut disebut ruas berara berarah h atau arkus. Notasi : D(V, A) Simpul, anggota v, digambarkan sebagai titik (atau lingkaran kecil). Sedangkan arkus a=(u,v), digambarkan sebagai garis dilengkapi dengan tanda panah mengarah dari simpul u ke simpul v. Simpul u disebut titik pangkal, dan simpul v disebut titik terminal dari arkus tersebut. Contoh : Graf berarah D (V, A) dengan : 1. V menga mengandun ndung g 4 smpul smpul,, yaitu yaitu : 1, 2, 3 dan 4 2. A mengandung mengandung 7 arkus, arkus, yaitu yaitu : (1,4), (2,1), (2,1), (2,1), (2,1), (2,2), (2,2), (2,3), (2,3), (2,4), (2,4), (4,3). (4,3).
1
4 •
•
2
•
•
3
Arkus (2, 2) : gelung / self loop Arkus (2,1) : arkus sejajar / arkus berganda