ALGORITMA MaxElement( A[0..n-1] ) // Mencari elemen bernilai maksimum dari A // Input : A[0..n-1] // Output : nilai maksimum maxVal A[0] for i 1 to n-1 do if A[i] > maxVal maxVal A[i] return maxVal Tentukan O(n) dari MaxElement!
ALGORITMA UniqueElements( A[0..n-1] ) // Mencari apakah semua elemen di A unik atau tidak // Input : A[0..n-1] // Output : return true kalau semua elemen di A unik // false kalau tidak for i 0 to n-2 do for j i + 1 to n - 1 do if A[i] = A[j] return false return true Tentukan O(n) dari UniqueElements!
Brute force :
sebuah pendekatan yang lempang (straightforward) untuk memecahkan suatu masalah, didasarkan pada pernyataan masalah (problem statement) dan definisi konsep yang dilibatkan.
memecahkan masalah dengan sangat sederhana, langsung dan dengan cara yang jelas (obvious way).
Menghitung pangkat an (a > 0, n adalah bilangan bulat tak-negatif) an = a a a (sebanyak n kali) , jika n > 0 an = 1 , jika n = 0 Algoritma: kalikan 1 dengan a sebanyak n kali
function pangkat(input a, n : integer) integer { Menghitung an, a > 0 dan n bilangan bulat tak-negatif Masukan: a, n Keluaran: nilai hasil perpangkatan} Kamus k, hasil : integer Algoritma hasil1 for k 1 to N hasilhasil * a endfor return hasil
Menghitung faktorial n! (n bilangan bulat tak-negatif) n! = 1 2 3 n , jika n > 0 n! = 1 , jika n = 0 Algoritma: kalikan n buah bilangan, yaitu 1, 2, 3, , n, bersama-sama
function faktorial(input n : integer)integer { Menghitung n!, n bilangan bulat tak-negatif Masukan: n Keluaran: nilai faktorial dari n.} Kamus k, fak : integer Algoritma fak1 for k 1 to N fakfak * k endfor return fak
Mengalikan dua buah matrik yang berukuran n n. Misalkan C = A B dan elemen-elemen matrik dinyatakan sebagai cij, aij, dan bij
cij ai1b1 j ai 2b2 j ain bnj aik bkj
k 1 n
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 i1 to n do for j1 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
Umumnya tidak cerdas dan tidak efisien, membutuhkan jumlah langkah yang besar dalam penyelesaiannya disebut juga algoritma naif (nave algorithm). Untuk masalah yang ukurannya kecil, kesederhanaan lebih diperhitungkan daripada efisiensi Sering digunakan sebagai basis bila membandingkan beberapa alternatif algoritma yang efisien
procedure CariElemenTerbesar(input a[n] : array of 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: maksa1 for k2 to n do if ak > maks then maksak endif endfor
10
procedure BubbleSort (input/output L : TabelInt, input n : integer) {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
Persoalan:
Diberikan n buah titik, tentukan dua buah titik yang terdekat satu sama lain.
Aplikasi:
sistem kendali lalu lintas, misalnya sistem kendali lalu lintas di udara (3-D) dan di laut (2-D) mungkin perlu mengetahui dua kendaraan (pesawat atau kapal) yang jaraknya berdekatan untuk mendeteksi kemungkinan timbulnya ).
Jarak dua buah titik p1 = (x1, y1) dan p2 = (x2, y2) adalah (rumus Euclidean): d (x x ) ( y y )
2 2 1 2 1 2
12
13
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: dmin9999 for i1 to n-1 do for ji+1 to n do dsqrt(sqr(Pi.x-Pj.x) + (sqr(Pi.y-Pj.y)) if d < dmin then { perbarui jarak terdekat } dmind P1Pi P2Pj endif endfor endfor
14
Dapat digunakan untuk memecahkan hampir sebagian besar masalah (wide applicability). Sederhana dan mudah dimengerti. Menghasilkan algoritma yang layak untuk beberapa masalah penting seperti pencarian, pengurutan, pencocokan string, perkalian matriks. Menghasilkan algoritma baku (standard) untuk tugastugas komputasi seperti penjumlahan/perkalian n buah bilangan, menentukan elemen minimum atau maksimum di dalam tabel (list).
15
Metode brute force jarang menghasilkan algoritma yang efisien. Beberapa algoritma brute force lambat sehingga tidak dapat diterima. Tidak sekontruktif/sekreatif teknik pemecahan masalah lainnya.
16
String :
Diberikan suatu string disimpan dalam array Tuliskan semua substring yang dihasilkan dari string tersebut Contoh :
String : AKU Substring : A, K, U, AK, KU, AKU
Repeating Numbers :
Diberikan sekumpulan bilangan integer sembarang Periksalah apakah kumpulan bilangan tersebut mengandung duplikasi data Contoh :
Data : 10, 25, 6, 17, 10, 34, 6 Data : 50, 25, 46, 17, 10, 34, 16 => data terduplikasi => data unik
17
ALGORITHM SelectionSort( A[0 n-1] ) // Sort a given array by selection sort // Input : An array A[0 n-1] belum terurut // Output : Array A[0 n-1] sudah terurut for i 0 to n-2 do min i for j i + 1 to n-1 do if A[j] < A[min] min j swap A[i] and A[min] Tentukan dan dari algoritma SelectionSort.
18
19