• Tidak ada hasil yang ditemukan

Modul Praktikum 10S2101 Algoritma dan Struktur Data (Prodi S1 SI dan TE) Tree

N/A
N/A
Protected

Academic year: 2022

Membagikan "Modul Praktikum 10S2101 Algoritma dan Struktur Data (Prodi S1 SI dan TE) Tree"

Copied!
9
0
0

Teks penuh

(1)

Modul Praktikum

10S2101 – Algoritma dan Struktur Data (Prodi S1 SI dan TE) Tree

Minggu : 10

Tujuan :  Mampu membedakan karakteristik struktur data non-linier dengan struktur data linier.

 Memahami konsep dasar pohon umum.

 Mampu menjelaskan varian-varian struktur data pohon.

 Mampu mendefinisikan dan menggambarkan skema diagram pohon pencarian biner (binary search tree).

 Mampu memprogram Binary Search Tree ADT untuk aksi insert, update, search, dan delete.

 Dengan kemampun memprogram Binary Search Tree ADT, mampu menulis program untuk struktur data yang lain dengan menerapkan konsep ADT.

Setoran : Kertas Jawaban dan kode program

Waktu penyetoran : 31 Oktober 2021 Pukul 22:00 WIB (paling lambat) Tempat penyetoran : E-course

Petunjuk Praktikum

 Anda dapat mengerjakan praktikum ini secara berkelompok dengan maksimum 3 mahasiswa per kelompok.

Referensi

 T.H. Cormen, C.E. Leiserson, R.L. Rivest and C. Stein, Introduction to Algorithm,3rd eds., MIT Press 2009.

 M.A. Weiss, Data Structures and Algorithm Analysis in C, 2nd Eds., Addison-Wesley, 1997.

A.

Teori

1. Jelaskan 2 contoh penerapan struktur data pohon (tree) pada bidang yang sesuai dengan program studi anda. Jelaskan pula bagaimana struktur data tersebut mengefisiensikan operasi-operasi pada contoh tersebut.

2. Gambarkanlah skema pohon umum untuk data yang ditunjukkan oleh Tabel 1 di bawah ini. Pohon berakar pada index_key = 12:

Tabel 1: Data pohon umum

index_key child_1 child_2 child_3 child_4

1 - - - -

2 - - - -

3 - - - -

4 6 9 - -

5 8 - - -

(2)

7 - - - -

8 15 - - -

9 - - - -

10 - - - -

11 16 18 3 -

12 11 13 17 -

13 4 1 - -

14 - - - -

15 - - - -

16 - - - -

17 7 5 10 14

18 2 - - -

Tentukanlah:

a. simpul akar, b. jumlah daun,

c. simpul – simpul daun, d. sub-pohon yang ada, e. kedalaman pohon, f. tinggi pohon,

g. kedalaman dan ketinggian simpul dengan kunci pencarian (search key) = 4

h. induk, anak, ancestors, dan descendants dari simpul dengan kunci pencarian = 18.

3. Mengacu ke soal no. 2, gambarkan skematik diagram implementasi pohon umum yang efisien dengan linked list untuk pohon tersebut.

4. Jika diberikan data berikut T = {1, 0, 3, 5, 17, 6, 4}.

a) Gambarkanlah skematik diagram pohon pencarian biner (binary search tree) yang seimbang untuk data tersebut.

b) Mengacu ke poin a., gambarkan skematik diagram pohon pencarian biner yang terbentuk jika simpul dengan nilai kunci 6 dihapus.

c) Mengacu ke poin b., gambarkanlah skematik diagram pohon pencarian biner yang terbentuk jika simpul baru dengan nilai kunci 7 dimasukkan.

5. Dengan menggunakan perhitungan waktu eksekusi fungsi rekursif, hitunglah

kompleksitas fungsi Insert pada pohon pencarian biner (binary search tree) yang diasumsikan seimbang. Fungsi ini diberikan di bagian Pemrograman.

6. Ada 3 teknik yang lazim digunakan untuk melakukan pelintasan pohon (tree) dimana ketiganya diklasifikasikan ke dalam metode depth first search. Ketiga teknik tersebut adalah: pre-order, in-order, dan post-order. Jelaskanlah ketiganya.

(3)

B.

Pemrograman

Pada praktikum ini, anda menggunakan bahasa pemrograman C untuk membuat Binary Search Tree ADT, yakni sebuah pohon biner dengan karakteristik dimana elemen yang lebih kecil diletakkan pada simpul sebelah kiri dan elemen yang lebih besar diletakkan pada simpul sebelah kanan. Asumsi yang kita gunakan adalah elemen pohon unik (tidak ada elemen yang sama). Pada dasarnya anda juga dapat membuat beberapa elemen dengan nilai yang sama dan menyesuaikan kode program.

Dengan pemahaman dan keahlian pemrograman yang anda miliki, diharapkan anda dapat membuat ADT untuk varian-varian tree yang lain.

1. Pemasukan elemen pada Binary Search Tree ADT

Komponen penyusun dari Binary Search Tree ADT ditunjukkan oleh gambar di bawah ini.

a. Edit berkas berikut dan simpan sebagai fatal.h. Berkas ini merupakan antarmuka (interface) dari Binary Search Tree ADT yang berisi deklarasi dan definisi fungsi yang mencetak pesan error ke monitor.

b. Selanjutnya, edit berkas di bawah ini dan simpan sebagai binary_search_tree.h.

interface

(binary_search_tree.h fatal.h)

implementation

(binary_search_tree.c)

klien

(klien_binary_search_tree.c)

(4)

Berkas binary_search_tree.h merupakan antarmuka yang berisi deklarasi variabel dan operasi (fungsi) yang dapat dilakukan pada Binary Search Tree ADT. Simpul pada tree direpresentasikan oleh sebuah struktur: struct TreeNode. TreeNode akan didefinisikan pada berkas implementasi. Root dari pohon pencarian biner direpresentasikan oleh tipe data BinarySearchTree yang dideklarasikan sebagai pointer ke struct TreeNode.

Fungsi yang menjadi perhatian kita saat ini ini adalah fungsi Insert yang tertulis pada baris ke-10. Fungsi ini menerima 2 parameter, yakni elemen yang akan dimasukkan (ElementType X) dan root (BinarySearchTree T). Tipe kembalian adalah BinarySearchTree. Dengan kata lain, operasi Insert selalu mengembalikan root ke klien.

c. Untuk implementasi, pertama sekali anda harus mendefinisikan struktur: struct TreeNode yang merupakan representasi simpul pada tree. Edit berkas berikut dan simpan sebagai binay_search_tree.c.TreeNode merupakan struktur yang terdiri atas 3 variabel anggota (member variables), Element, Left, dan Right. Left dan Right merupakan pointer ke anak di sebelah kiri (left child) dan anak di sebelah kanan right child) dari sebuah simpul. Left dan Right bernilai NULL jika tidak ada anak yang ditunjuknya.

d. Sebelum menulis fungsi Insert, ada baiknya kita implementasi dulu fungsi MakeEmpty (lihat antarmuka binary_search_tree.h, baris ke-13). Fungsi ini

bertujuan untuk mengosongkan tree. Tambahkan fungsi MakeEmpty ke dalam berkas implementasi: binay_search_tree.c.

Anda dapat melihat bahwa pengosongan pohon dilakukan dengan mengosongkan root T dan child nya, yakni T->Left dan T->Right. Fungsi tersebut mengembalikan NULL pointer ke klien.

(5)

e. Selanjutnya, anda akan mengimplementasikan fungsi Insert. Tambahkan fungsi Insert yang ada di bawah ini ke berkas implementasi binary_search_tree.c.

f. Untuk mengambil elemen (nilai kunci atau search key) dari struktur data, anda menggunakan fungsi Retrieve (lihat antarmuka binary_search_tree.h, baris ke- 12). Tambahkan definisi fungsi tersebut ke berkas implementasi:

binay_search_tree.c.

Fungsi Retrieve terlihat sederhana. Fungsi tersebut menerima parameter P, yakni sebuah simpul pada Binary Search Tree ADT dan mengembalikan elemen simpul tersebut. P bertipe Position, yakni sebuah tipe data yang didefinisikan sebagai pointer ke struct TreeNode (lihat antarmuka binary_search_tree.h, baris ke-7).

g. Selanjutnya, anda akan membuat program klien untuk mengakses struktur data. Anda akan membuat struktur data tree yang elemen – elemennya ditunjukkan oleh gambar di bawah ini.

(6)

Kode program di bawah ini menerapkan sebuah program klien untuk mengkonstruksi tree tersebut. Edit dan simpan sebagai: klien_binary_search_tree.c.

h. Kompilasi dan jalankan program sebagai berikut:

2. Pencarian elemen dan penghapusan pada Binary Search Tree ADT.

a. Edit berkas binary_search_tree.c yang telah anda buat sebelumnya dan tambahkan kode untuk fungsi Find, FindMin, dan FindMax yang masing – masing ditunjukkan oleh kode program di bawah ini. Find adalah fungsi untuk mencari simpul berdasarkan nilai elemen sebagai kunci pencarian. Fungsi ini mengembalikan simpul bertipe Position ke fungsi yang memangil atau ke klien.

Jika simpul tidak ditemukan, Find mengembalikan NULL. FindMin merupakan fungsi untuk mencari dan mengembalikan simpul dengan elemen terkecil, sedangkan FindMax mencari dan mengembalikan simpul dengan elemen terbesar.

(7)

b. Modifikasi program klien untuk tugas – tugas berikut: mencari elemen dengan nilai 3, mencari elemen minimum dan mencari elemen maksimum seperti ditunjukkan oleh program di halaman selanjutnya.

klien_binary_search_tree.c.

c. Kompilasi dan jalankan program sebagai berikut:

(8)

d. Fungsi Delete digunakan untuk menghapus sebuah simpul pada pohon. Untuk penghapusan, ada 2 kondisi yang perlu ditangani, yakni: (1) penghapusan simpul yang memiliki 2 anak dan (2) penghapusan simpul yang memiliki 1 anak atau tidak memiliki anak. Gambar di bawah ini memberikan contoh untuk penghapusan simpul yang memiliki 1 anak. Simpul dengan elemen bernilai 4 dihapus. Ulas lagi teori untuk penghapusan yang diberikan di kelas atau pun video pembelajaran untuk ke-2 kondisi penghapusan.

e. Edit berkas binary_search_tree.c dan tambahkan fungsi Delete yang diberikan di bawah ini. Baca komentar yang diberikan pada fungsi sehingga anda dapat memahami cara menangani 2 kondisi penghapusan yang dijelaskan di poin d sebelumnya.

f. Edit berkas klien_binary_search_tree.c dan tambahkan kode berikut:

g. Kompilasi dan jalankan program sebagai berikut:

(9)

C. Tugas Pemrograman: Red-Black Tree ADT

Menggunakan teknik yang telah kita praktekkan/ tulis untuk struktur data Binary Search Tree ADT, tulislah struktur data untuk red-black tree. Red-black tree adalah yang binary search tree dengan tambahan warna (merah atau hitam) pada setiap simpul. Warna simpul beserta batasan-batasan warna, termasuk jumlah warna dalam satu lintasan, menjamin pohon pencarian biner menjadi (hampir/ approximately) seimbang. Penjelasan rinci tentang red-black tree dan algoritma untuk operasi-operasi yang legal terhadapnya dapat anda baca di referensi [1] Bab 13, halaman 309. Red-Black Tree ADT yang anda tulis minimal harus memiliki fungsi:

a. Insert

b. Rotate (left and right) c. Delete

Setoran

1. Lembar jawaban untuk tugas Bagian A: Teori

2. Kode program untuk Tugas Bagian C: Red-Black Tree ADT

Keduanya diunggah melalui link setoran materi praktikum Minggu ke-10 di ecourse.del.ac.id.

Gambar

Tabel 1: Data pohon umum

Referensi

Dokumen terkait

Di dalam hubungan antara hukum dengan perilaku sosial, terdapat adanya unsur pervasive socialli (penyerapan sosial), artinya kepatuhan dan ketidakpatuhan terhadap hukum

Perkembangan manusia pada masa bayi (infancy) yang dimulai pada usia 0-3 tahun merupakan tahap kedua dari perjalanan hidup manusia. Pada masa ini pertumbuhan

Setelah melakukan pendaftaran user baru oleh admin seperti yang dapat dilihat pada Gambar 4.4 di atas, maka pada saat yang bersamaan juga user baru tersebut akan diminta untuk

Selanjutnya, berdasarkan apa yang telah diuraikan maka saran dalam penelitian ini adalah pertama, jika kesetaraan gender menjadi salah satu solusi dalam peningkatan

Tujuan DPM-LUEP untuk pembelian gabah/beras petani adalah : (a) Menjaga stabilitas harga gabah/beras yang diterima petani pada tingkat yang wajar; (b) Meningkatkan pendapatan

Dokter memberikan nasihat dan meresepkan obat, salah satunya adalah tablet besi dengan dosis yang sesuai dengan kondisi pasien saat ini... Pasien tidak mengalami trauma atau

Pada saat Peraturan Pemerintah ini mulai berlaku, Peraturan Pemerintah Nomor 17 Tahun 2001 tentang Tarif atas Jenis Penerimaan Negara Bukan Pajak yang Berlaku pada Badan Pengawas

Seperti yang telah kita pelajari pada praktikum 3, untuk menyimpan data yang umum, kita dapat memanfaatkan class Object yang dibuat dalam format generic.. Berikut