Anda di halaman 1dari 14

LECTURE NOTES

Perancangan Analisis dan


Algoritma

Minggu 1
Sesi 2

Pengantar Analisis Algoritma,


Induksi Matematika,
dan
Fungsi Rekursif

COMP6127 - Algorithm Design and Analysis


LEARNING OUTCOMES

1. Mahasiswa mampu memahami konsep dasar dari


analisis algoritma
2. Mahasiswa memahami bagaimana menggunakan fungsi
rekursif
3. Mahasiswa mampu menghitung waktu pemrosesan dan
penggunaan memori dari sebuah algoritma
4. Mahasiswa mampu melakukan pembuktian dari
beberapa algorithm dengan kompleksitas yang sama
menggunakan induksi matematika

OUTLINE MATERI (Sub-Topic):

 Definisi Algoritma
 Definisi Pseudocode
 Notasi Matematika & Deret
 Pengantar Analisis Algoritma
 Induksi Matematika
 Fungsi Rekursif
 Langkah – langkah Pembuatan Algoritma
 Perhitungan Waktu Pemrosesan dan Tingkat Pertumbuhan
 Kesimpulan

COMP6127 - Algorithm Design and Analysis


ISI MATERI

A. Definisi Algoritma
Kata “Algoritma” berasal dari Ahli Matematika Persia, Abu Ja’fer
Mohammed Ibn Musa al Khowarizmi. Algoritma sendiri mempunyai arti sebagai
kumpulan proses komputasi yang memproses input menjadi output. Secara umum,
Algoritma dapat digambarkan sebagai urutan proses yang perlu dilakukan untuk
menyelesaikan suatu tugas. Algoritma biasanya digambarkan sebagai alat untuk
menyelesaikan masalah komputasi yang telah dispesifikasikan dengan baik.

Algoritma dapat digambarkan dalam bentuk notasi matematika dan juga


dalam bentuk deret matematika. Penggambaran ini nantinya dapat digunakan
dalam melakukan konsep pembuktian menggunakan induksi matematika dari
beberapa algoritma yang berbeda untuk menyelesaikan tugas yang sama dan juga
dapat digunakan sebagai konsep dari metode numeric untuk menurunkan
algoritma yang kompleks sehingga memperoleh algoritma yang lebih sederhana
yang nantinya akan diuji tingkat kegagalan (error rate) dibanding dari algoritma
mula-mula (sebelum diturunkan).

Algoritma wajib memenuhi lima kriteria berikut :

1. Input: nol atau beberapa nilai input yang dimasukkan dari luar

2. Output: minimal ada satu output yang dihasilkan.

3. Definiteness: Setiap instruksi harus jelas dan tidak ambigu.

4. Finiteness: harus ada batasan dari algoritma tersebut untuk dapat


berakhir sehingga setiap kondisi pasti memiliki akhir.

5. Effectiveness: setiap instruksi mempunyai proses dan alur kerja yang


jelas yang dapat digambarkan oleh perancang sehingga memberikan
kinerja yang efektif.

COMP6127 - Algorithm Design and Analysis


Terdapat empat area utama dalam pembelajaran algoritma, yakni

1. Bagaimana cara menyusun algoritma

2. Bagaimana cara menvalidasi algoritma

3. Bagaimana cara menganalisa algoritma

4. Bagaimana cara menguji program

B. Definisi Pseudocode
Pseudocode merupakan salah satu metode untuk menggambarkan
algoritma dalam bentuk high – level specification. Pada umumnya pseudocode
merupakan penggabungan dari penggunaan bahasa inggris yang menggambarkan
proses kerja dan notasi matematika.
Pseudocode pada umumnya menyerupai bahasa pemrograman dikarenakan
mempunyai struktur bahasa dan proses yang baku dan jelas. Pseudocode pada
umumnya dipakai untuk menggambarkan algoritma dari suatu bagian proses yang
kompleks untuk menggambarkan secara detail proses kerja dari algoritma
tersebut. Berikut merupakan contoh bentuk dari pseudocode.

BEGIN

READ Number1, Number2, Operator

IF Operator = ‘+’ Then

Set Result = Number1 + Number2

ELSE IF Operator = ‘-‘ THEN

Set Result = Number1 - Number2

END IF

PRINT “Hasil = ”, Result

END

COMP6127 - Algorithm Design and Analysis


Komponen Pseudocode :
1. Variabel
2. Perulangan
a. Teknik perulangan for
b. Teknik perulangan repeat-until
c. Teknik perulangan while-do
3. Seleksi
a. Teknik seleksi if-then
b. Teknik seleksi select-case
4. Modul
a. Procedure /sub
b. Function
c. Teknik Recursive

C. Notasi Matematika dan Deret


Notasi matematika digunakan untuk menggambarkan algoritma ke dalam
persamaan matematika. Berikut merupakan berapa bentuk notasi matematika
n

1.
a 1  a 2  ....  a n   ak
k 1
n n n

c a k  bk   c  a k 
2.   bk
k 1 k 1 k 1

 
n n

3.    f  k       f k  
k 1  k 1 
n n  1
n

4.  k  1  2  .....  n   n   2

k 1 2
n

5. H n
1 1
2
 1
3
 1
4
 .....  1
n
 
1
k
 ln n  0 1 
k 1

Contoh pada persamaan 1, 2, dan 3 merupakan bentuk persamaan pada


perulangan. Sedangkan, pada persamaan 4 dan 5 merupakan bentuk persamaan
deret yang dapat diubah menjadi persamaan biasa tanpa menggunakan
perulangan. Perulangan ditandai dengan adanya symbol sigma ( ∑ ) dimana nilai
indeks awal ditunjukkan oleh nilai dibawah dan batas perulangan ditunjukkan
oleh nilai diatas sigma. Berikut merupakan contoh sederhana pengubahan bentuk
dari program menjadi persamaan matematika.

COMP6127 - Algorithm Design and Analysis


void justAnotherTest(){

int n, a, b=0, c=1; //4

scanf(“%d”,&n); //1

for(int i=0; i<n; i++){ //n+1

for(int j=0; j<n; j++){ //n(n+1)

a = b + c; //n2

b = c; //n2

c = a; //n2

printf(“%d ”,a); //n2

Mari kita bentuk hitung kompleksitas dari fungsi diatas :


fx = 4 + 1 + (n + 1) + n2 + n + n2 + n2 + n2 + n2
fx = 5n2 + 2n + 6
Dari hasil perhitungan diatas kita dapat memperoleh nilai Big-Oh dimana
nilai Big-Oh merupakan nilai dari variabel bukan konstanta. Dalam analisa
kompleksitas khususnya perhitungan Big-Oh konstanta dianggap sebagai nilai
statis dikarenakan banyaknya nilai n tidak akan mempengaruhi nilai konstanta
tersebut dan nilai konstanta tersebut akan lebih bersifat konstan dan linear
berdasarkan pengaruh dari nilai n sehingga konstanta tidak diperhitungkan. Maka
Big-Oh dari fungsi diatas adalah O(n) = n2 + n.
Mari kita buat persamaan matematika dari fungsi tersebut.
n 1 n 1

fx  (  (  5 x  x )  x ))  6
2

i0 j0

Dari persamaan tersebut terlihat terdapat dua sigma, dimana sigma yang
pertama menunjukkan perulangan dengan indeks i, sedangkan sigma kedua
menunjukkan perulangan j. x menyatakan statement dan 6 merupakan konstanta
pada algoritma diatas.

COMP6127 - Algorithm Design and Analysis


D. Pengantar Analisis dan Algoritma
Kompleksitas dapat digambarkan oleh penggunaan waktu pemrosesan dan
memori. Analisa untuk kompleksitas ini sendiri terbagi menjadi dua dimana dapat
dilakukan baik menggunakan analisis dari jumlah proses yang dikerjakan oleh
algoritma itu sendiri maupun menggunakan perhitungan lama waktu pemrosesan
dijalankan. Metode analisis ini dijabarkan sebagai berikut.
1. Priori Analysis
Pada metode analisis ini, dilakukan perhitungan yang sama seperti kita
lakukan pada sub topik C sebelum ini dimana dilakukan perhitungan
dari proses pada algoritma itu sendiri.
2. Posteriori Testing
Pada metode analisis ini, dilakukan perhitungan lama waktu maupun
memori dengan cara menjalankan program dengan algoritma yang mau
dianalisa kemudian menghitung lama waktu pemrosesan dan memori
yang digunakan.
Tipe kompleksitas itu sendiri terbagi menjadi 5, yakni
1. Big-Theta (Best case)
Disimbolkan dengan notasi  (...)
2. Big-Omega (Average case)
Disimbolkan dengan notasi  (...)
3. Big-Oh (Worst case)
Disimbolkan dengan notasi O (...)
4. Little-Oh
Disimbolkan dengan notasi o (…)
5. Little-Omega
Disimbolkan dengan notasi ω (…)

E. Induksi Matematika
Induksi matematika digunakan untuk melakukan pengujian dari dua
bentuk persamaan matematika. Pada mata kuliah ini, bentuk persamaan

COMP6127 - Algorithm Design and Analysis


matematika didapat dari hasil persamaan dari algoritma yang telah di ubah ke
dalam bentuk matematika yang akan diuji terhadap persamaan dasar. Hasil
pembuktian ini akan menunjukkan apakah algoritma yang dirancang telah benar
atau salah.
Berikut merupakan bentuk persamaan yang akan diuji.

n ( n  1)
n

 i 
2
i 1

Persamaan diatas merupakan bentuk pengujian dari persamaan dasar


berikut :

k ( k  1)
1  2  3  ...  k 
2
k ( k  1)
1  2  3  ...  k  ( k  1 )   ( k  1)
2
k ( k  1) k ( k  1) 2 ( k  1)
 ( k  1)  
2 2 2
k ( k  1) ( k  1 )( k  2 )
 ( k  1) 
2 2
k ( k  1) ( k  1 )(( k  1 )  1 )
 ( k  1) 
2 2

Bentuk pengujian pada metode induksi matematika akan dilakukan


melalui dua tahap :
1. n = 1, maka 1 = 1 (1 + 1)/2 (Terbukti)
2. n = k + 1
Pembahasan :
Persamaan diatas jika diuji akan menghasilkan sebagai berikut
N = 1 : Result = 1
- Dari persamaan dasar jika n = 1, maka nilai yg diambil adalah 1
- Dari persamaan yang diuji, 1 (1 + 1)/2, maka nilai hasil adalah 1
N = 2 : Result = 3
- Dari persamaan dasar jika n = 2, maka 2 nilai pertama diambil : 1 + 2,
hasilnya adalah 3
- Dari persamaan yang diuji, 2 (2+1)/2, maka nilai hasil adalah 3

COMP6127 - Algorithm Design and Analysis


N = 3 : Result = 6
- Dari persamaan dasar jika n = 3, maka 3 nilai pertama diambil : 1 + 2
+ 3, hasilnya adalah 6
- Dari persamaan yang diuji, 3 (3+1)/2, maka nilai hasil adalah 6
Pengujian yang selanjutnya adalah jika yang diambil adalah k + 1, apakah
hasil persamaan dasar dan hasil persamaan yang diuji memberikan hasil
yang sama?
Diketahui : 1 + 2 + 3 + … + K = K (K+1)/2 …(a)
Pengujian
1 + 2 + 3 + … + K + (K + 1) = (K+1) ((K+1)+1)/2
Subtitusi persamaan (a) pada persamaan dasar :
K (K+1)/2 + (K+1) = (K+1) (K+2) / 2
(K2 + K)/2 + ((2K+2)/2) = (K2 + 3K + 2) / 2
(K2 + 3K + 2) / 2 = (K2 + 3K + 2) / 2
TERBUKTI
Dikarenakan persamaan yang diuji terbukti sama dengan persamaan dasar,
maka bentuk persamaan ya diuji memiliki nilai benar.

F. Fungsi Rekursif
Fungsi merupakan sebagian baris atau tahapan dari algoritma yang
dikelompokkan tersendiri atau biasa disebut modul. Pembentukan ini ditujukan
agar proses algoritma yang berulang dapat dikelompokan tersendiri dan untuk
menjalankannya cukup melalui pemanggilan fungsi ini saja.
Pemanggilan fungsi dapat berlangsung dari fungsi utama, fungsi lain,
maupun fungsi itu sendiri. Dalam pemanggilan fungsi, pengiriman nilai dapat
dilakukan agar fungsi yang dipanggil dapat mengakses nilai yang dikirim. Bentuk
pengiriman nilai yang ada berupa pengirimin berupa nilai (passing by value) dan
pengiriman berupa alamat (passing by address). Pada pengiriman berupa nilai
yang dikirim hanya nilai saja, jadi lebih bersifat melakukan duplikasi nilai ke
variabel yang terdapat pada fungsi pemanggil atau biasa disebut parameter
sehingga perubahan atau pengolahan nilai pada fungsi pemanggil tidak akan

COMP6127 - Algorithm Design and Analysis


mempengaruhi nilai yang dikirim. Sedangkan, pada pengiriman berupa alamat,
yang dikirim kepada parameter fungsi adalah alamat dari nilai. Dikarenakan kedua
variabel baik dari fungsi pemanggil dan fungsi yang dipanggil mengakses alamat
yang sama sehingga proses pengubahan maupun pengolahan nilai pada fungsi
yang dipanggil akan mempengaruhi nilai pada fungsi pemanggil.
Fungsi rekursif merupakan bentuk fungsi yang memanggil dirinya sendiri.
Bentuk fungsi ini wajib memiliki batasan penentu sehingga tidak terjadi
perulangan tanpa henti. Fungsi ini ditujukan untuk mempermudah perancangan
algoritma yang sulit. Berikut merupakan contoh dari fungsi rekursif.

int faktorial(int n){

if(n<2)

return 1;

else

return n * faktorial(n-1);

Dari contoh diatas terlihat bahwa ketika fungsi faktorial dipanggil, fungsi
tersebut akan memanggil fungsi factorial lainnya. Berikut merupakan
penggambarannya untuk pemanggilan fungsi faktorial(5).

Faktorial(5)
Faktorial(4)
Hasil = 5 x Faktorial(3)
Faktorial(4); Hasil = 4 x Faktorial(2)
Hasil = 3 x Faktorial(1)
Faktorial(3)
Faktorial(2) Hasil = 2 x
Faktorial(1)

Hasil = 2 x 1 Return 1
Hasil = 3 x 2
Hasil = 4 x 6 Return 2
Hasil = 5 x 24 Return 6
Return 24
Return 120

COMP6127 - Algorithm Design and Analysis


Dari hasil pembahasan diatas terlihat bawah fungsi faktorial(5) masih akan
tetap menunggu hasil dari fungsi faktorial(4) dan fungsi faktorial(4) menunggu
hasil dari fungsi faktorial(3), demikian seterusnya. Dikarenakan hal ini proses
yang berjalan :
1. Memakan memori lebih banyak (Memory Allocation)
2. Diperlukan batasan yang jelas pada fungsi faktorial untuk
memberhentikan pemanggilan fungsi yang terus menerus (Finite
Condition)
3. Untuk pengecekan diperlukan penggunaan teknik debugging
(Debugging Technique)
4. Perlunya pemahaman dari cakupan variabel dan proses (Understanding
of Scope Variable)

G. Langkah – langkah Pembuatan Algoritma


Berikut merupakan langkah – langkah tahapan pembuatan algoritma :
1. Penyederhaan masalah
2. Membangun model penyelesaian matematis
3. Merancang algoritma
4. Menguji ketepatan algoritma
5. Menerapkan algoritma yang dirancang ke dalam bahasa pemrograman
6. Membuat dokumentasi
7. Menganalisa kompleksitas dari algoritma

H. Perhitungan Waktu Pemrosesan dan Tingkat Pertumbuhan


Perhitungan waktu pemrosesan dan tingkat pertumbuhan mengacu
terhadap analisa dari kompleksitas algoritma yang dirancang. Hal ini diperlukan
untuk melakukan perkiraan lama waktu proses dengan tingkat pertumbuhan data
yang diberikan. Waktu pemrosesan (processing time) merupakan lama waktu
yang dibutuhkan untuk menjalankan proses algoritma tersebut sampai
memberikan solusi. Semakin besar jumlah data yang diproses semakin lama
waktu yang dibutuhkan. Oleh karena hal ini, sering muncul topic khusus yang
membahas tentang data besar (big data). Hal ini diperkirakan berdasarkan tingkat
pertumbuhan data yang dikelola. Pada umumnya bentuk pengukuran lama waktu
menggunakan metode Big-Oh / O(n).
Berikut merupakan bentuk penilaian yang terdapat pada Big-Oh.
1. O(1) means constant algorithm
2. O(n) means linear algorithm
3. O(n2) means quadratic algorithm
4. O(n3) means cubic algorithm

COMP6127 - Algorithm Design and Analysis


5. O(log n) for example full balanced Binary Search Tree
6. O(nm) means exponential algorithm
7. Big-O notation can contain combination of above
8. Simplifying of Big-O is for “less important” component

COMP6127 - Algorithm Design and Analysis


KESIMPULAN

Pada mata kuliah ini akan menitikberatkan pada analisa dan perancangan
algoritma. Dimana awalnya akan dipelajari bagaimana cara mengubah algoritma
ke dalam persamaan matematika yang dilanjutkan dengan pembuktian dari
algoritma yang telah diubah ke dalam bentuk persamaan matematika untuk
menguji nilai ketepatan dari algoritma tersebut terhadap persamaan dasar.
Kemudian akan dilanjutkan dengan pembelajaran terkait dengan fungsi
rekursif. Fungsi rekursif ini nantinya akan sangat dipakai dalam pemecahan
masalah menggunakan metode dynamic programming. Hal yang perlu
diperhatikan dalam perancangan algoritma baik dari segi tahapan maupun analisa
akhir algoritma.

COMP6127 - Algorithm Design and Analysis


DAFTAR PUSTAKA

1. Sridhar, S., (2015), Design and Analysis of Algorithm. Delhi: Oxford University
Press.
2. Horowitz, E., Sahni, S., & Rajasekaran, S., (1997), Computer Algorithms C++.
New York: Computer Science Press.

COMP6127 - Algorithm Design and Analysis

Anda mungkin juga menyukai