Soal :
1) Jelaskan tentang algoritma Divide And Conquer dan berikan satu contoh permasalahan
dan penyelesaiannya menggunakan Algoritma tersebut?
2) Diketahui suatu data dengan 10 nilai yang tidak berurutan, data tersebut akan diurut
menaik dengan metode Merge Sort, tugas anda buat algoritma Merge Sort Tersebut dan
buat 10 nilai data yang akan diselesaikan dengan algoritma tersebut . Jelaskan
komleksitas pada algoritma Merge Sort ?
3) Diketahui sebuah teks : Tatik meminjami Tatia buku. Dicari pada indek keberapa
Patten Tatia mulai cocok pada teks tersebut diatas. Gambarkan proses pencarian
dengan menggunakan algoritma KMP dengan langkah berikut:
a) Buat algoritma fungsi pinggiran dan hitung fungsi pinggiran untuk pattern .
Jawaban :
1) Algoritma Divide and Conquer merupakan algoritma yang sangat populer di dunia Ilmu
Komputer. Divide and Conquer merupakan algoritma yang berprinsip memecah-mecah
permasalahan yang terlalu besar menjadi beberapa bagian kecil sehingga lebih mudah
untuk diselesaikan. Langkah-langkah umum algoritma Divide and Conquer :
Contoh permasalahan :
Binary search merupakan salah satu algoritma pencarian yang paling efisien, dengan
kompleksitas O(logn). Algoritma ini memanfaatkan teknik divide and conquer dengan
memecah lingkup pencarian data menjadi setengahnya pada setiap kali divide.
Kekurangan dari binary search yaitu bahwa algoritma ini hanya dapat digunakan pada
sebuah data atau lsit yang telah terurut.
Mari kita lihat cara kerja binary search. Misalkan kita diberikan data berupa list bilangan
seperti berikut: [1, 2, 4, 6, 7, 8, 9, 10] dan diminta untuk mencari letak angka 2 pada list
tersebut. Sebelum mulai menjalankan algoritma, pastinya kita harus mengetahui nilai-
nilai awal terelbih dahulu. Adapun nilai awal yang dibutuhkan untuk
fungsi binary_search adalah sebagai berikut:
search_val = 2
min_idx =0
max_idx = len(data) - 1 # 7
Nilai indeks minimal (batas awal pencarian) yang pertama tentunya adalah 0, dengan
nilai maksimal (batas akhir pencarian) adalah ukuran dari list itu sendiri. Di langkah awal
binary search, dilakukan perhitungan terhadap nilai tengah
dari min_idx dan max_idx terlebih dahulu, untuk mendapatkan titik awal pencarian.
Perhitungan nilai tengah dilakukan pada kode berikut: mid_idx = (min_idx + max_idx) //
2
Setelah mendapatkan nilai tengah, kita lalu melakukan cek apakah nilai dari data pada
indeks tersebut lebih besar atau lebih kecil dibandingkan nilai yang akan kita cari (2).
Langkah pengecekan ini dilakukan pada perintah if berikut:
else:
Dalam kasus ini, nilai dari mid_idx adalah 3, dan karena data[3] berisi 6, maka kita akan
melakukan pemotongan terhadap seluruh nilai pada data setelah 6, karena nilai tersebut
sudah pasti tidak diperlukan lagi (ingat, data harus terurut pada binary search). Kita lalu
memanggil fungsi binary_search lagi, kali ini dengan mencari hanya pada submasalah
(list) berikut (perhatikan bagaimana pada pemanggilan binary_search yang kedua
nilai max_idx kita ubah menjadi mid_idx - 1): [1, 2, 4] Dan dengan mengaplikasikan
logika yang sama dengan tahap sebelumnya, kita akan langsung menemukan bilangan
yang dicari.
1. Misalnya diketahui table A yang berukuran n eleman sudah berisi nilai integer. Kita
ingin menentukan nilai minimum dan nilai maksimum sekaligus di dalam table
tersebut. Misalkan tabel A berisi elemen-elemen sebagai berikut :
1. Untuk kasus n = 1 atau n = 2, SOLVE : Jika n = 1, maka min = maks = An. Jika n
= 2, maka bandingkan kedua elemen untuk menentukan min dan maks.
DIVIDE : Bagi dua table A secara rekursif menjadi dua bagian yang berukuran
sama, yaitu bagian kiri dan bagian kanan.
CONQUER : Terapkan algoritma Divide and Conquer untuk masing-masing
bagian, dalam hal ini min dan maks dari table bagian kiri dinyatakan dalam
peubah min1 dan maks1, dan min dan maks dari table bagian kanan dinyatakan
dalam peubah min2 dan maks2.
COMBINE : Bandingkan min1 dan min2 untuk menentukan min table A, serta
bandingkan maks1 dan maks2 untuk menentukan maks table A.
Algoritma Kompleksitas :
Proses penggabungan (merging) dilakukan antara sub-sub bagian dengan
memperhatikan urutan data yang diinginkan (ascending/kecil ke besar). Proses
penggabungan ini dilakukan sampai semua data tergabung dan terurut sesuai urutan
yang diiginkan. Kompleksitas algoritma merge sort adalah O(n log n).
3) a Algoritma pencarian string ini dapat juga diklasifikasikan menjadi 3 bagian menurut
arah pencariannya ,berikut ini adalah algoritma yang termasuk dalam algoritma ini.
1. Dari arah yang paling alami yaitu dari kiri ke kanan, yang merupakan arah untuk
membaca, algoritma yang termasuk kategori ini adalah:
- Algoritma Brute Force. Anda bisa membaca lebih detail tentang algoritma tersebut pada
judul artikel ini "Algoritma Brute Force"
- Algoritma dari Morris dan Pratt, yang kemudian dikembangkan oleh Knuth, Morris, dan
Pratt
2. Kategori kedua yaitu dari arah kanan ke kiri, arah yang biasanya menghasilkan hasil
terbaik secara praktikal, contohnya adalah:
- Algoritma dari Boyer dan Moore, yang kemudian banyak dikembangkan, menjadi
Algoritma turbo Boyer-Moore, Algoritma tuned Boyer-Moore, dan Algoritma Zhu-
Takaoka;
3. Dan kategori terakhir yaitu adalah dari arah yang ditentukan secara spesifik oleh
algoritma tersebut, arah ini menghasilkan hasil terbaik secara teoritis, algoritma yang
termasuk kategori ini adalah:
- Algoritma Colussi
- Algoritma Crochemore-Perrin
Teks : Tatik meminjami Tatia buku
Pattern : atik
b. algoritma KMP
c. s=0 atik
s=1 atik
s=2 atik
s=3 atik
s=4 atik
s=5 atik
s=6 atik
s=7 atik