Anda di halaman 1dari 13

Devide and

Conquer
PERTEMUAN 9
Nama : Wava Lativa Azzahra
Kelas : IF21A
NIM : 21416255201122
Membangun Algoritma Divide and Conquer

Devide: pada langkah ini kita memecahkan masalah atau data ke dalam bentuk
yang sama, tetapi dalam ukuran yang lebih kecil. Pemecahan langkah
biasanya dilakukan dengan menggunakan algoritma rekursif, sampai
ukuran data menjadi sangat kecil dan dapat diselesaikan dengan
algoritma sederhana.

Conquer Conquer (Menaklukkan): dalam langkah ini kita mencoba


menyelesaikan masalah atau data yang telah dipecahkan pada langkah
pertama, dengan menggunakan algoritma sederhana.

Thanks slide Combine (Menggabungkan): setelah menjalankan langkah conquer,


tentunya kita harus menggabungkan kembali hasil dari masing-masing
pecahan yang ada, untuk mendapatkan hasil akhir kalkulasi. Langkah
combine mencoba mencapai hal tersebut.
1
Mari kita lakukan analisis pada fungsi sum di atas, untuk melihat kompleksitas alg

def sums(lst):
if len(lst) >= 1: # 1 langkah
return lst[0] # 1 langkah
 
mid = len(lst) // 2 # 1 langkah
left = sums(lst[:mid]) # sums(mid) langkah
right = sums(lst[mid:]) # sums(mid) langkah
 
return left + right # 1 langkah
Mari kita lakukan analisis pada fungsi sum di atas, untuk melihat kompleksitas alg

• yang secara matematis dapat dituliskan seperti berikut:


f(n)=4+f()+f()
=4+2f()
• karena ukuran dari mid adalah panjang list (nn) dibagi
dua dengan begitu, kompleksitas dari algoritma adalah:
f(n)=2f()=2(2())
=2(2(2()))...
= )
 
Mari kita lakukan analisis pada fungsi sum di atas, untuk melihat kompleksitas alg

• dengan syarat berhenti adalah ketika k≥1k≥1,


sehingga:
=1
=
=
Kompleksitas dari fungsi sums adalah () (), meningkat dari () () pada algoritma awal.
Secara umum, kompleksitas algoritma D&C adalah () (),
jika ukuran data adalah  , dan pada setiap langkahnya kita membagikan masalah
ke dalam  sub-masalah.
Contoh D&C 1: Merge Sort
Contoh D&C 1: Merge Sort
Langkah Kerja Merge Sort
Contoh D&C 2: Binary Search
 implementasi binary search menggunakan python
cara kerja binary search

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:

data = [1, 2, 4, 6, 7, 8, 9, 10]


search_val = 2
min_idx = 0
max_idx = len(data) - 1 # 7
cara kerja binary search

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


cara kerja binary search

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:
 
if data[mid_idx] > search_val:
# nilai lebih besar daripada 2
elif data[mid_idx] < search_val:
# nilai lebih kecil daripada 2
else:
# nilai adalah 2 (ditemukan)
cara kerja binary search

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]
THANK
YOU!
APA ADA PERTANYAAN ?

Anda mungkin juga menyukai