Design and Analysis of Algorithms CNH2G3

advertisement
Design and Analysis of Algorithms CNH2G3- Week 6
Brute Force Algorithm Part 1: Design Strategy
Dr. Putu Harry Gunawan (PHN)
Daftar Isi
1 Introduction and Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2 Contoh-contoh algoritma brute force . . . . . . . . . . . . . . . . . . . . . .
3
3 Karakteristik algoritma brute force . . . . . . . . . . . . . . . . . . . . . . .
7
4 Advantages and Disadvantages of brute force Algorithm . . . . . . . . .
8
5 Homework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
Review
Tentukanlah kompleksitas waktu asimtotik untuk permasalahan di bawah ini
1. Exercise: diberikan relasi rekursi dari masalah Barisan Fibonacci berikut


n=0
 0,
T (n) =
1,
n=1


T (n − 1) + T (n − 2),
n≥2
2. Exercise: diberikan relasi rekursi berikut


0,
n=0



 1,
n=1
T (n) =

2,
n=2



 7T (n − 1) − 15T (n − 2) + 9T (n − 3),
3. Exercise: diberikan relasi rekursi berikut (QUIZ II semester lalu)


n=0
 0,
1
T (n) =
n=1
10 ,


n
1
49T 7 − 100 n,
n≥2
1
(0.1)
(0.2)
n≥3
(0.3)
Theorem 0.1 (Master) Untuk suatu general Divide and Conquer recurrence:
n
T (n) = aT
+ f (n)
(0.4)
b
Jika f (n) ∈ O(nd ) dengan d ≥ 0, dalam persamaan general Divide and Conquer
recurrence di atas, maka

d

a < bd
 O(n )
T (n) ∈
(0.5)
O(nd log n)
a = bd

b log a

d
)
a>b
O(n
Exercise
Gunakan Teorema Master untuk mencari kompleksitas waktu asimtotik pada relasi rekursi
untuk masalah Minimum dan Maksimum di bawah ini:


n=1
 0,
T (n) =
(0.6)
1,
n=2


n
2T 2 + 2,
n>2
1
Introduction and Definitions
Setelah pemaparan analisi algoritma, maka akan dilanjutkan dengan strategi mendesain sutau algoritma. Bab ini ditujukan untuk berbagai macam strategi yang ada pada
algoritma tipe Brute Force. Berikut adalah definisi dari Brute Force:
Definition 1.1 (Levitin) Brute force is a straightforward approach to solving
a problem, usually directly based on the problem statement and definitions of the
concepts involved.
Definition 1.2 (Levitin) Brute force adalah pendekatan yang langsung/lempeng untuk menyelesaikan suatu masalah, biasanya secara langusng sesuai dengan pernyataan masalah dan definisi dari konsep yang ada.
Kata ”force” mempengaruhi definisi strategi yaitu suatu mesin/robot/komputer bukan sesutu yang berbau pintar( intelligent). ” Just do it! ” dapat merupakan cara lain
untuk mendeskripsikan pengertian dari brute force. dan tentu saja strategi brute-force
merupakan strategi yang paling mudah diaplikasikan.
Sebagai contoh, misalkan masalah eksponensial: Hitung an untuk a ∈ R − {0} dan
n ∈ Z + . Meskipun masalah ini terlihat trivial, akana tetapi masalah ini dapat digunakan
sebagai ilustrasi dari mendesain strategi suatu algoritma, dalam hal ini bisa dalam brute
force. Secara definisi
(1.1)
an = |a × a ×
{z· · · × a}
n kali
2
Dari definisi diatas, maka agoritma brute force akan mengalikan a sebanyak n kali.
Dan, tentu saja dengan cara ini akan mendapatkan O(n). Jika tidak menggunakan brute
force, maka waktu asimtotiknya dapat diperkecil seperti pada contoh -contoh berikut
berikut:
Example 1.3 Bilangan n dapat direpresentasikan menjadi bilangan 2 pangkat
n = 2k1 + 2k2 + · · · + 2km
sehingga
k1
an = a2
+ a2
k2
+ · · · + a2
km
dengan kompleksitas waktu yang digunakan adalah O(log n). Sebagai contoh hitung a25 , maka
(25)10 = (11001)2
yang dapat direpresentasikan menjadi bilangan biner sehingga:
a25 = a4 + a3 + 0 + 0 + a0 .
Example 1.4 Contoh lain dengan kompleksitas waktu O(log n) adalah
(
(an/2 )(an/2 )
(n mod 2 = 0),
f (x) = an =
n−1
n−1
otherwise,
a(a 2 )(a 2 )
Example 1.5 Contoh lain bentuk rekursif dengan kompleksitas waktu O(log n)
adalah
(
n−1
if n ganjil,
a(a2 ) 2
n
f (x) = a =
n
2
(a ) 2
if n genap,
Dari contoh di atas dapat kita simpulkan bahwa, brute force, memecahkan masalah
dengan sangat sederhana, langsung, dan dengan cara yang jelas (obvious way).
2
Contoh-contoh algoritma brute force
Selain contoh menghitung pangkat eksponensial pada subbab sebelumnya, maka pada bab
ini kana diberikan beberapa contoh lain dari pengguanaan brute force:
1. Menghitung n! untuk n ∈ Z + + {0}. Algoritma untuk menghitung faktorial adalah
(
1,
n=0
n! =
n × (n − 1) × · · · × 2 × 1, n ≥ 1
3
2. Menghitung perkalian dua buah matrix yang berukuran n × n.
• Misalkan C = AB dan elemen-elemen matrik dinyatakan sebagai cij , aij , dan
bij
cij = ai1 b1j + ai2 b2j + · · · + ain bnj =
n
X
aik bkj
k=1
• Algoritma: hitung setiap elemen hasil perkalian satu persatu, dengan cara
mengalikan dua vektor yang panjangnya n.
3. Menemukan semua faktor dari bilangan bulat n selain 1 dan n itu sendiri.
int t a g ;
int ∗ f a c t o r s ( int n )
{
int a [ 1 0 0 0 0 0 0 ] ;
for ( int i =1; i<=n / 2 ; i ++)
if ( n%i ==0)
a[++t a g ]= i ;
a[++t a g ]=n ;
return ( a ) ;
}
4. Mencari elemen terbesar atau terkecil.
struct p a i r getMinMax ( int a r r [ ] , int n )
{
struct p a i r minmax ;
int i ;
/* If there is only one element then return it as min and max both */
if ( n == 1 )
{
minmax . max = a r r [ 0 ] ;
minmax . min = a r r [ 0 ] ;
return minmax ;
}
/* If there are more than one elements , then initialize min
and max */
if ( a r r [ 0 ] > a r r [ 1 ] )
{
minmax . max = a r r [ 0 ] ;
minmax . min = a r r [ 1 ] ;
}
else
{
minmax . max = a r r [ 1 ] ;
minmax . min = a r r [ 0 ] ;
}
for ( i = 2 ; i <n ; i ++)
{
if ( a r r [ i ] > minmax . max)
minmax . max = a r r [ i ] ;
else if ( a r r [ i ] < minmax . min )
minmax . min = a r r [ i ] ;
4
}
return minmax ;
}
5. Sequential Search:
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 index elemen yang bernilai x disimpan di dalam peubah idx. Jika x
tidak terdapat di dalam himpunan tersebut, maka idx diisi dengan nilai 0.
Sequential/Linear Search ( Array A, Value x)
Step
Step
Step
Step
Step
Step
Step
Step
1:
2:
3:
4:
5:
6:
7:
8:
Set i to 1
if i > n then go to step 7
if A[i] = x then go to step 6
Set i to i + 1
Go to Step 2
Print Element x Found at index i and go to step 8
Print element not found
Exit
6. Bubble Sort:
• Apa metode yang paling lempeng dalam memecahkan masalah pengurutan?
Jawabannya adalah algoritma bubble sort.
• Algoritma bubble sort mengimplementasikan teknik brute force dengan jelas
sekali
b e g i n BubbleSort ( l i s t )
for a l l e l e m e n t s o f l i s t
if l i s t [ i ] > l i s t [ i +1]
swap ( l i s t [ i ] , l i s t [ i +1])
end if
end for
return l i s t
end BubbleSort
Bubble sort sendiri merupakan algoritma pengurutan data yang paling sederhana.
Algoritma ini membandingkan elemen bertetanggan dan menukarkannya jika tidak
dalam urutan yang benar. Algoritma ini tidak cocok digunakan untuk data set yang
besar karena memiliki waktu terburuk (worst case complexity) O(n2 ).
7. Uji keprimaan:
Persoalan: Diberikan sebuah bilangan bulat positif. Ujilah apakah bilangan tersebut merupakan bilangan prima atau bukan.
5
function is_prime(n)
if n 1
return false
else if n 3
return true
else if n mod 2 = 0 or n mod 3 = 0
return false
let i 5
while i * i n
if n mod i = 0 or n mod (i + 2) = 0
return false
i i + 6
return true
8. Menghitung nilai polinom secara brute force
Persolana: Hitung nilai polinom:
p(x) = an xn + an−1 xn−1 + · · · + a1 x + a0
pada titik x = x0 .
9. Pencocokan string:
Persoalan : Diberikan teks ( text ), yaitu ( long ) string yang panjangnya n karakter.
(a) pattern, yaitu string dengan panjang m karakter ( m < n ) yang akan dicari di
dalam teks.
(b) Kemudian, carilah lokasi pertama di dalam teks yang bersesuaian dengan pattern.
Example 2.1 (String) Example
Pattern : NOT
Teks : NOBODY NOTICED HIM
(a) NOBODY NOTICED HIM
(b) NOT
(c) NOT
(d)
(e)
(f )
(g)
(h)
(i)
NOT
NOT
NOT
NOT
NOT
NOT
6
10. Mencari pasangan titik terdekat: Diberikan sembarang titik dalam 2D atau 3D, lalu
carilah dua pasang titik yang memiliki jarak terkecil. Contoh dalam 2D lihat pada
gambar berikut:
Gambar 1: Contoh sebaran 6 titik pada domain kartesian.
• Jarak dua buah titik di bidang 2-D dengan P1 = (x1 , y1 ) dan P2 = (x2 , y2 )
dapat dicari menggunakan rumus Euclidian:
p
d(P1 , P2 ) = ||P1 − P2 || = (x1 − x2 )2 + (y1 − y 2 )2
• Algoritma brute force:
1. Hitung jarak setiap pasang titik.
2. Pasangan titik yang memepunyai jarak terpendek itulah jawabnnya.
• Algortma brute force akan menghitung sebanyak C(n, 2) = n (n−1)
pasangan
2
titik dan memeilih pasangan titik yang mempunyai jarak terkecil.
Kompleksitas waktu algoritma ini adalah O(n2 ).
3
Karakteristik algoritma brute force
Berikut adalah karakteristik algoritma brute force:
1. Algoritma brute force umumnya tidak ”cerdas” dan tidak mangkus, karena membutuhkan jumlah langkah yang besar dalam penyelesaiannya. Kadang - kadang
algoritma brute force disebut juga algoritma naif ( naive algorithm ).
2. Algoritma brute force seringkali merupakan pilihan yang kurang disukai karena ketidakmangkusannya itu, tetapi dengan mencari pola -pola yang mendasar, keteraturan, atau trik - trik khusus, biasanya akan membantu kita menemukan algoritma
yang lebih cerdas dan lebih mangkus.
3. Untuk masalah yang ukurannya kecil, kesederhanaan brute force biasanya lebih diperhitungkan dari pada ketidakmangkusannya.
Algoritma brute force sering digunakan sebagai basis bila membandingkan dengan
beberapa alternatif algoritma yang mangkus.
7
4. Algoritma brute force seringkali lebih mudah diimplementasikan dari pada algoritma
yang lebih canggih, dan karena kesederhanaannya, kadang-kadang algoritma brute
force dapat lebih mangkus (ditinjau dari segi implementasi).
4
Advantages and Disadvantages of brute force Algorithm
Berikut akan diberikan beberapa kekuatan dan kelemahan dari menggunakan algoritma
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 ).
Sedangkan Kelemhan:
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.
4. Ken Thompson ( salah seorang penemu Unix) mengatakan : ” When in doubt,
use brute force ”, faktanya kernel Unix yang asli lebih menyukai algoritma yang
sederhana dan kuat ( robust ) daripada algoritma yang cerdas tapi rapuh.
References
1. Anany, L. (2003). Introduction to the design and analysis of algorithms. Villanova
University.
2. https://www.quora.com/What-are-some-fast-algorithms-for-computing-the-nth-powerof-a-number
3. http://www.geeksforgeeks.org/maximum-and-minimum-in-an-array/
4. https://www.tutorialspoint.com/data structures algorithms/bubble sort algorithm.htm
8
5
Homework
1. Diberikan n titik pada daerah 2-D Euclidean, yaitu {p1 , p2 , · · · pn }. Buatlah algoritma brute force untuk menentukan titik paling bawah dalam daerah 2-D Euclidean.
2. Consider the problem of counting, in a given text, the number of substrings that
start with an A and end with a B. For example, there are four such substrings in
CABAAXBYA.
(a) Design a brute-force algorithm for this problem and determine its effi- ciency
class.
(b) Design a more efficient algorithm for this problem.
3. Word Find A popular diversion in the United States, word find (or word search)
puzzles ask the player to find each of a given set of words in a square table filled
with single letters. A word can read horizontally (left or right), vertically (up or
down), or along a 45 degree diagonal (in any of the four directions) formed by
consecutively adjacent cells of the table; it may wrap around the tables boundaries,
but it must read in the same direction with no zigzagging. The same cell of the
table may be used in different words, but, in a given word, the same cell may be
used no more than once. Write a computer program for solving this puzzle. (See
http://thewordsearch.com/ for more detail).
4. (a) Design a brute-force algorithm for computing the value of a polynomial
p(x) = an xn + an−1 xn−1 + · · · + a1 x + a0
at a given point x0 and determine its worst-case efficiency class.
(b) If the algorithm you designed is in Θ(n2 ), design a linear algorithm for this
problem.
(c) Is it possible to design an algorithm with a better-than-linear efficiency for this
problem?
5. Alternating disks You have a row of 2n disks of two colors, n dark and n light. They
alternate: dark, light, dark, light, and so on. You want to get all the dark disks to
the right-hand end, and all the light disks to the left-hand end. The only moves you
are allowed to make are those that interchange the positions of two neighboring disks.
Design an algorithm for solving this puzzle and determine the number of moves it
takes.
9
Download