if184982 pengantar logika dan pemrograman pertemuan ke-12 · 2018/2019(1) - if184982 pengantar...
TRANSCRIPT
IF184982Pengantar Logika dan Pemrograman
Pertemuan ke-12Misbakhul Munir IRFAN SUBAKTI
司馬伊凡Мисбакхул Мунир Ирфан Субакти
Binary Search Tree – Pohon Pencarian Biner
• Binary Search Tree (BST):
• Struktur data pohon biner berbasis simpul (node-based binary tree):• Cabang pohon kiri dari suatu simpul berisi simpul-simpul dengan nilai yang lebih kecil
dari nilai simpul tersebut
• Cabang pohon kanan dari suatu simpul berisi simpul-simpul dengan nilai yang lebih besardari nilai simpul tersebut
• Cabang pohon kiri dan cabang pohon kanan juga harus merupakan pohon pencarianbiner
• Tidak boleh ada simpul yang memiliki nilai yang sama
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
2
50
30 70
20 40 60 80
Pohon AVL
• Pohon AVL = AVL Trees
• AVL = Adelson-Velsky and Landis• Jenis pohon pencarian biner (BST, Binary Search Tree) yang bisa menyeimbangkan diri sendiri
• Setiap simpul (node), cabang kiri dan cabang kanannya mempunyai perbedaan tinggi paling banyak 1
• Penyisipan (insertion)/penghapusan (delete) dalam AVL dimungkinkan, secara umum, merusakkeseimbangan properti/sifat keseimbangan-tinggi di atas→ perlu dilakukan rotasi untukmenyeimbangkan kembali pohon dan mendapatkan kembali sifat keseimbangan-tingginya
• Kebanyakan operasi di BST, yaitu: cari, maks, min, sisipkan, hapus, dll.; memerlukan waktu O(t) di mana t adalah tinggi dari BST → bisa lebih cepat menjadi O(n) untuk pohon biner yang miring (skewed binary tree), dengan n adalah jumlah dari simpul (node)
• Jika tinggi dari pohon bisa dijaga selalu O(log n) setelah penyisipan dan penghapusan→ batasatas bisa dijaga pada O(log n) untuk semua operasi tadi, dengan n adalah jumlah dari simpul
• Tinggi dari Pohon AVL adalah selalu O(log n) → batas atas semua operasi adalah O(log n)
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
3
Pohon AVL & Bukan Pohon AVL
13
9 19
6 12
5
18
Pohon AVL
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
4
13
9 19
6 12
5
18
Bukan Pohon AVL
8
3
Penyisipan pada BST
• Penyisipan suatu elemen (nilai) baru dalam standar BST adalah sbb:
• Elemen baru selalu disisipkan pada simpul ujung pohon (simpul daun)
• Pencarian dari simpul yang akan disisipi dimulai dari akar pohon teratassampai ditemukan sebuah simpul daun
• Sekali simpul daun ditemukan, maka simpul baru akan ditambahkan sebagaianak dari simpul daun
• Properti/sifat dari BST:• elemen(kiri) < elemen(akar) < elemen(kanan)
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
5
100
20 120
10 30
Sisipkan 50
100
20 120
10 30
50
Penyisipan pada AVL
• Untuk menjaga agar pohon selalu dalam kondisi AVL setelah penyisipan, penyisipan standar BST di atas harus dimodifikasi untuk mendapatkankeseimbangan kembali.
• 2 operasi dasar untuk menyeimbangkan kembali BST tanpa melanggarproperti/sifat dari BST (elemen(kiri) < elemen(akar) < elemen(kanan):
• Rotasi kiri
• Rotasi kanan
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
6
Rotasi Kiri dan Rotasi Kanan
• P1, P2 dan P3 adalah cabang dari pohon dengan akar y (sisi kiri) dan akar x (sisikanan)
• Elemen-elemen dari pohon-pohon di atas mengikuti aturan:elemen-elemen(P1) < elemen(x) < elemen-elemen(P2) < elemen(y) < elemen-elemen(P3)
• Sehingga tetap memenuhi syarat properti/sifat BST
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
7
y
x Rotasi Kanan
Rotasi Kiri
x
y
P1 P2
P3 P1
P2 P3
AVL: Penyisipan
Simpul yang akan disisipkan adalah s.1. Lakukan penyisipan standar BST untuk s.2. Dimulai dari s, bergeraklah ke atas dan temukan simpul pertama yang tidak
seimbang. Diasumsikan z adalah simpul pertama yang tidak seimbang, y adalah anak dari z yang datang melalui jalur dari s to z, dan x adalah cucudari z yang datang melalui jalur dari s to z.
3. Seimbangkan kembali pohon dengan melakukan rotasi yang diperlukanpada cabang pohon yang berakar di z. Terdapat 4 kemungkinan kasus, karena x, y dan z dapat diatur dalam 4 posisi, yaitu:a) y adalah cabang kiri dari z dan x adalah cabang kiri dari y (Kasus Kiri-Kiri)b) y adalah cabang kiri dari z dan x adalah cabang kanan dari y (Kasus Kiri-Kanan)c) y adalah cabang kanan dari z dan x adalah cabang kanan dari y (Kasus Kanan-
Kanan)d) y adalah cabang kanan dari z dan x adalah cabang kiri dari y (Kasus Kanan-Kiri)
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
8
Penyisipan: Kasus Kiri-Kiri
P1, P2, P3 dan P4 adalah cabang pohon
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
9
z
y
x
Kasus Kiri-Kiri
Rotasi Kanan (z)
y
x z
P1 P2
P3
P4
P1 P2 P3 P4
Penyisipan: Kasus Kiri-Kanan
P1, P2, P3 dan P4 adalah cabang pohon
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
10
z
y
x
Kasus Kiri-Kanan
Rotasi Kiri (y)
z
x
y Rotasi Kanan (z)
x
y z
P1
P2 P3
P4
P1 P2
P3
P4
P4P3P2P1
Penyisipan: Kasus Kanan-Kanan
P1, P2, P3 dan P4 adalah cabang pohon
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
11
z
Kasus Kanan-Kanan
Rotasi Kiri (z)
y
z x
P2
P3
P1 P2 P3 P4
P1
P4
y
x
Penyisipan: Kasus Kanan-Kiri
P1, P2, P3 dan P4 adalah cabang pohon
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
12
z
Kasus Kanan-Kiri
Rotasi Kanan (y)
P2 P3
P1
P4
y
x
z
Rotasi Kiri (z)
x
z y
P2
P3
P1 P2 P3 P4
P4
x
y
P1
Penyisipan: Contoh
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
13
Penyisipan: Contoh (lanjutan)
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
14
Penyisipan: Contoh (lanjutan)
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
15
Penyisipan: Contoh (lanjutan)
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
16
Penyisipan: Contoh (lanjutan)
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
17
Penyisipan: Implementasi
1. Lakukan penyisipan standar BST2. Simpul saat ini haruslah salah satu moyang/leluhur (ancestors) dari simpul
baru yang disisipkan. Update tinggi dari simpul saat ini.3. Dapatkan faktor keseimbangan (tinggi cabang pohon kiri – tinggi cabang
pohon kanan) dari simpul saat ini.4. Jika faktor keseimbangan lebih dari 1, maka simpul saat ini tidak seimbang
dan kita berada pada kasus Kiri-Kiri atau Kiri-Kanan. Untuk mengecekapakah ini kasus Kiri-Kiri atau tidak, bandingkan elemen (nilai) baru yang disisipkan dengan elemen (nilai) pada akar cabang pohon kiri
5. Jika faktor keseimbangan kurang dari -1, maka simpul saat ini tidakseimbang dan kita berada pada kasus Kanan-Kanan atau Kanan-Kiri. Untukmengecek apakah ini kasus Kanan-Kanan atau tidak, bandingkan elemen(nilai) baru yang disisipkan dengan elemen (nilai) pada akar cabang pohonkanan
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
18
Penghapusan pada BST
3 kemungkinan kasus pada penghapusan suatu elemen (nilai) dalam standar BST adalah:
1. Simpul yang akan dihapus adalah simpul daun (simpul ujung pohon) → tinggalhapus saja simpul tersebut dari pohon
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
19
50
30 70
20 40 60 80
Hapus(20)
50
30 70
40 60 80
Penghapusan pada BST (lanjutan)
2. Simpul yang akan dihapus hanya mempunyai 1 anak→ salinkan (copy) anak tadike simpul yang akan dihapus, lalu hapus anak
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
20
50
30 70
40 60 80
Hapus(30)
50
40 70
60 80
Penghapusan pada BST (lanjutan)
3. Simpul yang akan dihapus mempunyai 2 anak→ temukan simpul berikutnya dari simpulyang akan dihapus dengan cara inorder (inorder successor) →min(cabang kanan). Salinkan inorder successor ke simpul yang akan dihapus, lalu hapus inorder successor
• Alternatif lainnya, simpul sebelumnya dari simpul yang akan dihapus dengan cara inorder(inorder predessor) juga dapat digunakan sebagai salinan sebelum penghapusan simpul→maks(cabang kiri)
• Hal penting yang perlu dicatat adalah, inorder successor diperluan hanya jika anak di cabang kanan tidaklah kosong. Dalam kasus ini, inorder successor dapat diperolehdengan menemukan nilai minimum pada anak di cabang kanan (min(cabang kanan)) darisimpul yang akan dihapus.
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
21
50
40 70
60 80
Hapus(50)
60
40 70
80
Inorder Successor pada BST
• Pada BST, inorder successor dari suatu simpul (node) adalahsimpul berikutnya yang didapat dengan penelusuran secarainorder dalam BST
• Inorder successor bernilai null (kosong) untuk simpul terakhirdalam penelusuran inorder
• Dalam BST, inorder successor dari suatu masukan simpul(input node) didefinisikan sebagai simpul dengan nilaiterkecil, yang lebih besar dari nilai pada input node→terkadang penting untuk menemukan simpul berikutnyadalam pohon terurut
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
22
Inorder Successor pada BST (lanjutan)
• Inorder successor dari 8 adalah 10
• Inorder successor dari 10 adalah 12
• Inorder successor dari 14 adalah 20
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
23
20
8 22
4 12
10 14
Penghapusan pada AVL
• Untuk menjaga agar pohon selalu dalam kondisi AVL setelah penghapusan, penghapusan standar BST di atas harus dimodifikasi untuk mendapatkankeseimbangan kembali.
• 2 operasi dasar untuk menyeimbangkan kembali BST tanpa melanggarproperti/sifat dari BST (elemen(kiri) < elemen(akar) < elemen(kanan):
• Rotasi kiri
• Rotasi kanan
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
24
Rotasi Kiri dan Rotasi Kanan
• P1, P2 dan P3 adalah cabang dari pohon dengan akar y (sisi kiri) dan akar x (sisikanan)
• Elemen-elemen dari pohon-pohon di atas mengikuti aturan:elemen-elemen(P1) < elemen(x) < elemen-elemen(P2) < elemen(y) < elemen-elemen(P3)
• Sehingga tetap memenuhi syarat properti/sifat BST
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
25
y
x Rotasi Kanan
Rotasi Kiri
x
y
P1 P2
P3 P1
P2 P3
AVL: Penghapusan
Simpul yang akan dihapus adalah s.
1. Lakukan penghapusan standar BST untuk s.
2. Dimulai dari s, bergeraklah ke atas dan temukan simpul pertama yang tidak seimbang. Diasumsikan z adalah simpul pertama yang tidak seimbang, y adalah anak cabang tertinggi dariz, dan x adalah anak cabang tertinggi dari y. (Catatan: definisi dari x dan y di sini berbedadengan x dan y pada penyisipan AVL sebelumnya)
3. Seimbangkan kembali pohon dengan melakukan rotasi yang sesuai pada cabang pohon yang berakar di z. Terdapat 4 kemungkinan kasus, karena x, y dan z dapat diatur dalam 4 posisi, yaitu:
a) y adalah cabang kiri dari z dan x adalah cabang kiri dari y (Kasus Kiri-Kiri)b) y adalah cabang kiri dari z dan x adalah cabang kanan dari y (Kasus Kiri-Kanan)c) y adalah cabang kanan dari z dan x adalah cabang kanan dari y (Kasus Kanan-Kanan)d) y adalah cabang kanan dari z dan x adalah cabang kiri dari y (Kasus Kanan-Kiri)
Seperti halnya penyisipan, di bawah akan dijelaskan tiap-tiap kasus. Sebagai catatan, tidak sepertipenyisipan, perbaikan pada simpul z tidak memperbaiki Pohon AVL secara keseluruhan. Setelah perbaikan z, maka dimungkinkan moyang/leluhur (ancestors) dari z juga harus diperbaiki.
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
26
Penghapusan: Kasus Kiri-Kiri
P1, P2, P3 dan P4 adalah cabang pohon
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
27
z
y
x
Kasus Kiri-Kiri
Rotasi Kanan (z)
y
x z
P1 P2
P3
P4
P1 P2 P3 P4
Penghapusan: Kasus Kiri-Kanan
P1, P2, P3 dan P4 adalah cabang pohon
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
28
z
y
x
Kasus Kiri-Kanan
Rotasi Kiri (y)
z
x
y Rotasi Kanan (z)
x
y z
P1
P2 P3
P4
P1 P2
P3
P4
P4P3P2P1
Penghapusan: Kasus Kanan-Kanan
P1, P2, P3 dan P4 adalah cabang pohon
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
29
z
Kasus Kanan-Kanan
Rotasi Kiri (z)
y
z x
P2
P3
P1 P2 P3 P4
P1
P4
y
x
Penghapusan: Kasus Kanan-Kiri
P1, P2, P3 dan P4 adalah cabang pohon
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
30
z
Kasus Kanan-Kiri
Rotasi Kanan (y)
P2 P3
P1
P4
y
x
z
Rotasi Kiri (z)
x
z y
P2
P3
P1 P2 P3 P4
P4
x
y
P1
AVL: Penghapusan (lanjutan)
Tidak seperti halnya pada penyisipan, dalam penghapusan setelah kita lakukanrotasi pada z, maka kita mungkin juga harus melakukan rotasi pada moyang/leluhur(ancestors) dari z. Maka dari itu, kita harus meneruskan penelusuran sampai keakar paling atas.
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
31
Penghapusan: Contoh
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
32
• Simpul dengan nilai 32 akan dihapus
• Setelah menghapus 32, maka kita bergerak ke atas dan mencarisimpul pertama yang tidak seimbang, yaitu 44
• Kita tandai 44 ini dengan z, lalu anaknya yang memiliki tinggi lebihbesar sebagai y yaitu 62, dan anaknya y yang memiliki tinggi lebihbesar sebagai x yaitu bisa 78 atau pun 50 karena keduanya memilikitinggi yang sama. Kita pilih 78. Sekarang kasusnya adalah Kanan-Kanan, maka kita lakukan rotasi kiri.
Penghapusan: Contoh (lanjutan)
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
33
Penghapusan: Contoh (lanjutan)
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
34
PohonAVL.java
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
35
PohonAVL.java (lanjutan)
2018/2019(1) - IF184982 Pengantar Logika dan Pemrograman -MM Irfan Subakti
36