Anda di halaman 1dari 19

Strategi Algoritmik S1 Teknik Informatika UK Maranatha

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

Kompleksitas algoritma ini adalah O(n).

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

Kompleksitas algoritma ini adalah O(n2)


11

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

Metode brute force:


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

Algoritma brute force :


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

Jelaslah kompleksitas algoritma adalah O(n2).

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

Materi kuliah IF 2251 Strategi Algoritmik :


http://kur2003.if.itb.ac.id/ Mata kuliah IF 2251 Strategi Algoritmik (sem.4)

19

Anda mungkin juga menyukai