6 BAB 2 LANDASAN TEORI 2.1 Pengertian Algoritma Algoritma

advertisement
6
BAB 2
LANDASAN TEORI
2.1 Pengertian Algoritma
Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusun
secara sistematis dan logis. Kata Logis merupakan kata kunci dalam Algoritma.
Langkah-langkah dalam Algoritma harus logis dan harus dapat ditentukan bernilai
salah atau benar (Rosa dan Shalahuddin 2010). Kriteria Algoritma yang baik :
a. Tepat, benar, sederhana, standar dan efektif.
b. Logis, terstruktur dan sistematis.
c. Semua operasi terdefinisi.
d. Semua proses harus berakhir setelah sejumlah langkah dilakukan.
e. Ditulis dengan bahasa yang standar dengan format pemrograman agar mudah
untuk diimplementasikan dan tidak menimbulkan arti ganda.
Algoritma adalah jantung ilmu komputer atau informatika. Banyak cabang ilmu
komputer yang diacu dalam terminologi algoritma. Namun, jangan beranggapan
algoritma selalu identik dengan ilmu komputer saja. Dalam kehidupan sehari-hari pun
banyak terdapat proses yang dinyatakan dalam suatu algoritma. Cara-cara membuat
kue atau masakan yang dinyatakan dalam suatu resep juga dapat disebut sebagai
algoritma. Pada setiap resep selalu ada urutan langkah-lankah membuat masakan. Bila
langkah -langkahnya tidak logis, tidak dapat dihasilkan masakan yang diinginkan. Ibuibu yang mencoba suatu resep masakan akan membaca satu per satu langkah-langkah
pembuatannya lalu ia mengerjakan proses sesuai yang ia baca. Secara umum, pihak
(benda) yang mengerjakan proses disebut pemroses (processor). Pemroses tersebut
dapat berupa manusia, komputer, robot atau alat-alat elektronik lainnya. Pemroses
melakukan suatu proses dengan melaksanakan atau mengeksekusi algoritma yang
menjabarkan proses tersebut(Munir 2007).
Universitas Sumatera Utara
7
2.2 Algoritma Pengurutan ( Sorting )
Algoritma merupakan urutan aksi-aksi yang dinyatakan dengan jelas dan tidak rancu
untuk memecahkan suatu masalah dalam rentang waktu tertentu. Sedangkan
pengurutan adalah proses pengaturan sekumpulan objek berdasarkan urutan atau
susunan
tertentu, dapat berupa pengurutan menaik (ascending) atau menurun
(descending).
Contoh, sebuah larik atau array terdiri dari kumpulan bilangan : [3,12,1,50,33,5,28]

Hasil pengurutan menaik (ascending) : [1,3,5,12,28,33,50]

Hasil pengurutan menurun (descending) : [50,33,28,12,5,3,1]
Sebuah algoritma dikatakan baik jika menghasilkan nilai yang benar, efektif dan
efisien. Efektif yaitu tepat sasaran, jelas dan tidak rancu dalam menjalankan aksiaksinya serta menghasilkan data yang benar. Efisien yaitu penghematan proses dari
sebuah algoritma, seperti running time dan penggunaan memori. Metode atau
algoritma pengurutan dapat diklasifikasikan menjadi :
1. Metode atau algoritma pengurutan internal, yaitu pengurutan yang dilakukan
di dalam larik itu sendiri. Datanya disimpan di dalam memori komputer.
2. Metode atau algoritma pengurutan eksternal, yaitu pengurutan yang datanya
disimpan di dalam disk storage. Metode ini disebut juga pengurutan arsip.
Sedangkan berdasarkan kestabilan (stability), algoritma pengurutan dapat dibagi
menjadi dua jenis, yaitu :
1. Metode pengurutan stabil (stable sorting algorithm), merupakan algoritma
pengurutan yang menjaga/mempertahankan (maintenance) urutan dari
beberapa elemen array yang bernilai sama.
2. Metode pengurutan tidak stabil (non stable sorting algorithm), merupakan
metode pengurutan yang tidak menjaga/mempertahankan (maintenance) urutan
dari beberapa elemen array yang bernilai sama. Dengan kata lain, urutan
beberapa elemen yang sama berbeda antara sebelum dan sesudah pengurutan.
Algoritma memiliki dua skema, yaitu iteratif dan rekursif. Iteratif yaitu algoritma
yang melakukan perulangan biasa, sedangkan rekursif adalah algoritma yang
Universitas Sumatera Utara
8
melakukan perulangan dengan melakukan pemanggilan terhadap dirinya sendiri.
Contoh algoritma pengurutan yang termasuk dalam skema iteratif, yaitu pengurutan
apung (bubble sort) dan selection sort, Contoh algoritma pengurutan yang termasuk
dalam skema rekursif, yaitu pengurutan merge (merge sort), pengurutan heap (heap
sort) dan pengurutan cepat (quick sort). Tidak semua algoritma tersebut hanya
memiliki satu skema, misalnya algoritma pengurutan seleksi atau selection sort yang
dapat menggunakan skema rekursif, namun di dalam penelitian ini selection sort yang
dibahas menggunakan skema iteratif (Fanani 2008).
2.3 Kompleksitas Algoritma
Efisiensi sebuah algoritma tergantung dari beberapa hal, diantaranya adalah :

Kinerja CPU

Kinerja Memori

Kinerja Disk

Kinerja Jaringan
Menurut Rao dan Ramses (2012), bahwa Algoritma memiliki kompleksitas yang
merupakan acuan utama utama untuk mengetahui kecepatan dari sebuah algoritma.
Kompleksitas dibagi menjadi tiga, yaitu:
1. Best case (Ω), yaitu
kompleksitas algoritma dimana algoritma tersebut
berjalan dalam kondisi terbaik.
2. Average case (𝜃 ), yaitu kompleksitas algoritma dimana algoritma tersebut
berjalan dalam kondisi sedang, biasanya inputnya secara acak.
3. Worst case (Ο), yaitu
kompleksitas algoritma dimana algoritma tersebut
berjalan dalam kondisi terburuk.
2.4 Growth Fuction
Kinerja sebuah algoritma biasanya di ukur dengan mengacu pada kondisi terburuknya,
yaitu worst case yang dilambangkan dengan notasi Big O. Notasi Big O adalah fungsi
yang berkaitan dengan kelajuan proses dan kelajuan pertambahan data (Suryani 2013).
Universitas Sumatera Utara
9
Tabel 1.1 Tabel Notasi Big O
Notasi
O(1)
Nama
Konstan
Contoh Aplikasi
Menentukan apakah suatu bilangan ganjil atau
genap
O(log * n)
Iterasi Logaritmik
Algoritma pencarian Hopcraff dan Ullman untuk
himpunan disjoint
O(log n)
Logaritmik
Pencarian dalam list terurut dengan Binary
Search Algorithm
O((log n)c)
Polilogaritmik
Menentukan bilangan prima
dengan
AKS
primality test
O(n)
Linear
Pencarian dalam list tidak terurut
O(n log n)
Linearitmik
Mengurutkan list dengan Heapsort
O(n2)
Kuadratik
Mengurutkan list dengan Insertion Sort
O(nc),c>1
Poliomial
Pencarian shortest path dengan algoritma Floyd
Warshall
O(cn)
Eksponensia
Pencarian solusi untuk traveling salesmen
problem
O(n!)
Faktorial
Menyelesaikan
traveling
salesmen
problem
dengan menggunakan brute force
O(2cn)
Dobel Eksponensial
Pencarian himpunan lengkap dari AC-unifiers
(associative-commutative unifiers)
Universitas Sumatera Utara
10
2.5
Notasi Asimptotik
Notasi asimptotik digunakan untuk menentukan kompleksitas suatu algoritma dengan
melihat waktu tempuh (running time) sebuah algoritma. Waktu tempuh algoritma
merupakan fungsi : N → R suatu algoritma dengan algoritma lainnya. Notasi
asimptotik dapat dituliskan dengan beberapa simbol, yaitu :

Notasi Big O, yaitu notasi asimptotik sebuah fungsi algoritma untuk batas atas.

Notasi Little o, yaitu notasi asimptotik sebuah fungsi algoritma untuk batas
atas namun tidak secara ketat terikat (not asymptotically tight).

Notasi Theta (𝜃), yaitu notasi asimptotik sebuah fungsi algoritma untuk batas
atas dan bawah.

Notasi Omega ( ), yaitu notasi asimptotik sebuah fungsi algoritma untuk
batas bawah, notasi ini berlawanan dengan notasi little-o.
2.6 Algoritma Bucket Sort
Algoritma Bucket Sort merupakan salah satu bentuk algoritma devide & conguer
melalui metode partisi dan berjalan dalam keadaan linier time (Wilkinson & Allen,
2005). Secara teoritis proses pengurutan dilakukan dengan membagi dan memecahkan
himpunan array kedalam beberapa ember virtual secara merata. Algoritma devide and
conguer sudah lama diperkenalkan sebagai sumber dari pengendali proses paralel,
karena masalah-masalah yang terjadi dapat diatasi secara independen. Banyak
arsitektur dan bahasa pemrograman paralel mendesain implementasinya (aplikasi)
dengan struktur dasar dari algoritma devide & conguer. Devide and conguer adalah
varian dari beberapa strategi pemrograman top down, tetapi yang paling istimewa
dalam hal ini adalah dengan membuat sub-sub problem dari problem yang besar, oleh
karena itu strategi ini ditunjukkan secara berulang-ulang (rekursiv). Sebagaimana
disebutkan algoritma perulangan, dibutuhkan sebuah kondisi untuk mengakhiri
perulangan tersebut. Biasanya untuk mengecek apakah problem sudah cukup kecil
untuk diselesaikan dengan metodenya langsung.
Universitas Sumatera Utara
11
Proses pengurutan yang dilakukan dengan menggunakan algoritma bucket sort
adalah dengan cara membagi dan memecahkan himpunan array ke dalam beberapa
ember (bucket) virtual secara merata. Setelah selesai maka dikumpulkan kembali ke
array aslinya, sehingga mendapatkan susunan array yang sudah terurut.
Cara kerja algoritma bucket sort dapat dijelaskansebagai berikut :

Tentukan array yang ingin diurutkan.

Tentukan jumlah bucket dan rentang masing-masing bucket.

Masukkan array tersebut ke dalam bucket yang telah ditentukan.

Di dalam masing-masing bucket, array tersebut di urutkan.

Setelah itu keluarkan hasil urutan dari dalam bucket dan kembalikan ke array
awal.
Kelebihan dari Bucket Sort:
1. Sebuah algortima yang stabil
2. Prosesnya cepat.
3. Hanya berlaku pada kisaran 0 sampai nilai maksimum (M).
4. Lebih terkhusus, dapat digunakan ketika kuncinya dapat digunakan sebagai
penghitungan.
2.6.1 Pseudocode Algoritma Bucket Sort
Tempt = array[arr.length][arr.length];
For (i=0, i<arr.length, i++){
Index = celling((arr[i]*arr.length)/max)
If (temp[index].length=0)
Temp[index][0]=arr[i];
}
Else {
j=0;
while (temp[index][j]<arr[i])
j++;
}
Universitas Sumatera Utara
12
{
Swap(j, arr[i],temp[index]);
}
Return temp[];
2.7
Algoritma Strand Sort
Strand Sort adalah sebuah algoritma pengurutan yang membandingkan dua elemen
data. Pertama, mengurutkannya, kemudian mengecek elemen data berikutnya satu
persatu dan membandingkannya dengan elemen data yang telah diurutkan. Ide dasar
dari algortima Strand Sort ini adalah mencari tempat yang “tepat” untuk setiap elemen
array, dengan cara sequential search. Proses ini kemudian menyisipkan sebuah
elemen array yang diproses ke tempatnya yang seharusnya. Proses ini dilakukan
sebanyak N-1 tahapan dengan indeks yang dimulai dari 0. Proses pengurutan dengan
menggunakan algoritma Strand Sort dilakukan dengan cara membandingkan data ke-i
(dimana i dimulai dari data ke-2 sampai dengan data terakhir) dengan data berikutnya.
Jika ditemukan data yang lebih kecil maka data tersebut disisipkan kedepan sesuai
dengan posisi yang seharusnya.
Proses algoritma Strand Sort bertujuan untuk menjadikan bagian sisi kiri array
terurutkan sampai dengan seluruh array berhasil diurutkan. Metode ini mengurutkan
bilangan-bilangan yang telah dibaca dan berikutnya secara berulang akan menyisipkan
bilangan-bilangan dalam array yang belum terbaca kesisi kiri array yang telah terurut.
Strand Sort bekerja seperti banyak orang yang sedang mengurutkan kartu ditangan.
Dimulai dengan tangan kiri yang kosong dan kartunya ditumpuk di meja. Selanjutnya
kita ambil satu persatu kartu di meja dan diletakkan ditangan kiri dengan posisi yang
benar (terurut). Untuk menemukan posisi
yang benar, maka kita
harus
membandingkan satu persatu kartu yang ada (ditangan kiri) secara berurutan.
Kelebihan dan kekurangan Strand Sort :
Kelebihan:
1. Sederhana dalam penerapannya.
2. Prosesnya cepat dalam data yang kecil.
Universitas Sumatera Utara
13
3. Jika list sudah terurut atau sebagian terurut maka algoritma Strand Sort akan lebih
cepat daripada Quick Sort.
4. Prosesnya cepat dalam data yang sebagian sudah terurut.
5. Lebih cepat dibandingkan Bubble Sort dan Selection Sort.
6. Loop (Perulangan) pada Strand Sort sangat cepat, sehingga termasuk menjadi
salah satu algoritma pengurutan tercepat dalam jumlah elemen yang sedikit.
7. Stabil
Kekurangan :
1.
Banyaknya operasi yang diperlukan dalam mencari posisi yang tepat untuk
elemen List.
2.
Untuk List yang jumlahnya besar algoritma Strand Sort tidak praktis.
3.
Jika List terurut terbalik sehingga setiap eksekusi dari perintah harus memindai
dan mengganti seluruh bagian sebelum menyisipkan elemen berikutnya. Membutuhkan metode tambahan.
2.7.1 Pseudocode Algoritma Strand Sort
For (i=1 to (array.length-1))
j=i-1; index;
while (arr[i]<arr[j]{
index=j;
Universitas Sumatera Utara
14
j--;
if (j<0)
break;
}
Swap(i,index)
2.8. Algoritma Quick Sort 2 Pivot
Quicksort merupakan Algoritma Sorting yang dikembangkan oleh Tony Hoare yang,
secara kasus rata-rata, membuat pengurutan O(n log n) untuk mengurutkan n item.
Algoritma
ini
juga
dikenal
sebagai Partition-Exchange
Sort atau
disebut
sebagai Sorting Pergantian Pembagi. Pada kasus terburuknya, algoritma ini membuat
perbandingan O(n2), malaupun kejadian seperti ini sangat langka. Quicksort sering
lebih cepat dalam praktiknya daripada algoritma O(n log n) yang lainnya. Dan juga,
urutan dan referensi lokalisasi memori quicksort bekerja lebih baik dengan
menggunakan cache CPU, jadi keseluruhan sorting dapat dilakukan hanya dengan
ruang tambahan O(log n).
Quicksort merupakan sorting pembanding dan pada implementasi efisien tidak
merupakan algoritma sorting yang stabil. Algoritma seleksi memilih jumlah list k yang
terkecil, masalah ini merupakan yang paling mudah secara umumnya daripada sorting.
Algoritma seleksi yang sederhana teatpi efektif bekerja hampir sama seperti quicksort,
kecuali yang daripada memanggil rekursif pada kedua sublist, algoritma ini hanya
membuat satu pemanggilan rekursif ekor pada sublist yang mengandung elemen yang
diinginkan. Perubahan kecil ini menurunkan kerumitan rata-rata pada linear atau O(n)
kali, dan membuatnya menjadi Algoritma In-Place. Ragam algoritma ini membawa
worst case turun menjadi O(n).
Sebaliknya setelah kita mengetahui worst case O(n) algoritma seleksi tersedia,
kita dapat menggunakannya untuk mencari pivot ideal (median) pada setiap langkah
quicksort, yang menghasilkan ragam kalkulasi waktu worst case O(n log n). Pada
implementasi praktiknya, bagaimanapun, varian ini dianggap lebih lambat dari ratarata. Pada setiap versi awal quicksort, elemen yang paling kiri dari partisi akan sering
Universitas Sumatera Utara
15
menjadi pilihan sebagai elemen pivot. Dalam algoritma ini digunakan 2 Pivot, dan
pivotnya bisa dipilih secara acak ataupun berurutan. Sayangnya, ini menyebabkan
perilaku worst-case pada array yang telah diurut, yang merupakan penggunaan kasus
yang sering dipakai. Masalah ini dengan mudah diselesaikan dengan memilih salah
satu dari index acak untuk pivot, memilih indek tengah dari partisi atau (secara khusus
untuk partisi panjang) memilih median dari elemen awal, tengah, dan akhir dari partisi
untuk pivot
Memilih elemen pivot juga rumit dengan dengan kehadiran dari Integer
Overflow. Jika indeks batas dari subarray yang diurutkan cukup besar, ungkapan naif
untuk indeks tengah, (kiri + kanan)/2, akan menyebabkan luapan dan memberikan
indeks pivot yang salah. Masalah ini dapat terselesaikan dengan menggunakan,
sebagai contoh, kiri + (kanan-kiri)/2 pada indeks elemen tengah, pada masalah dari
aritmatika kompleks. Masalah yang sama muncul pada beberapa metode yang lain
dari pemilihan elemen pivot
Algoritma quick sort mengurutkan dengan sangat cepat, namun algoritma ini
sangat komplex dan diproses secara rekursif. Sangat memungkinkan untuk menulis
algoritma yang lebih cepat untuk beberapa kasus khusus, namun untuk kasus umum,
sampai saat ini tidak ada yang lebih cepat dibandingkan algoritma quick sort.
Quick Sort merupakan suatu algoritma pengurutan data yang menggunakan
teknik pemecahan data menjadi partisi-partisi, sehingga metode ini disebut juga
dengan nama partition exchange sort. Untuk memulai irterasi pengurutan, pertamatama sebuah elemen dipilih dari data, kemudian elemen-elemen data akan diurutkan
diatur sedemikian rupa.
Langkah-langkah algoritma Quick Sort 2 Pivot :

Pilih nilai pivot. Kita ambil nilai di awal, ditengah, maupun diakhir
secara acak (random) elemen sebagai sebagai nilai dari pivot, dalam
algoritma ini menggunakan 2 elemen yang menjadi pivotnya.

Partisi Atur ulang semua elemen sedemikian rupa, lalu semua elemen yang lebih
rendah daripada pivot dipindahkan ke sebelah kiri dari array/list dan semua
elemen yang lebih besar dari pivot dipindahkan ke sebelah kanan dari
array/list. Nilai yang sama dengan pivot dapat diletakkan di mana saja dari
array. Ingat,mungkin array/list akan dibagi dalam bagian yang tidak sama.
Universitas Sumatera Utara
16

Urutkan semua bagian (kiri/kanan) elemen dari data tersebut.

Selanjutnya akan menghasilkan data yang sudah terurut
Kelebihan:
Algoritma Quicksort memiliki kompleksitas O(n log n) dimana pada prakteknya lebih
cepat dari algoritma pengurutan lainnya.
Kekurangan:
Pada kemungkinan terburuknya, algoritma Quicksort ini dapat memiliki kompleksitas
O(n2). Meskipun ini sangat langka terjadi
2.8.1 Pseudocode Quick Sort 2 Pivot
Algoritma Quick Sort 2 Pivot (A,lo,hi) is
If lo < hi then
P:= partition (A,lo,hi)
Quicksort (A,lo,P-1)
Quicksort (A,P+1,hi)
Algoritma partition (A,lo,hi) is
Pivot:= A[hi]
i:= lo //place for swapping
for j:= lo to hi-1 do
if A[j] <= pivot then
swap A[i] with A[j]
i:= i+1
swap A[i] with A[hi]
return i
2.9 Struktur Data
Struktur data adalah cara menyimpan atau merepresentasikan data di dalam komputer
agar bisa dipakai secara efisien. Sedangkan data adalah representasi dari fakta dunia
nyata. Fakta atau keterangan tentang kenyataan yang disimpan, direkam atau
Universitas Sumatera Utara
17
direpresentasikan dalam bentuk tulisan, suara, gambar, sinyal atau simbol. Secara
garis besar tipe data dapat dikategorikan menjadi :
1. Tipe data sederhana/dasar
a. Tipe data sederhana tunggal

Integer

Real

Boolean, dan

Karakter
b. Tipe data sederhana majemuk misalnya string
2. Struktur data, meliputi :
a. Struktur data sederhana

Array

Record
b. Struktur data majemuk, yang terdiri dari:

Linier : Stack, Queue, List dan Multilist

No Linier : Pohon Biner (tree) dan Graph
Pemakaian struktur data yang tepat didalam proses pemrograman akan
menghasilkan algoritma yang lebih jelas dan tepat, sehingga menjadikan program
secara keseluruhan lebih efesien dan sederhana. Struktur data yang ′′standar′′ yang
biasanya digunakan dibidang informatika adalah List, Multilist, Stack (Tumpukan),
Queue (Antrian), Tree ( Pohon ), Graph ( Graf ). Struktur data yang penulisan bahas
dalam tesis ini adalah struktur data sederhana yaitu array dan struktur data majemuk
yaitu list ( Wahyudi 2004 ).
a. Array
Array (larik) adalah struktur data statik yang menyimpan sekumpulan elemen yang
bertipe sama. Setiap elemen diakses langsung melalui indeksnya. Indeks Array (larik)
harus tipe data yang menyatakan keterurutan misalnya integer atau karakter.
Banyaknya elemen larik harus sudah diketahui sebelum program dieksekusi. Array
merupakan suatu struktur data yang bersifat statis. Array harus dialokasikan terlebih
dahulu di dalam memory sebelum kita memakainya.
Universitas Sumatera Utara
18
b. List
Merupakan suatu struktur data pengembangan dari konsep ADT (Abstrak Data Type)
yang bersifat dinamis. List dapat dimanfaatkan secara effektif sesuai dengan
keperluan. List juga dapat benar – benar dihapus / dibersihkan dari memory. List
sebenarnya merupakan suatu type data tersendiri. Di bahasa Visual Studio 2010
Ultimate, List bisa berupa suatu Class ataupun Record. Ciri – ciri utama dari List
adalah, dia mempunyai minimal dua elemen utama. Elemen – elemen itu adalah data
dan pointer untuk menunjukkan ke list berikutnya ( Sanjaya 2001).
Tabel 1.2 Perbedaan mendetail antara Array dan List
Array
1. Pengaksesan bersifat Statis
List
1. Pengaksesan bersifat Dinamis
2. volumenya selalu tetap tidak tergantung 2. ukurannya berubah-ubah disesuaikan
pada jumlah data
dengan kebutuhan.
3. alokasi memori dilakukan pada saat array 3. alokasi memori ditentukan pada saat
didefinisikan.
data baru dibuat.
4. pembebasan memori dilakukan pada saat 4. pembebasan memori dilakukan setiap
program berhenti.
ada penghapusan data.
5. Cara akses bersifat random dengan 5. Cara akses ke masing-masing class
menggunakan nomor index.
data dilakukan secara linier (selalu
dimulai dari elemen pertama).
2.10 Penelitian Terdahulu
Penelitian yang dilakukan oleh Sareen (2013) yang berjudul Komparasi Algoritma
Quick Sort dan Bucket Sort pada Pengurutan Data Integer dimana metode Quick Sort
dan pengurutan lain menggunakan memori yang lebih efisien dan kompleksitas waktu
terbaik dibandingkan metode Bucket Sort dalam proses pengurutan data, maka
dilakukan penelitian untuk menemukan sebuah algortima sorting yang dapat
memberikan kompleksitas lebih baik lagi sesuai dengan kebutuhan yang diinginkan.
Universitas Sumatera Utara
19
Penelitian yang dilakukan oleh Tjaru & Setia (2009) yang berjudul Kompleksitas
Algoritma Pengurutan Strand Sort dan selection Sort, yang menerengakan bahwa
algoritma pengurutan data dengan selection sort merupakan algoritma pengurutan
paling buruk dari kedua metode pengurutan tersebut.
Kedua metode yang penulis tambahkan tersebut dilakukan pengujian dengan
menggunakan bahasa pemrograman C# data angka yang bertipe integer.
Universitas Sumatera Utara
Download