Anda di halaman 1dari 17

PENGANTAR ALGORITMA

Armin Lawi
Matematika dan `Teknik Informatika
Universitas Hasanuddin
Apa itu algoritma?
 Prosedur komputasional yang terdefinisi dengan baik yang
membutuhkan nilai (atau himpunan nilai) sebagai input dan
menghasilkan nilai (atau himpunan nilai) sebagai output
 Alat bantu (tools) menyelesaikan masalah komputasional yang
terdefinisi dengan baik (well-defined computational problem)
 Metode penyelesaian yang logis dan ‘wajib’ benar
(correctness) sesuai keinginan masalah (desired solution)

Algoritma

Masalah
Desain dan Analisis Algoritma
 Pseudocode: Kode untuk memudahkan pemahaman algoritma
yang dapat ditransformasi kedalam berbagai Bahasa
Pemrograman.
 Kompleksitas algoritma: Analisis kebutuhan dari algoritma,
khususnya waktu komputasi dan kapasitas memory.
 Strategi algoritma: Perancangan kadang membutuhkan
strategi perancangan algoritma tertentu.
Dalam kuliah ini: Greedy algorithm, divide-and-conquer,
dynamic programming dan strategi-strategi algoritma meta-
heuristik untuk masalah optimisasi.
 Struktur data: Menyimpan dan mengorganisasi data untuk
kepentingan akses dan modifikasi.
(Tidak dibahas lengkap karena diluar topik MK ini)
 Masalah NP-lengkap: Tidak ada solusi efisien.
Contoh Masalah Komputasional
 Masalah Pencarian Data (Searching Problem)
Input: Barisan n bilangan asli <a1, a2, …, an> dalam larik A
dan sebuah bilangan key yang ingin dicari.
Output: Lokasi key dalam A. Jika key tidak ditemukan dalam A,
tambahkan key sebagai unsur terakhir.

Contoh
Input: Barisan bilangan A = <31, 41, 59, 26, 41, 58> dan key = 26
Output: Indeks dari posisi key. (Untuk kasus ini key=26).
Algoritma pencarian (searching algorithm) mengembalikan nilai
(unsur) dari indeks posisi key adalah 4.
Merancang Algoritma Sederhana
 Algoritma Linear Searching (naïve)
 Telusuri seluruh indeks dari A untuk membandingkan
apakah unsur dalam indeks yang ditelusuri sama dengan key.
 Jika key = unsur dalam indeks, algoritma berhenti.
Jika key tidak ditemukan hingga indeks terakhir dari A,
tambahkan key sebagai unsur dari indeks terakhir.
 Algoritma berhenti dan kembalikan nilai indeks dari A.

Dibutuhkan dua pernyataan (statemen):


• perulangan (looping) untuk menelusuri seluruh indeks A, dan;
• penyeleksian syarat (selection condition) untuk
membandingkan key dengan unsur dari indeks yang ditelusur.
Pseudo-code Algoritma
Linear-Search(A, key)
1 indeks  1;
2 ada  False;
3 while indeks  length[A] and ada = False
4 if A[indeks] = key then
5 ada = True;
6 indeks  indeks + 1;
7 indeks  indeks - 1;
8 if ada = False then
9 indeks  length[A] + 1;
10 A[indeks]  key;
11 return indeks

Catatan Implementasi lain ide algoritma kedalam pseudo-code boleh jadi


menghasilkan jumlah baris yang lebih sedikit, namun fungsi laju
running time algoritma akan tetap samaterhadap jumlah data.
Implementasi Pseudo-code Lain
Linear-Search1(A, key) Linear-Search2(A, key)
1 ada  False; 1 for indeks  1 to length[A]
2 for indeks  1 to length[A] 2 if A[indeks] = key
3 if A[indeks] = key 3 then break;
4 then ada = True; 4 if indeks > length[A]
5 break; 5 then A[indeks]  key;
6 if ada = False 6 return indeks
7 then A[indeks]  key;
8 return indeks
Loop Invariant dan Correctness
 Inisialisasi (initialization)
 Perulangan pertama kali memeriksa bahwa pernyataan
indeks  length[A] dan ada = False memenuhi atau Benar
dengan indeks = 1
 Pemeliharaan (maintenance)
 Selama statemen perulangan bernilai benar, algoritma
memeriksa setiap indeks dan membandingkan unsur dalam
A[indeks] = key.
 Penghentian (termination)
 Jika key ditemukan maka prulangan akan berhenti ATAU
jika tidak ditemukan maka nilai indeks = length[A] + 1
Ketentuan Pseudocode
 Indent menyatakan struktur blok.
 Statemen perulangan dikonstruksi dengan while, for dan
repeat.
 Statemen penyeleksian kondisi/syarat dikonstruksi dengan if,
then dan else.
 Simbol “” menyatakan komentar untuk statemen baris-baris
berikutnya.
 Penugasan berganda (multiple assignment) i  j  e
menyatakan penugasan/pemberian nilai e kedalam i dan j;
pernyataan ini ekivalen dengan j  e lalu diikuti i  j.
 Dan lainnya.
Contoh Masalah Lain
 Masalah Pengurutan Data (Sorting Problem)
Input: Barisan n bilangan dalam array A = <a1, a2, …, an>
Output: Permutasi barisan bilangan sedemikian sehingga terurut
kembali kedalam barisan bilangan A = <a1’, a2’, …, an’>,
dimana a1’  a2’  …  an’

Contoh:
Input: Barisan bilangan A= <31, 41, 59, 26, 41, 58>
Output: Barisan bilangan terurut A = <26, 31, 41, 41, 58, 59>
Algoritma pengurutan (sorting algorithm) mengembalikan
permutasi barisan bilangan yang terurut kembali.
Ide Sederhana
 Mengurutkan seperti kartu trup dengan cara;
 Scanning seluruh kartu dari awal hingga ke akhir
 Buat kartu patokan pada saat scanning dan lakukan
scanning kartu untuk membandingkan nilai kartu
 Tukar kartu jika nilai pada kartu yang ter-scanning
lebih kecil dari kartu patokan
Algoritma Insertion-Sort

Insertion-Sort(A)
1 for j  2 to length[A]
2 key  A[j]
3 ij–1
4 while (i > 0  A[i] > key)
5 A[i + 1]  A[i]
6 ii–1
7 A[i + 1]  key

Waktu komputasi (running time) algoritma tentu saja


! tergantung jumlah data yang ada dalam larik A.
public class MyInsertionSort {

public static void main(String a[]) {


int[] arr1 = {35,41,26,41,2,30};
int[] arr2 = doInsertionSort(arr1);
for(int i:arr2) {
System.out.print(i);
System.out.print(" ");
}
}

public static int[] doInsertionSort(int[] A) {


int key, i;
for(int j=1; j<A.length; j++){
key=A[j];
i=j-1;
while(i>-1 && A[i]>key){
A[i+1]=A[i];
i=i-1;
}
A[i+1]=key;
}
return A;
}

}
Analisis Algoritma
Insertion-Sort(A) Times T(n)
1 for j  2 to length[A] n
2 key  A[j] n–1
3 ij–1 n–1
 j 2 t j
n
4 while (i > 0  A[i] > key)
 j 2 (t j 1)
n
5 A[i + 1]  A[i]
 j 2 (t j 1)
n
6 ii–1
7 A[i + 1]  key n–1

Total waktu komputasi atau running time T(n):


n n n
T(n) = n + (n -1) + (n -1) + åt j + å(t j -1) + å(t j -1) + (n -1)
j=2 j=2 j=2
Analisis Algoritma (Lnjt.)
n n n
T (n) = n + (n -1) + (n -1) + å t j + å (t j -1) + å (t j -1) + (n -1)
j=2 j=2 j=2
n
= 2n + 3å t j -1
j=2

Waktu komputasi tidak hanya tergantung pada jumlah data, tetapi


juga tergantung pada bagaimana barisan input data
 Kasus terbaik (best case): Input data telah terurut, tj = 1

 Kasus terburuk (worst case): Input data terurut terbalik, tj = j


Analisis Algoritma (Lnjt.)
 Kasus terbaik:
n
T (n) = 2n + 3å1 -1 = 5n - 4
j=2
Laju waktu komputasi dalam fungsi linier

 Kasus terburuk:
n
T (n) = 2n + 3å j -1 = n + n - 4
3 2 7
j=2 2 2
Laju waktu komputasi dalam fungsi kuadratik

n
n(n  1)
Ingat!  j
2
1
j 2
Tugas-01
 Buat resume kuliah materi tatap muka hari ini dalam
format file PDF dgn nama file
Tugas01-S1-Algo-NoStambuk.pdf
Contoh: Tugas01-S1-Algo-H11115999.pdf
 Kirim ke alamat: tugas.algoritma.unhas@gmail.com
 Subject email: Tugas01-S1-Algo-NoStambuk
 Body emai minimal memuat Nama Lengkap dan Stambuk
 Email diterima paling lambat hari Sabtu, 10 September
2016, pukul 23:59.99

Anda mungkin juga menyukai