You are on page 1of 7

Desain dan Analisis Algoritma 1-1

Tugas 1

ALGORITMA

Algoritma adalah urutan langkah-langkah logis yang disusun secara sistematis


untuk mencari penyelesaian suatu masalah. Suatu algoritma memiliki karakteristik :
1. Input
2. Output
3. Keterbatasan, suatu algoritma harus berhenti setelah mengerjakan sejumlah
langkah terbatas
4. Terdefinisi, setiap langkah harus didefinisikan dengan tepat dan tidak bersifat
ambigu
5. Efektif, setiap langkah harus sederhana sehingga dapat dikerjakan dalam waktu
yang masuk akal
6. Benar, suatu algoritma harus memiliki solusi yang tepat dan benar.

Algoritma dibuat dengan tujuan agar dicapai penyelesaian masalah yang efektif
dan efisien. Efisiensi suatu algoritma dapat diketahui dengan menghitung running time,
T(n). Pendekatan yang digunakan adalah dengan cara menghitung banyaknya operasi
dasar dari suatu algoritma yang terjadi selama running time. Contoh kasus berikut ini
dapat memberi gambaran singkat bagaimana suatu algoritma bekerja untuk mencari
suatu solusi.

Masalah :
Terdapat susunan angka sebagai berikut .
8 4 12 2 6 10 14 1 3 5 7 9 11 13 15

Kemudian diberikan suatu angka, misalnya 5, untuk dicari pada susunan angka tersebut.
Pencarian dilakukan dengan metode sekuensial, metode binary, dan metode binary
tree.

1. Metode sekuensial
Algoritma pencarian sekuensial memiliki langkah-langkah sebagai berikut :
//input : data=(8,4,12,2,6,10,14,1,3,5,7,9,11,13,15) dan x
x←5
i←1
while i<=n and x≠data[i] do
i←i+1
Desain dan Analisis Algoritma 1-2
Tugas 1

if i<=n then ‘ditemukan pada posisi i’


else ‘tidak ditemukan’
//output : hasil pencarian x dalam data, ditemukan atau tidak

Implementasi program dalam bahasa pascal :

const
data:array[1..15] of byte=(8,4,12,2,6,10,14,1,3,5,7,9,11,13,15);

var i,x : byte;

begin
write('Masukkan angka yang ingin dicari : '); readln(x);
while (i<=15) and (x<>data[i]) do
i := i + 1;
if i<=15 then writeln (x,' ditemukan pada posisi ',i)
else writeln(x,' tidak ditemukan');
readln;
end.

Simulasi program
iterasi 1
i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Data 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15

x=5
iterasi 2
i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Data 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15

x=5
iterasi 3
i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Data 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15

x=5

iterasi 8
i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Data 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15

iterasi 9 x=5

i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Desain dan Analisis Algoritma 1-3
Tugas 1

Data 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15

x=5
iterasi 10
i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Data 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15

x=5

Oleh karena data [10] = x, maka iterasi berhenti dan


outputnya : ‘ 5 ditemukan pada posisi 10’

Analisis algoritmanya :
Pada metode sekuensial, dilakukan pencarian dari satu arah secara menyeluruh
sampai diperoleh data yang sama dengan x. Best case dari algoritma ini adalah ketika x
yang dicari terletak pada posisi pertama dari susunan angka. Maka Tbest(n) = 1.
Sedangkan worst case terjadi ketika x yang dicari terletak pada posisi terakhir dari
susunan angka. Maka Tworst(n) = n.

2. Metode binary
Algoritma pencarian binary memiliki langkah-langkah sebagai berikut :
//input : data=(8,4,12,2,6,10,14,1,3,5,7,9,11,13,15) dan x
x ← a
m ← (1+n)/2
i ← 1
while i<=m and (x≠data[i] or x≠data[n-i+1]) do
i←i+1
if i<=m then ‘x ditemukan’
else ‘tidak ditemukan’
//output : hasil pencarian x dalam data, ditemukan atau tidak

Implementasi algoritma pada Pascal :


const data : array [1..15] of byte =
(8,4,12,2,6,10,14,1,3,5,7,9,11,13,15);
n = 15;

var i,m,x : byte;

begin
write('Masukkan angka yang ingin dicari : '); readln(x);
m:=(1+n) div 2;
while (i<=m) and ((x<>data[i]) and (x<>data[n-i+1])) do
i := i + 1;
if i<=m then writeln (x,' ditemukan')
Desain dan Analisis Algoritma 1-4
Tugas 1

else writeln(x,' tidak ditemukan');


readln;
end.

Simulasi program
iterasi 1
i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Data 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15

x=5 x=5
iterasi 2
i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Data 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15

x=5 x=5
iterasi 3
i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Data 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15

x=5 x=5
iterasi 4
i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Data 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15

x=5 x=5
iterasi 5
i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Data 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15

x=5 x=5
iterasi 6
i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Data 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15

Pada iterasi ke 6, x telah ditemukan,x=5 x=5 dan


maka iterasi berhenti
outputnya : ‘ 5 ditemukan’

Analisis algoritmanya :
Pada metode binary, dilakukan pencarian dari dua arah secara menyeluruh
sampai diperoleh data yang sama dengan x. Best case adalah ketika x yang dicari
terletak pada posisi pertama atau terakhir dari susunan angka. Maka Tbest(n) = 1.
Desain dan Analisis Algoritma 1-5
Tugas 1

Sedangkan worst case terjadi ketika x yang dicari terletak pada posisi paling tengah dari
susunan angka. Maka Tworst(n) = n/2.

3. Metode binary tree


Algoritma untuk membuat binary tree :
//input : data array[1..15]
cabang(pohon,data)
if pohon=nil then
new( p );
p^.info := data;
p^.kiri := nil;p^.kanan := nil;
pohon := p;
//membuat cabang baru
else if data < node:data then
return cabang(node:leftChild, data)
else // X > node:data
return cabang(node:rightChild, data)
//output : hasil pencarian huruf dalam data, ditemukan atau tidak

Algoritma untuk mencari dalam binary tree adalah :


//input : data berupa sebuah kalimat yang diimplementasikan ke
dalam sebuah
tree; huruf (obyek yang ingin dicari); ketemu dalam boolean
cari(huruf, ketemu, pohon)
if p≠nil and not ketemu then
if huruf = node:data then ketemu = true
else if huruf < node:data then
return find(huruf, ketemu, node:leftChild)
else // X > node:data
return find(huruf, ketemu, node:rightChild)
//output : hasil pencarian huruf dalam data, ditemukan atau tidak
Maka implementasinya dalam pascal adalah sebagai berikut.
type bst = ^ node;
node = record
kiri, kanan : bst;
info : byte
end;
const
deret : array[1..15]of byte=(8,4,12,2,6,10,14,1,3,5,7,9,11,13,15);
procedure cabang( var pohon : bst; data : byte );
{membuat cabang}
var p : bst;
begin
Desain dan Analisis Algoritma 1-6
Tugas 1

if pohon = nil then


begin
new( p );
p^.info := data;
p^.kiri := nil;
p^.kanan := nil;
pohon := p;
end
else if data > pohon^.info then cabang( pohon^.kanan,data )
else if data < pohon^.info then cabang( pohon^.kiri,data );
end;
procedure cari( k: byte; var ketemu: boolean; p : bst);
begin
if (p <> nil) and not ketemu then
begin
if k = p^.info then ketemu := true
else if k < p^.info then cari(k, ketemu, p^.kiri)
else cari(k, ketemu, p^.kanan)
end
end;
var ketemu : boolean;
k, i, n : byte;
begin
new( pohon );
pohon := nil;
for i:=1 to 15 do cabang( pohon, deret[i] );
write( 'Masukkan angka yang ingin dicari : ');
ketemu := false;readln( k );
cari( k, ketemu, pohon );
if ketemu then writeln( k, ' ditemukan.')
else writeln( k, ' tidak ditemukan.');
readln;
end.

Simulasi Program
iterasi 1 x=5
iterasi 3
8 8

4 12 4 12
x=5
2 6 10 14 2 6 10 14

1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15

iterasi 2
iterasi 4
8
8
x=5
4 12
4 12
2 6 10 14
2 6 10 14
1 3 5 7 9 11 13 15
1 3 5 7 9 11 13 15

x=5
Desain dan Analisis Algoritma 1-7
Tugas 1

Simulasi berhenti pada iterasi ke 4 dimana x telah ditemukan.

Analisis algoritma binary tree


Pada metode binary tree, data terlebih dahulu dituangkan ke dalam bentuk
tree. Dalam algoritma pencariannya, best case terjadi jika x terdapat pada
root(node di level paling atas) dari tree, sehingga Tbest(n)=1. Untuk worst case,
terjadi ketika x terdapat pada node di level paling bawah dari tree, dalam kasus
ini Tworst(n) = log2(n).

A. Kesimpulan

1. Dari ketiga metode di atas, metode yang memiliki running time terbaik dalam
pencarian solusi adalah metode binary tree, karena memiliki Tworst(n)=log 2(n), yang
merupakan Tworst terkecil dari ketiga algoritma yang dibandingkan. Sehingga
metode binary tree adalah metode yang paling efisien.
2. Namun, pada metode binary tree, terlebih dahulu harus dilakukan pembuatan tree,
sehingga metode ini menggunakan memori yang jauh lebih besar jika dibandingkan
dengan metode sekuensial dan binary.

You might also like