Upload
heppy-vela
View
61
Download
8
Embed Size (px)
Citation preview
ANALISIS ALGORITMA
(PENCARIAN NILAI MAX DENGAN MENGGUNAKAN
METODE DIVIDE AND CONQUER DAN METODE BRUTE FORCE)
Oleh
Adnan P. Rihi Pati (1006082001)
Apriyanto Arkiang (1006082003)
Sepri Y. Obije (1006082014)
Esrit Dorina Nenabu (1006082005)
ILMU KOMPUTER
UNIVERSITAS NUSA CENDANA
KUPANG
2013
Abstrak
Dalam sebuah program, running time menjadi alasan efisiennya suatu program. Pada
pencarian nilai max dan min dari suatu program dapat menggunakan berbagai
algoritma,misalnya algoritma Devide and Conqure dan algoritma Brute Force. Namun
diantara kedua algoritma ini, Devide and Conqure dirasakan lebih efisien untuk penggunaan
running time-nya walaupun algoritma yang digunakan cukup rumit.
Kata kunci: nilai max,devide and conqure,brute force.
1. PENDAHULUAN
Dalam mengerjakan suatu program,
banyak cara yang digunakan untuk
mencapai hasil yang diharapkan. Namun
cara-cara yang digunakan kadang efektif
dan kadang kurang efektif. Keefektifan
suatu program dapat dilihat ketika program
program tersebut dijalankan (di-run) dan
dilihat waktu berjalannya (running time)
yang dihasilkan.
Dalam program, keefektifan suatu
program dapat diperhatikan melalui
algoritma apa yang digunakan. Algoritma-
algoritma tersebut berpengaruh dalam waktu
mengeksekusi program tersebut. Banyak
algoritma yang sering digunakan untuk
menyelesaikan masalah seperti Algoritma
Colussi, Algoritma Crochemore-Perrin,
Algoritma turbo Boyer-Moore, algoritma
pencarian binery, algoritma divide and
conquer dan algoritma brute force.
Dalam menyelesaikan masalah efisien
program, biasanya digunakan algoritma
divide and conquer. Algoritma divide and
conquer merupakan algoritma yang sangat
populer. Prinsip dari algoritma ini adalah
memecah-mecah masalah yang ada menjadi
beberapa bagian kecil sehingga lebih mudah
untuk diselesaikan. Selain algoritma divide
and conquer, ada juga algoritma brute force.
Algoritma brute force merupakan algoritma
pencocokan string yang ditulis tanpa
memikirkan peningkatan performa.
Algoritma ini sangat jarang dipakai dalam
praktik, namun berguna dalam studi
pembanding dan studi-studi lainnya.
Pada pencarian nilai maks dan min pada
sebuah program, dapat menggunakan
algoritma devide and conquer dan algoritma
brute force. Dengan menggunakan
algoritma ini, dapat meningkatkan efisien
dari suatu program.
2. LANDASAN TEORI
A. ALGORITMA BRUTE FORCE
Brute force adalah sebuah
pendekatan yang sangat jelas
(straightforward) untuk memecahkan
suatu persoalan, biasanya didasarkan
pada problem statement dan definisi
konsep yang dilibatkan.Algoritma brute
force memecahkan masalah dengan
sangat sederhana, langsung dan dengan
cara yang jelas .
Teknik algoritma Brute-force
merupakan suatu teknik yang biasa
digunakan bila penyusun algoritma
lebih mempertimbangkan memperoleh
solusi dari problem secara langsung/apa
adanya, tanpa mempertimbangkan
efisiensi dengan meminimumkan jumlah
operasi yang dapat dilakukan untuk
mencapai solusi tersebut
Cara kerja Algoritma Brute Force
1. Enumerasi (list) setiap solusi yang
mungkin dengan cara yang
sistematis.
2. Evaluasi setiap kemungkinan solusi
“satu per satu” dan simpan solusi
terbaik yang ditemukan sampai
sejauh ini (the best solusi found so
far).
3. Bila pencarian solusi berakhir,
umumkan solusi terbaik (the winner)
Karakteristik Algoritma Brute Force
1. Algoritma brute force umumnya
tidak “cerdas” dan tidak efisien,
karena ia membutuhkan jumlah
langkah yang besar dalam
penyelesaiannya. Kadangkadang
algoritma brute force disebut juga
algoritma naif (naïve algorithm).
2. Algoritma brute force seringkali
merupakan pilihan yang kurang
disukai karena ketidakefisienannya
itu, tetapi dengan mencari pola-pola
yang mendasar, keteraturan, atau
trik-trik khusus, biasanya akan
membantu kita menemukan
algoritma yang lebih cerdas dan
lebih efisien.
3. Untuk masalah yang ukurannya
kecil, kesederhanaan brute force
biasanya lebih diperhitungkan
daripada ketidakefisienannya.
Algoritma brute force sering
digunakan sebagai basis bila
membandingkan beberapa alternatif
algoritma yang efisien.
4. Algoritma brute force seringkali
lebih mudah diimplementasikan
daripada algoritma yang lebih
canggih, dan karena
kesederhanaannya, kadang-kadang
algoritma brute force dapat lebih
efisien (ditinjau dari segi
implementasi).
5. Meskipun bukan metode yang
efisien, hampir semua masalah dapat
diselesaikan dengan algoritma brute
force. Sukar menunjukkan masalah
yang tidak dapat diselesaikan dengan
metode brute force. Bahkan, ada
masalah yang hanya dapat
diselesaikan dengan metode brute
force.
Contoh: mencari elemen terbesar di
dalam senarai.
Kelebihan dan Kelemahan Metode
Brute Force
Kelebihan:
1. Metode brute force dapat digunakan
untuk memecahkan hampir sebagian
besar masalah(wide applicability).
2. Metode brute force sederhana dan
mudah dimengerti.
3. Metode brute force menghasilkan
algoritma yang layak untuk beberapa
masalah penting seperti pencarian,
pengurutan, pencocokan string,
perkalian matriks.
4. Metode brute force menghasilkan
algoritma baku (standard) untuk
tugas-tugas komputasi seperti
penjumlahan/perkalian n buah
bilangan, menentukan elemen
minimum atau maksimum di dalam
tabel (list).
Kelemahan:
1. Metode brute force jarang
menghasilkan algoritma yang
efisien.
2. Beberapa algoritma brute force
lambat sehingga tidak dapat
diterima.
3. Tidak sekontruktif/sekreatif teknik
pemecahan masalah lainnya.
B. ALGORITMA DIVIDE AND
CONQUER
Algoritma Divide and Conquer
merupakan algoritma yang sangat
populer di dunia Ilmu Komputer. Divide
and Conquer merupakan algoritma yang
mempunyai prinsip, yaitu memecah-
mecah permasalahan yang terlalu besar
menjadi beberapa bagian kecil sehingga
lebih mudah untuk diselesaikan.
Langkah-langkah umum algoritma
Divide and Conquer :
Divide : Membagi masalah menjadi
beberapa upa-masalah yang
memiliki kemiripan dengan masalah
semula namun berukuran lebih kecil
( idealnya berukuran hampir sama ).
Conquer : Memecahkan
(menyelesaikan) masing-masing
upa-masalah ( secara rekursif ).
Combine : Menggabungkan solusi
masing-masing upa-masalah
sehingga membentuk solusi masalah
semula.
Langkah kerja Divide and Conquer :
1. Sebuah permasalahan dibagi
menjadi beberapa bagian yang lebih
sederhana dari permasalahan yang
sama, idealnya dengan ukuran yang
sama.
2. Bagian yang lebih sederhana
diselesaikan (biasanya secara
rekursif)
3. Jika diperlukan solusi yang didapat
dari bagian yang lebih sederhana
digabungkan untuk mendapatkan
penyelesaian untuk masalah yang
sebenarnya.
Objek masalah yang di bagi adalah
masukan (input) atau instances yang
berukuran n: tabel (larik), matriks, dan
sebagainya, bergantung pada
masalahnya. Tiap-tiap upa-masalah
mempunyai karakteristik yang sama (the
same type) dengan karakteristik masalah
asal, sehingga metode Divide and
Conquer lebih natural diungkapkan
dalam skema rekursif. Sesuai dengan
karakteristik pembagian dan pemecahan
masalah tersebut, maka algoritma ini
dapat berjalan baik pada persoalan yang
bertipe rekursif ( perulangan dengan
memanggil dirinya sendiri ). Dengan
demikian, algoritma ini dapat
diimplementasikan dengan cara iteratif (
perulangan biasa ), karena pada
prinsipnya iteratif hampir sama dengan
rekursif.
Salah satu penggunaan algoritma ini
yang paling populer adalah dalam hal
pengolahan data yang bertipe array
( elemen larik ). Karena pengolahan
array pada umumnya selalu
menggunakan prinsip rekursif atau
iteratif. Penggunaan secara spesifik
adalah untuk mencari nilai minimal dan
maksimal serta untuk mengurutkan
elemen array. Dalam hal pengurutan ini
ada empat macam algoritma pengurutan
yang berdasar pada algoritma Divide
and Conquer, yaitu merge sort, insert
sort, quick sort, dan selection sort.
Merge sort dan Quick sort mempunyai
kompleksitas algoritma O (n² log n). Hal
ini lebih baik jika dibandingkan dengan
pengurutan biasa dengan menggunakan
algoritma brute force.
Hal-hal yang penting pada Divide and
Conquer :
1. Branching Factor
Branching factor dalam algoritma
divide and conquer adalah jumlah
dari subproblem yang akan dibagi
dari sebuah problem awal. Ini adalah
langkah nyata dari algoritma divide
and conquer, didalam proses
pembagian yang sebenarnya, jumlah
dari branching factor harus 2 atau
lebih, karena jika tidak problem
tidak bisa dibagi. Banyak jenis
algoritma ini termasuk pula
algoritma komputasi geometric yang
memiliki branching factor
berjumlah.
2. Balance
Sebuah algoritma divide and
conquer dikatakan balance jika
problem awal dibagi menjadi sub-
sub problem dengan ukuran yang
sama. Yang artinya jumlah dari
keseluruhan ukuran subproblem
sama dengan ukuran problem awal
(initial problem). Algoritma
Mergesort dan binary tree, dan sama
halnya dengan algoritma reduksi &
prefix sum adalah beberapa contoh
algoritma divide and conquer yang
seimbang (balance).
3. Data Dependence of Divide
Function
Algoritma divide and conquer
memiliki sebuah fungsi pembagian
terhadap data yang memiliki
ketergantungan, artinya jika ukuran
relatif dari sebuah subproblem
tergantung pada proses input
datanya. Ini adalah salah satu ciri
dari algoritma yang tidak seimbang,
salah satu contohnya adalah
algoritma quicksort yang akan
membagi subproblem dengan fungsi
data-dependent divide.
4. Control Parallelism or
Sequentiality
Algoritma divide and conquer
dikatakan berurutan (sequential) jika
subproblem dieksekusi sesuai
dengan perintah program.
Paralelisasi dari algoritma divide and
conquer yang terurut pertama kali
didefinisikan oleh Mou’s
Divacon[Mou90], yang terjadi ketika
hasil dari salah satu sub-eksekusi
diperlukan oleh subeksekusi yang
lain. Dalam kasus ini hasil dari
subtree pertama diberikan (passing)
kepada proses komputasi subtree
kedua, supaya hasil akhir tersebut
bisa digunakan sebagai nilai
awalnya.
Kelebihan dan Kelemahan Metode
Divide and Conquer
Kelebihan
1. Umumnya meningkatkan pada Brute
Force dengan satu basis efisiensi
kelas
2. Mudah untuk menganalisis
menggunakan Recurrence Templates
3. Idealnya cocok untuk perhitungan
paralel
Kelemahan
1. Sering membutuhkan rekursi, yang
menyebabkan overhead
2. Dapat diterapkan dan inferior untuk
solusi algoritmik yang lebih
sederhana
3. HASIL DAN
PEMBAHASAN
Untuk mencari nilai max dalam
suatu deret angka dalam sebuah
program, kita dapat menggunakan
algoritma Brute Force atau algoritma
Devide and Conquer. Namun ketika
dijalankan, kita mencari di antara
algoritma ini manakah yang lebih efisien
dalam running time-nya.
Berikut algoritma yang digunakan
untuk mncari nilai max dengan
menggunakan algoritma Brute Force
'Untuk proses algoritma Brute force Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim max As Integer = 0 Dim mulai, henti As VariantType mulai = Now.TimeOfDay.TotalMilliseconds For i = 0 To Convert.ToInt32(TextBox1.Text) - 1 If max < data(i) Then max = data(i) Next i Label2.Text = "MAX = " & max henti = Now.TimeOfDay.TotalMilliseconds Label4.Text = "TIME = " & (henti - mulai) & " MILISECOND" End Sub
Berikut algoritma yang digunakan
untuk mncari nilai max dengan
menggunakan algoritma Devide and
Conquer
'Untuk proses algo Devide and Conquer Sub rekur2(angka() As Integer, kiri As Integer, kanan As Integer, ByRef max As Integer) Dim max1, max2, mid As Integer If kiri = kanan Then max = angka(kiri) Else If (kiri = kanan - 1) Then If (angka(kiri) < angka(kanan)) Then max = angka(kanan) Else max = angka(kiri) End If Else mid = (kiri + kanan) / 2 rekur2(angka, kiri, mid, max1) rekur2(angka, mid + 1, kanan, max2)
If (max1 < max2) Then max = max2 Else max = max1 End If End If End If End Sub
Berikut merupakan hasil run dari
program tersebut
Proses diatas dilakukan berulang-
ulang dengan perubahan banyak
kapasitas data. Dengan perubahan data,
maka akan menghasilkan data sebagai
berikut
Dari data di atas, maka dapat dilihat
bahwa dengan jumlah data yang sama
namun dengan algoritma berbeda maka
akan menghasilkan waktu yang berbeda.
Dapat dilihat bahwa waktu yang
diperlukan untuk menjalankan program
dengan algoritma Brute Force lebih
singkat dibandingkan dengan waktu
yang dihasilkan menggunakan algoritma
Divide and Conqure.
Pada brute force sebelumnya data
terlebih dahulu dimasukkan secara acak
dengan jumlah tampungan sesuai
inputan dimana angka yang diacak
berada pada range 0 – 9999 kemudian
akan dilakukan perulangan sebanyak
inputan lalu akan diperiksa kondisinya
deengan membandingkan nilai max
yang awalnya 0 dengan data pada indeks
ke-i, jika max < dibadingkan data ke-i
maka max = data ke-i.
Pada devide and conqure, data
terlebih dahulu dimasukkan secara acak
dengan jumlah tampungan sesuai
inputan dimana angka yang diacak
berada pada range 0 – 9999 kemudian
divide and conquer ini menggunakan
metode rekursif, dimana metode rekursif
ini akan memanggil dirinya sendiri.
Metode ini akan membagi dua deret data
sampai pointer kanan = pointer kiri atau
pointer kanan-1 = pointer kiri. Setelah
membagi deret angka menjadi dua,
program akan membandingkan ke dua
data tersebut dan jika salah satu lebih
besar maka akan disimpan pada sebuah
variabel dimana variabel tersebut akan
digunakan lagi ketika data-data tersebut
akan digabungkan dan apabila semua
data tersebut akan digabungkan maka
akan didapat variabel yang berisi nilai
maksimum dari data-data yang ada.
Untuk algoritma Brute force,
kompleksitas algoritma ini adalah O(n)
sedangkan untuk running time brute
force adalah : n-1 multiplications.
Sedangkan untuk algoritma Devide and
Conqure, kompleksitas algoritma ini
adalah O(n ²log n) dan untuk running
time algoritma divide and conquer
T(n) = 2*T(n/2) + 1 = n-1
4. PENUTUP
Teknik algoritma Brute-force
merupakan suatu teknik yang biasa
digunakan bila penyusun algoritma
lebih mempertimbangkan memperoleh
solusi dari problem secara langsung/apa
adanya, tanpa mempertimbangkan
efisiensi dengan meminimumkan jumlah
operasi yang dapat dilakukan untuk
mencapai solusi tersebut
Divide and Conquer merupakan
algoritma yang berprinsip memecah-
mecah permasalahan yang terlalu besar
menjadi beberapa bagian kecil sehingga
lebih mudah untuk diselesaikan.
Dengan melakukan pencarian nilai
maksimum dengan menggunakan
algoritma Brute force dan Devide and
Conqure, dapat dilihat perbedaan-
perbedaan dari kedua algoritma ini. Dari
segi teknik pemrograman, Brute Force
tidak terlalu rumit untuk dipahami
sedangkan untuk Devide and Conqure,
sering kali sulit dipahami karena sering
kali menggunakan teknik rekursi. Pada
implementasinya, Brute Force
mendapatkan waktu yang lebih cepat
daripada Devide and Conqure. Hal ini
disebabkan karena algoritma devide and
Conqure lebih kompleks, dimana
algoritma ini membagi data menjadi dua
bagian dan memprosesnya satu per satu
sehingga waktu yang dibutuhkan lebih
lama. Dan setelah memisahkan dan
mendapat nilai maks dari tiap bagian,
kemudian menggabungkan menjadi satu
keutuhan data lagi untuk mendapatkan
nilai maks dari data tersebut. Namun
pada kenyataannya, Devide and
Conqure memiliki running time yang
lebih cepat dibandingkan metode Brute
Force, jika diproses secara bersamaan.