0% menganggap dokumen ini bermanfaat (0 suara)
72 tayangan34 halaman

Matrikulasi 2 Algo&Pemrograman

Algoritma brute force secara langsung mencocokkan pattern ke teks dengan menggeser pattern satu per satu sampai ditemukan kecocokan atau teks habis. Algoritma ini sederhana namun tidak efisien karena membutuhkan waktu O(nm) untuk mencocokkan pattern panjang m ke teks panjang n. [/ringkasan]

Diunggah oleh

Cosmas Samuel
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
72 tayangan34 halaman

Matrikulasi 2 Algo&Pemrograman

Algoritma brute force secara langsung mencocokkan pattern ke teks dengan menggeser pattern satu per satu sampai ditemukan kecocokan atau teks habis. Algoritma ini sederhana namun tidak efisien karena membutuhkan waktu O(nm) untuk mencocokkan pattern panjang m ke teks panjang n. [/ringkasan]

Diunggah oleh

Cosmas Samuel
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 34

Matrikulasi 02 :

Alg & Pemrograman

Topik : Strategi Brute Force


Dr. Pahala Sirait, ST, M.Kom

Magister Teknologi
Informasi
STMIK Mikroskil Medan
Definisi Brute Force
 Brute force adalah sebuah pendekatan
yang langsung (straightforward) untuk
memecahkan suatu masalah, biasanya
didasarkan pada pernyataan masalah
(problem statement) dan definisi konsep
yang dilibatkan.

 Algoritma brute force memecahkan


masalah dengan sangat sederhana, langsung
dan dengan cara yang jelas.
Contoh-contoh Brute
Force
1. Menghitung an (a > 0, n adalah
bilangan bulat tak-negatif)

an = a x a x … x a (n kali) , jika n > 0


=1 , jika n = 0

Algoritma: kalikan 1 dengan a


sebanyak n kali
2. Menghitung n! (n bilangan bulat tak-
negatif)

n! = 1 × 2 × 3 × … × n , jika n > 0
=1 , jika n = 0

Algoritma: kalikan n buah bilangan,


yaitu 1, 2, 3, …, n, bersama-sama
3. Mengalikan dua buah matrik yang
berukuran n × n.

 Misalkan C = A × B dan elemen-elemen matrik


dinyatakan sebagai cij, aij, dan bij
n
cij  ai1b1 j  ai 2b2 j    ain bnj   aik bkj
k 1

 Algoritma: hitung setiap elemen hasil


perkalian satu per satu, dengan cara
mengalikan dua vektor yang panjangnya n.
procedure PerkalianMatriks(input A, B : Matriks,
input n : integer,
output C : Matriks)
{ Mengalikan matriks A dan B yang berukuran n × n, menghasilkan
matriks C yang juga berukuran n × n
Masukan: matriks integer A dan B, ukuran matriks n
Keluaran: matriks C
}

Deklarasi
i, j, k : integer

Algoritma
for i1 to n do
for j1 to n do
C[i,j]0 { inisialisasi penjumlah }
for k  1 to n do
C[i,j]C[i,j] + A[i,k]*B[k,j]
endfor
endfor
endfor

Adakah algoritma perkalian matriks yang lebih efisien daripada brute


force?
4. Menemukan semua faktor dari
bilangan bulat n selain dari 1 dan n
itu sendiri.

 Definisi: Bilangan bulat a adalah faktor


dari bilangan bulat b jika a habis
membagi b.
procedure CariFaktor(input n : integer)
{ Mencari faktor dari bilangan bulat n selain 1 dan n itu sendiri.
Masukan: n
Keluaran: setiap bilangan yang menjadi faktor n dicetak.
}
Deklarasi
k : integer

Algoritma:
k1
ketemu  false
for k2 to n - 1 do
if n mod k = 0 then
write(k)
endif
endfor

Adakah algoritma pemfaktoran yang lebih baik daripada brute force?


5. Mencari elemen terbesar (atau
terkecil)

Persoalan: Diberikan sebuah himpunan yang


beranggotakan n buah bilangan bulat.
Bilangan-bilangan bulat tersebut dinyatakan
sebagai a1, a2, …, an. Carilah elemen terbesar
di dalam himpunan tersebut.
procedure CariElemenTerbesar(input a1, a2, ..., an : integer,
output maks : integer)
{ Mencari elemen terbesar di antara elemen a1, a2, ..., an. Elemen
terbesar akan disimpan di dalam maks.
Masukan: a1, a2, ..., an
Keluaran: maks
}
Deklarasi
k : integer

Algoritma:
maksa1
for k2 to n do
if ak > maks then
maksak
endif
endfor

Kompleksitas algoritma ini adalah O(n).


6. Sequential Search

Persoalan: Diberikan n buah bilangan bulat


yang dinyatakan sebagai a1, a2, …, an. Carilah
apakah x terdapat di dalam himpunan
bilangan bulat tersebut. Jika x ditemukan,
maka lokasi (indeks) elemen yang bernilai x
disimpan di dalam peubah idx. Jika x tidak
terdapat di dalam himpunan tersebut, maka
idx diisi dengan nilai 0.
procedure PencarianBeruntun(input a1, a2, ..., an : integer,
x : integer,
output idx : integer)
{ Mencari x di dalam elemen a1, a2, ..., an. Lokasi (indeks elemen)
tempat x ditemukan diisi ke dalam idx. Jika x tidak ditemukan, maka
idx diisi dengan 0.
Masukan: a1, a2, ..., an
Keluaran: idx
}
Deklarasi
k : integer

Algoritma:
k1
while (k < n) and (ak  x) do
k  k + 1
endwhile
{ k = n or ak = x }

if ak = x then { x ditemukan }
idxk
else
idx 0 { x tidak ditemukan }
endif

Kompleksitas algoritma ini adalah O(n).


Adakah algoritma pencarian elemen yang lebih efisien daripada brute
force?
7. Bubble Sort

• Apa metode yang paling lempang dalam


memecahkan masalah pengurutan?
Jawabnya adalah algoritma pengurutan
bubble sort.

• Algoritma bubble sort


mengimplementasikan teknik brute
force dengan jelas sekali.
procedure BubbleSort (input/output L : TabelInt, input n : integer)
{ Mengurutkan tabel L[1..N] sehingga terurut menaik dengan metode
pengurutan bubble sort.
Masukan : Tabel L yang sudah terdefenisi nilai-nilainya.
Keluaran: Tabel L yang terurut menaik sedemikian sehingga
L[1]  L[2]  …  L[N].
}
Deklarasi
i : integer { pencacah untuk jumlah langkah }
k : integer { pencacah,untuk pengapungan pada setiap
langkah }
temp : integer { peubah bantu untuk pertukaran }

Algoritma:
for i  1 to n - 1 do
for k  n downto i + 1 do
if L[k] < L[k-1] then
{pertukarkan L[k] dengan L[k-1]}
temp  L[k]
L[k]  L[k-1]
L[k-1]  temp
endif
endfor
endfor

Kompleksitas algoritma ini adalah O(n2).


Adakah algoritma pengurutan elemen elemen yang lebih efisien
daripada brute force?
8. Uji keprimaan

Persoalan: Diberikan sebuah bilangan bilangan


bulat positif. Ujilah apakah bilangan tersebut
merupakan bilangan prima atau bukan.
function Prima(input x : integer)boolean
{ Menguji apakah x bilangan prima atau bukan.
Masukan: x
Keluaran: true jika x prima, atau false jika x tidak prima.
}
Deklarasi
k, y : integer
test : boolean

Algoritma:
if x < 2 then { 1 bukan prima }
return false
else
if x = 2 then { 2 adalah prima, kasus khusus }
return true
else
yx
testtrue
while (test) and (y  2) do
if x mod y = 0 then
testfalse
else
yy - 1
endif
endwhile
{ not test or y < 2 }

return test
endif
endif

Adakah algoritma pengujian bilangan prima yang lebih efisien


daripada brute force?
9. Menghitung nilai polinom secara
brute force

Persoalan: Hitung nilai polinom

p(x) = anxn + an-1xn-1 + … + a1x + a0

pada titik x = x0.


function polinom(input x0 : real)real
{ Menghitung nilai p(x) pada x = x0. Koefisien-koefisein polinom sudah
disimpan di dalam tabel a. Derajat polinom (n) juga sudah terdefinisi.
Masukan: x0
Keluaran: nilai polinom pada x = x0.
}
Deklarasi
i, j : integer
p, pangkat : real

Algoritma:
p0
for in downto 0 do
pangkat1
for j1 to i do {hitung xi }
pangkatpangkat * x0
endfor
pp + ai * pangkat
endfor
return p

Kompleksitas algoritma ini adalah O(n2).


Perbaikan (improve):
function polinom2(input x0 : real)real
{ Menghitung nilai p(x) pada x = x0. Koefisien-koefisein polinom sudah
disimpan di
dalam tabel a. Derajat polinom (n) juga sudah terdefinisi.
Masukan: x0
Keluaran: nilai polinom pada x = x0.
}
Deklarasi
i, j : integer
p, pangkat : real

Algoritma:
pa0
pangkat1
for i1 to n do
pangkatpangkat * x0
pp + ai * pangkat
endfor

return p

Kompleksitas algoritma ini adalah O(n).


Adakah algoritma perhitungan nilai polinom yang lebih efisien
daripada brute force?
Karakteristik Algoritma
Brute Force
1. Algoritma brute force umumnya tidak “cerdas”
dan tidak efisien, karena ia membutuhkan jumlah
langkah yang besar dalam penyelesaiannya.
Kadang-kadang 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).
Algoritma Brute
Force (lanjutan)
Contoh-contoh lain
1. Pencocokan String (String Matching)

Persoalan: Diberikan
a. teks (text), yaitu (long) string yang
panjangnya n karakter
b. pattern, yaitu string dengan panjang m
karakter (m < n) yang akan dicari di dalam
teks.

Carilah lokasi pertama di dalam teks yang


bersesuaian dengan pattern.
Algoritma brute force:

1. Mula-mula pattern dicocokkan pada awal teks.

2. Dengan bergerak dari kiri ke kanan, bandingkan


setiap karakter di dalam pattern dengan karakter
yang bersesuaian di dalam teks sampai:

 semua karakter yang dibandingkan cocok atau sama


(pencarian berhasil), atau
 dijumpai sebuah ketidakcocokan karakter (pencarian belum
berhasil)

3. Bila pattern belum ditemukan kecocokannya dan teks


belum habis, geser pattern satu karakter ke kanan
dan ulangi langkah 2.
Contoh 1:
Pattern: NOT
Teks: NOBODY NOTICED HIM

NOBODY NOTICED HIM


1 NOT
2 NOT
3 NOT
4 NOT
5 NOT
6 NOT
7 NOT
8 NOT
Contoh 2:
Pattern: 001011
Teks: 10010101001011110101010001

10010101001011110101010001
1 001011
2 001011
3 001011
4 001011
5 001011
6 001011
7 001011
8 001011
9 001011
procedure PencocokanString(input P : string, T : string,
n, m : integer,
output idx : integer)
{ Masukan: pattern P yang panjangnya m dan teks T yang
panjangnya n. Teks T direpresentasika sebagai string
(array of character)
Keluaran: lokasi awal kecocokan (idx)
}
Deklarasi
i : integer
ketemu : boolean

Algoritma:
i0
ketemufalse
while (i  n-m) and (not ketemu) do
j1
while (j  m) and (Pj = Ti+j ) do
jj+1
endwhile
{ j > m or Pj  Ti+j }

if j = m then { kecocokan string ditemukan }


ketemutrue
else
ii+1 {geser pattern satu karakter ke kanan teks }
endif
endfor
{ i > n – m or ketemu }
if ketemu then
idxi+1
else
idx-1
endif

Kompleksitas algoritma: O(nm) pada kasus terburuk


O(n) pada kasus rata-rata.
2. Mencari Pasangan Titik yang
Jaraknya Terdekat

Persoalan: Diberikan n buah titik (2-D atau 3-D),


tentukan dua buah titik yang terdekat satu sama
lain. y
p5
p2
p4

p3 p6

p8
p1
p7

x
 Jarak dua buah titik di bidang 2-D, p1 = (x1, y1) dan p2
= (x2, y2) adalah (rumus Euclidean):
d  (x  x )  ( y  y )
1 2
2
1 2
2

 Algoritma brute force:


1. Hitung jarak setiap pasang titik.
2. Pasangan titik yang mempunyai jarak terpendek
itulah jawabannya.

 Algoritma brute force akan menghitung sebanyak


C(n, 2) = n(n – 1)/2 pasangan titik dan memilih
pasangan titik yang mempunyai jarak terkecil.

Kompleksitas algoritma adalah O(n2).


procedure CariDuaTitikTerdekat(input P : SetOfPoint,
n : integer,
output P1, P2 : Point)
{ Mencari dua buah titik di dalam himpunan P yang jaraknya
terdekat.
Masukan: P = himpunan titik, dengan struktur data sebagai
berikut
type Point = record(x : real, y : real)
type SetOfPoint = array [1..n] of Point
Keluaran: dua buah titik, P1 dan P2 yang jaraknya
terdekat.
}
Deklarasi
d, dmin : real
i, j : integer

Algoritma:
dmin9999
for i1 to n-1 do

for ji+1 to n do
d((Pi.x-Pj.x)2 + ((Pi.y-Pj.y)2)
if d < dmin then { perbarui jarak terdekat }
dmind
P1Pi
P2Pj
endif
endfor

endfor

Kompleksitas algoritma: O(n2).


Kekuatan dan Kelemahan
Metode Brute Force
 Kekuatan:

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 mangkus.

2. Beberapa algoritma brute force lambat


sehingga tidak dapat diterima.

3. Tidak sekontruktif/sekreatif teknik


pemecahan masalah lainnya.

 Ken Thompson mengatakan: “When in doubt,


use brute force”.

Anda mungkin juga menyukai