Anda di halaman 1dari 15

LECTURE NOTES

Perancangan Analisis dan


Algoritma

Minggu 2
Sesi 3

Analisis Kompleksitas
Algoritma, Stack, Queue, Tree,
Dan Binary Tree

COMP6127 - Algorithm Design and Analysis


LEARNING OUTCOMES

1. Mahasiswa mampu menganalisa kompleksitas dari


beberapa algoritma bilangan prima yang diberikan
2. Mahasiswa mampu memahami penerapan dari Stack,
Queue, Tree, dan Binary Tree sebagai ADT dalam
pemrosesan datanya.

OUTLINE MATERI (Sub-Topic):

 Bilangan Prima
 Bilangan Prima menggunakan Teknik Flagging (Sieve
Technique)
 Tipe Data Abstrak
 Stack
 Queue
 Circular ADT
 Tree
 Binary Tree
 Tree Traversal
 Kesimpulan

COMP6127 - Algorithm Design and Analysis


ISI MATERI
A. Bilangan Prima
Bilangan prima merupakan bilangan yang lebih besar dari satu dan hanya
habis dibagi bilangan itu sendiri dan bilangan 1. Berikut ini merupakan bentuk
algoritma untuk menentukan bilangan prima.

bool prime(N){

int factor = 0; 1

for (i=1;i<=N;i++) N

If (N mod i == 0) N

factor++; N

if (factor=2) 1

return true; 1

else

return false;

Algoritma diatas memiliki nilai kompleksitas 3N + 3 atau O(n). Algoritma


diatas masih dapat diefisiensikan menjadi algoritma berikut.

bool prime(N){

int factor = 2; 1

for (i=2;i<=N-1;i++) N-2

If (n mod i == 0) N-2

factor++; N-2

if (factor=2) 1

return true; 1

else

return false;

COMP6127 - Algorithm Design and Analysis


Pada algoritma kedua kompleksitas yang diperoleh menjadi 3(n-2) + 3
atau 3n – 3 atau O(n). Berikut algoritma yang mempunyai nilai kompleksitas yang
sama.

bool prime(N){

int factor;

if (N > 1) 1

factor = 2; 1

Else

factor = 1;

for (i=2;i<=N-1;i++) N-2

If (n mod i == 0) N-2

factor++; N-2

if (factor=2) 1

return true; 1

else

return false;

Algoritma ketiga dan kedua memiliki nilai kompleksitas yang sama.


Algoritma berikut telah ditingkatkan jauh lebih baik.

COMP6127 - Algorithm Design and Analysis


bool prime(N){

int factor;

if (N > 1) 1

factor = 2; 1

Else

factor = 1;

for (i=2;i<=N div 2;i++) N/2-1

If (n mod i == 0) N/2-1

factor++; N/2-1

if (factor=2) 1

return true; 1

else

return false;

Pada algoritma keempat mempunyai kompleksitas 3(n/2-1)+3 atau 3n/2


atau O(n). Pada algoritma keempat telah meningkat pada level linear. Algoritma
ini masih dapat ditingkatkan namun akan dibahas pada diskusi. Sekarang kita
akan membahas tentang algoritma deret bilang prima. Perhatikan algoritma
berikut.

int factor;

For (x=2;x<=N;x++){ N-1

factor = 2; N

for (i=2;i<=x div 2;i++) N(N/2-1)

If (n mod i == 0) N(N/2)

factor++; N(N/2)

if (factor=2) N

print N, “ “; N

COMP6127 - Algorithm Design and Analysis


Algoritma kelima merupakan algoritma untuk penggambaran deret
bilangan prima. Algoritma ini memiliki kompleksitas 3N2/2 + 4N -2 atau O(n2).
Algoritma ini memiliki waktu pemrosesan sebagai berikut.

N Processing Time

1 0 ms

10 0 ms

100 0 ms

1.000 0 ms

5.000 100 - 135 ms

10.000 450 - 600 ms

100.000 45.000 - 50.000 ms

1.000.000 Approx 4.200.000 ms

B. Bilangan Prima menggunakan Teknik Flagging (Sieve


Technique)
Teknik flagging (Sieve Technique) merupakan metode untuk penentuan
deret bilangan prima. Ide dasar dari teknik adalah
1. Bilangan yang bukan bilangan prima mempunyai faktor pembagi berupa
bilangan prima.
2. Bilangan bukan prima tercatat dalam array.
3. Array berisikan flag yang menandakan yang mana yang bukan bilangan
prima.

COMP6127 - Algorithm Design and Analysis


T[1]=”X”

for (i=2;i<=N;i++)

T[i]=”?”

for Z=2 to N do

if (T[Z]=”?”){

T[Z]=”P”

for j=2 to (N div Z)

if (T[Z*j]=”?”)

T[Z*j]=”X”

for (i=1;i<=N;i++)

if (T[Z]=”P”)

print Z,” ”

Berikut merupakan hasil perbandingan dari waktu pemrosesan algoritma


deret bilangan prima biasa (algoritma kelima) dan algoritma deret bilangan prima
dengan teknik flagging (Sieve Technique).

N Algorithm #5 Algorithm #6

< 1.000 0 ms 0 ms

5.000 100 - 135 ms 0 - 15 ms

10.000 450 - 600 ms 0 - 15 ms

100.000 45.000 - 50.000 ms 0 - 15 ms

1.000.000 Approx. 4.200.000 ms 120 - 125 ms

COMP6127 - Algorithm Design and Analysis


N #5 #6 N #5 #6

1 0 1 11 25 28

2 0 3 12 30 32

3 2 5 13 36 34

4 3 8 14 42 38

5 5 10 15 48 42

6 7 14 100 2.426 345

7 10 16 1.000 249.169 3.957

8 13 19 5.000 6.245.670 21.068

9 16 22 10.000 24.991.230 43.070

10 20 26 100.000 2.499.909.593 456.807

1.000.000 249.999.078.499 4.775.209

Tabel kedua merupakan jumlah proses perulangan yang dilakukan oleh


algoritma kelima dan keenam hal ini dikarenakan kompleksitas dari algoritma
dengan teknik ini adalah O(n log n). Namun, algoritma ini tidak selalu menjadi
solusi yang terbaik. Algoritma ini hanya cocok dipakai untuk pembuatan deret,
namun untuk pengecekan bilangan prima atau bukan lebih efisien menggunakan
algoritma keempat. Berikut merupakan algoritma deret bilangan prima
menggunakan teknik flagging yang ditingkatkan. Perhatikan algoritma berikut.

COMP6127 - Algorithm Design and Analysis


bool prime(N){

T[1]=0

for (X=2;X<=N;X++;)

T[X]=1

for (X=2;X<=N;X++;)

if (T[X]=1){

for (i=2;i<=(N div X);i++)

if (T[X*i]=1)

T[X*i]=0

if (T[X]=1)

return true

else

return false

Algoritma yang ketujuh juga memiliki nilai kompleksitas yang sama,


yakni O(n log n). Berikut merupakan tabel perbandingan algoritma ketujuh dan
keempat.

COMP6127 - Algorithm Design and Analysis


N #4 #7 N #4 #7

1 0 0 11 4 17

2 0 1 12 5 20

3 0 2 13 5 21

4 1 4 14 6 24

5 1 5 15 6 27

6 2 8 100 49 245

7 2 9 1.000 499 2.957

8 3 11 5.000 2.499 16.068

9 3 13 10.000 4.999 33.070

10 4 16 100.000 49.999 356.807

1.000.000 499.999 3.775.209

Dari hasil tabel perbandingan jumlah banyak looping tersebut, terlihat


bahwa algoritma ketujuh baik digunakan dalam penentuan deret bilangan prima,
namun tidak untuk menentukan sebuah bilangan adalah prima atau bukan.

C. Tipe Data Abstrak


Tipe data abstrak merupakan sebuah pembentukan tipe data baru yang
merupakan penggabungan dari beberapa tipe data built-in bahasa pemrograman.
Konsep ini digunakan untuk mempermudah dalam pengaksesan proses
pembungkusan data. Tipe data abstrak tidak dapat dikenali oleh prosesor
komputer namun oleh kompiler bahasa pemrograman. Tipe data abstrak biasa

COMP6127 - Algorithm Design and Analysis


digambarkan dengan class atau struct. Berikut merupakan bentuk contoh
penerapan nyatanya Stack, Queue, Tree, dan Graph. Bentuk penerapan tersebut
lebih berfokus terhadap proses operasi yang dilakukan.

D. Stack
Stack merupakan salah satu bentuk penerapan dari tipe data abstrak yang
memiliki konsep operasi berbasis Last In First Out. Stack yang berarti tumpukan
melakukan proses pengambilan data berdasarkan data yang paling terakhir masuk.
Penerapan dari Stack sebenarnya dapat dilakukan dengan array biasa maupun
dengan linked-list.
Bentuk konsep dari Stack akan diterapkan oleh algoritma pencarian
khususnya algoritma pencarian Depth First Search (DFS).

E. Queue
Queue merupakan salah satu bentuk penerapan dari tipe data abstrak yang
memiliki konsep operasi berbasis First In First Out. Queue yang berarti antrian
melakukan proses pengambilan data berdasarkan data yang paling awal masuk.
Penerapan dari Queue sebenarnya dapat dilakukan dengan array biasa maupun
dengan linked-list.
Bentuk konsep dari Queue akan diterapkan oleh algoritma pencarian
khususnya algoritma pencarian Breadth First Search (DFS).

F. Circular ADT
Circular ADT atau tipe data abstrak yang memungkinkan hubungan
keterikatan yang saling melingkar dimana data awal terhubung dengan data akhir.
Biasanya dipakai dalam konsep circular linked list.

G. Tree
Tree merupakan salah satu bentuk penerapan dari tipe data abstrak dengan
struktur keterikatan satu node induk terhubung dengan beberapa node anak. Untuk

COMP6127 - Algorithm Design and Analysis


bentuk operasi yang dilakukan dalam pengelolaan datanya sendiri bergantung dari
jenis struktur tree yang dipakai bisa berupa binary tree, binary search tree, AVL,
Red Black Tree, B-Tree, dll.

H. Binary Tree
Binary tree merupakan bentuk penerapan lebih lanjut dari konsep tree
dimana pada struktur ini dimungkinkan hanya adanya maksimum dua buah anak
dari satu buah node induk. Operasi pengisian maupun penginputannya pun
berlangsung dari mengisi node induk dulu, diikuti anaknya namun operasi
pengisian dapat ditentukan oleh pengguna, secara umum dilakukan pengisian
terhadap anak kiri terlebih dahulu kemudian anak kanan.
Bentuk operasi yang dapat dilakukan dalam struktur binary tree ini antara
lain adalah
1. Pengisian data
2. Pencarian data
3. Penghapusan data
4. Pengurutan data
Berikut merupakan bentuk contoh dari struktur binary tree.

COMP6127 - Algorithm Design and Analysis


I. Tree Traversal
Tree traversal merupakan proses pengunjungan semua node
pada struktur tree. Pada umumnya tree traversal terbagi menjadi 4,
yakni
1. Pre-order Traversal (parent-left-right)
2. Level-order Traversal (parent-left-right)(each level)
3. In-order Traversal (left-parent-right)
4. Post-order Traversal (left-right-parent)

COMP6127 - Algorithm Design and Analysis


KESIMPULAN

Analisis algoritma membantu dalam memperhitungkan jumlah proses dan


lama waktu yang digunakan untuk menjalankan proses tersebut sampai solusi
dihasilkan. Algoritma yang efisien tidak dapat digunakan dalam segala bentuk
permasalahan. Pada contoh pembahasan diatas, algoritma yang paling baik yang
dibahas diatas dalam penentuan apakah bilangan tersebut adalah bilangan prima
atau bukan adalah algoritma keempat. Namun pada proses penentuan deret
bilangan prima, algoritma keempat memberikan hasil yang sangat buruk.
Sebaliknya, pada penentuan deret lebih baik untuk menerapkan algoritma
bilangan prima dengan teknik flagging (sieve technique). Namun, algoritma ini
kurang efektif dalam menentukan apakah suatu bilangan adalah bilangan prima
atau bukan.
Tipe data abstrak merupakan suatu pembentukan tipe data baru yang berisi
penggabungan dari tipe data lainnya. Untuk pembuatan tipe data abstrak dapat
menggunakan class maupun struct. Tipe data abstrak ini nantinya akan diterapkan
dalam beberapa bentuk pengolahan data antara lain stack, queue, tree, dan binary
tree.
Stack dan queue merupakan salah satu bentuk penerapan dari tipe data
abstrak dengan konsep pengelolaan data berbasis LIFO dan FIFO. Sedangkan,
tree merupakan bentuk penerapan dari tipe data abstrak untuk struktur
perancangan yang berbeda dimana node parent terhubung dengan node anaknya.
Bentuk proses yang dilakukannya pun berbeda. Tree traversal merupakan
penamaan dari proses pengunjungan terhadap semua anak yang terdapat dalam
struktur tree.

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