BAB 2
LANDASAN TEORI
2.1 Desain Analisis Algoritma
Kovelamudi 2013 menyatakan algoritma dapat di definisikan sebagai prosedur komputasi yang mengambil beberapa nilai atau set nilai-nilai sebagai output. Ini adalah
tahap-tahap komputasi yang akan mengubah input menjadi output. Dan merupakan alat untuk untuk memecahkan berbagai permasalahan di dalam komputer. Algoritma harus
memiliki kriteria sebagai berikut : Input
: nilai 0 atau lebih disisipkan. Output
: setidaknya akan menghasilkan satu kuantitas. Kepastian
: setiap instruksi jelas dan tidak ambigu. Finiteness
:Jika kita menelusuri petunjuk dari sebuah algoritma, maka untuk semua kasus, algoritma akan berhenti setelah memasuki langkah
terakhir. Efektivitas
: Setiap instruksi harus dimulai dari awal sehingga dapat diproses. Sebuah program adalah ekspresi dari algoritma dalam bahasa pemrograman. Kumpulan
dari instruksi, yang mana komputer akan mengikuti instruksi untuk memecahkan sebuah masalah.
Sekali sebuah algoritma diberikan kepada sebuah permasalahan dan dijamin akan memberikan hasil yang diharapkan, maka langkah penting selanjutnya adalah
menentukan besar biaya yang diperlukan algoritma tersebut untuk memperoleh hasil itu.
Proses inilah yang disebut dengan analisis algoritma Weiss.M.A, 1996. Maksud
dilakukannya analisis algoritma Horowitz Sahni, 1978 adalah untuk: 1.
Memenuhi aktivitas intelektual. 2.
Meramalkan suatu hal yang akan terjadi atau yang akan didapat dari algoritma tersebut.
3. Mengetahui efektifitas suatu algoritma dibanding dengan algoritma yang lain
untuk persoalan yang sama.
Universitas Sumatera Utara
2.2 Jenis-jenis Algoritma
Jenis-jenis algoritma terdapat beragam klasifikasi algoritma dan setiap klasifikasi mempunyai alasan tersendiri. Salah satu cara untuk melakukan klasifikasi jenis-jenis
algoritma adalah dengan memperhatikan paradigma dan metode yang digunakan untuk mendesain algoritma tersebut. Beberapa paradigma yang digunakan dalam menyusun
suatu algoritma akan dipaparkan dibagian ini. Masing-masing paradigma dapat digunakan dalam banyak algoritma yang berbeda Kovelamudi, 2013.
2.2.1 Divide and Conquer
Kovelamudi 2013 paradigma untuk membagi suatu permasalahan besar menjadi permasalahan-permasalahan yang lebih kecil. Pembagian masalah ini dilakukan terus
menerus sampai ditemukan bagian masalah kecil yang mudah untuk dipecahkan. Singkatnya menyelesaikan keseluruhan masalah dengan membagi masalah besar dan
kemudian memecahkan permasalahan-permasalahan kecil yang terbentuk.
2.2.2 Dynamic Programming
Kovelamudi 2013 paradigma pemrograman dinamik akan sesuai jika digunakan pada suatu masalah yang mengandung sub-struktur yang optimal dan mengandung beberapa
bagian permasalahan yang tumpang tindih. Paradigma ini sekilas terlihat mirip dengan paradigma Divide and Conquer, sama-sama mencoba untuk membagi permasalahan
menjadi sub permasalahan yang lebih kecil, tapi secara intrinsik ada perbedaan dari karakter permasalahan yang dihadapi
2.2.3 Greedy Algorithm
Kovelamudi 2013 sebuah algoritma serakah mirip dengan sebuah pemrograman dinamik, bedanya jawaban dari submasalah tidak perlu diketahui dalam setiap tahap; dan
menggunakan pilihan “serakah” apa yang dilihat terbaik pada saat itu. Adapun jenis- jenis algoritma yang lain adalah :
Universitas Sumatera Utara
1. Bahasa Semu pseudocode.
Yaitu dengan menggunakan bahasa sehari-hari, tetapi harus jelas dan struktur. 2. DiagramAlirAlur Flowchart.
Yaitu dengan membuat suatu penulisan atau penyajian algoritma berupa diagram yang menggambarkan susunan alur logika dari suatu permasalahan.
2.3 Algoritma Quicksort
Quicksort adalah algoritma pengurutan yang dikembangkan oleh Tony Hoare. Algoritma Quicksort melakukan perbandingan sebayak n log n untuk mengurutkan data sebanyak
n. kondisi paling buruk dari jumlah perbandingan adalah n
2
. Secara praktis, Quicksort beroperasi lebih cepat dibanding algoritma dengan kompleksitas n logn n lainnya.
Sareen 2013 menyatakan bahwa keuntungan dari penggunaan algoritma Quicksort adalah cepat dan efisien, sedangkan kerugian yang dapat dialami adalah menghasilkan
performa yang buruk apabila data sudah terurut. Berikut adalah sarat dalam melakukan pengurutan ataupun penyortiran algoritma Quicksort;
1. Semua elemen yang ada disebelah kiri pivot harus lebih kecil atau sama
dengan pivot, dan semua elemen disebelah kanan pivot harus lebih besar atau sama dengan pivot.
2. Pivot yang sudah diurutkan disusun berdasarkan urutan dari arraylist.
3. Conquer yaitu disusun menjadi 2 sub array secara rekursif.
4. Kemudian digabungkan.
5. Permasalahannya yaitu sorting kunci n pada yang bukan urutan penurunan
6. Inputkan bilangan integer n positive, array dari kunci m yang sudah
diindekskan dari pertama hingga data ke-n. 7.
Output, array m yang berisi kunci yang tidak menurun 8.
Quicksortrendah, tinggi 1. Tinggi rendah
2. kemudian partisi rendah, tinggi, pivotIndex 3. Quicksort rendah, pivotIndex -1
4. Quicksort pivotIndex 1, tinggi
Partisi array untuk partisi Quicksort rendah, tinggi, poros
Universitas Sumatera Utara
1. pivotitem = S [rendah] 2. k=low
3. for j = low +1 tinggi 4. lakukan if S [ j ] pivot item
5. Kemudian k = k + 1 6. Ganti S [ j ] dan m [ k ]
7. pivot = k 8. Ganti S[low] dan S[pivot]
Quicksort adalah algoritma sorting acak berdasarkan paradigma Divide and Conquer Divide: memilih elemen acak dari x pivot dan partisi m ke dalam
L elements lebih kecil dari x E elements sama dengan x
G elements lebih besar dari x Recursive: sorting L dan G
Conquer: gabungkan L, E dan G
2.3.1 Metode Rekursif dalam Algoritma Quicksort
Quicksort dengan pendekatan rekursif tidak membutuhkan struktur data khusus, seperti stack, karena setiap kelompok akan berjalan secara rekursif. Robert Sedgewick Kevin
Wayne 2011 menyatakan bahwa terdapat dua bagian pada pendekatan rekursif, yaitu sort dan partisi. Partisi merupakan bagian yang melakukan tugas untuk
mengelompokkan data, sedangkan sort adalah bagian yang melakukan proses rekursif. Semakin besar jumlah data, maka kompleksitas ruang suatu algoritma rekursif akan
semakin besar.
Sedgewick Wayne 2011 juga menyatakan bahwa terdapat tiga kasus kompleksitas waktu pada penggunaan algoritma Quicksort. Pertama adalah kasus
terbaik, yaitu ketika proporsi data yang ingin diurutkan seimbang. Seimbang adalah keadaan di mana kelompok kiri dan kelompok kanan memiliki jumlah anggota
kelompok yang relatif sama. Biasanya kasus ini terjadi jika memakai pivot berupa nilai median. Kasus terbaik algoritma Quicksort memiliki kompleksitas n log n. Kedua adalah
kasus terburuk, yaitu ketika semua elemen, kecuali pivot, hanya berada di salah satu
Universitas Sumatera Utara
kelompok sehingga kelompok lainnya menjadi kosong. Hal ini akan menyebabkan terjadinya banyak pengulangan pada saat pengurutan data. Nilai pivot pada kasus ini
biasanya adalah nilai maksimum atau minimum dari kelompok data yang ingin diurutkan. Kompleksitas dari kasus terburuk ini adalah ½ n
2
. Kondisi yang ketiga adalah kasus rata-rata, yaitu ketika pivot tidak terpilih secara acak dari data. Kompleksitas dari
kasus rata-rata sama dengan kasus terbaik adalah 1.39 n log n.
2.3.2 Implementasi Quicksort
Implementasi Quicksort Abdul. K, 2012. Algoritma:
Subrutin QuicksortL,p,r Jika p r MAKA
q partisi L,p,r QuicksortL,p,q
QuicksortL,q+1,r Akhir-jika
Akhir – subrutin
Untuk mengurutkan isi keseluruhan Larik L, diperlukan pemanggilan seperti berikut: QuicksortL,O, jumlah-elemenL-1
Subrutin partisi sendiri seperti berikut: Subrutin partisiL,p,r
x L[p] i p
j r Ulang selama benar
Ulang selama L[j] x j j -1
Akhir-ulang Ulang selama L[j] x
i i – 1
Akhir-ulang Jika i j maka
Universitas Sumatera Utara
Tukarkan L[i] dengan L[j] tmp L[i]
L[i] L[j] L[j] tmp
Sebaliknya Nilai
– balik J Akhir-jika
Akhir – ulang
Akhir - subrutin
Abdul 2012 Pertama-tama x L[p] dipakai untuk membagi larik L[p..r] menjadi 2 bagian disebut pemartisian dengan kondisi semua elemen bagian kiri selalu
lebih kecil daripada nilai elemen pivot dan nilai semua elemen pivot. Pemartisian dilakukan dengan menggunakan variabel i dan j. Dalam hal ini i berupa penunjuk yang
bergerak turun.Variabel i dinaikkan secara terus menerus sehingga L[i] = elemen pivot dan variabel j diturunkan secara terus-menerus sehingga L[j] = elemen pivot. Proses
pengulangan dilakukan sampai nilai i = j. Pada keadaan seperti ini nilai balik subrutin partisi berupa j. Seperti pada gambar 2.1 dibawah :
Universitas Sumatera Utara
1 2
3 4
5 6
7 Pivot
L[0]yaitu 6
i j
Setelah i digerakkan ke kanan sampai L[i] = 6
i j
dan setelah j digerakkan ke kiri sampai L[j]=6
Setelah penukaran L[i] dan L[j] dilaksanakan
i j
Setelah i digerakkan ke kanan sampai L[i] =6
i j
Ke kiri sampai L[j]=6 Setelah penukaran L[i]
dan L[j] dilaksanakan i j
Setelah i digerakkan ke kanan sampai L[i] = 6
j i
dan setelah j digerakkan Ke kiri sampai L[j]=6
Karena ij tidak berlaku lagi,maka nilai balik berupa j
1 2
3 4
5 6
7 7
6 8
L[0..4] L[5..7]
Gambar 2.1 Keadaan setelah pivot didapatkan
6 2
4 3
7 5
4 8
6 2
4 3
7 5
4 8
4 2
4 3
7 5
6 8
4 2
4 3
7 5
6 8
4 2
4 3
5 7
6 8
4 2
4 3
5 7
6 8
4 2
4 3
5
Universitas Sumatera Utara
2.3.3 Kasus terburuk Running Time Quicksort
Kovelamudi 2013 kasus terburuk untuk Quicksort dapat terjadi ketika pivot adalah elemen terkecil atau terbesar. Salah satu dari objek L dan G memiliki ukuran n-1 dan
yang lain memiliki ukuran 0. Running timenya berdasarkan data yang sudah ada, kemudian dijumlahkan n + n -
1 + … + 2 + 1, dengan demikian, kasus terburuk running time pada Quicksort adalah On
2
. Berikut tabel running time Quicksort :
Tabel 2.1 Running Time Quicksort
Panjang Waktu
N 1
n-1 ..
.. n-1
1
2.3.4 Analisis kasus terburuk Running Time pada Quicksort
Kovelamudi 2013 pivot adalah yang terkecil ataupun terbesar dari element T N = T N-1 + cN, N 1
Telescoping: T N-1 = T N-2 + c N-1
T N-2 = T N-3 + c N-2 T N-3 = T N-4 + c N-3
…………... T 2 = T 1 + c.2
T N + T N-1 + T N- 2 + … + T 2 =
= T N-1 + T N- 2 + … + T 2 + T 1
+ C N + c N-1 + c N- 2 + … + c.2
T N = T 1 + c times the sum of 2 thru N = T 1 + c N N+1 2 -1 = O N2
Kasus rata-rata : O N log N Kasus terbaik: O N logN
Universitas Sumatera Utara
Pivot adalah nilai tengah dari array, bagian dari sisi kiri dan kanan memiliki ukuran yang sama. Partisi dari Log N, untuk memperoleh setiap partisi kita harus melakukan
perbandingan dan bukan hanya swap dari N2 . Karena itu kompleksitas dari algoritma ini adalah O N log N.
2.3.5 Kasus terbaik analisis Running Time
T N = T i + T N - i -1 + cN Kovelamudi 2013 waktu untuk menyortir file sama dengan waktu untuk menyortir
partisi yang disebelah kiri dengan element i, ditambah dengan waktu untuk menyortir sebelah kanan dengan elemen N-i-1, ditambah dengan waktu untuk membangun
partisi. Kita ambil pivot dari tengah
T N = 2 T N2 + cN Bagi dengan N: T N N = T N2 N2 + c
Telescoping: T N N = T N2 N2 + c
T N2 N2 = T N4 N4 + c T N4 N4 = T N8 N8 + c
…… T 2 2 = T 1 1 + c
Ambil semua persamaan :
T N N + T N2 N2 + T N4 N4 + …. + T 2 2 = = N2 N2 + T N4 N4 + … + T 1 1 + c.logN
Setelah penukaran nilai yang sama: T NN = T 1 + c LogN
T N = N + N c LogN = O NlogN
2.4 Algoritma Knuth-Morris-Pratt KMP
Algoritma Knuth-Morris-Pratt merupakan salah satu algoritma pencarian string, yang dikembangkan secara terpisah oleh Donald E. Knuth pada tahun 1967 dan James H.
Morris bersama Vaughan R. Pratt pada tahun 1966, kemudian dipublikasikan secara
Universitas Sumatera Utara
bersamaan pada tahun 1977. Algoritma Knuth-Morris-Pratt melakukan perbandingan karakter teks dan karakter pada pola dari kiri ke kanan. Ide dari algoritma ini adalah
bagaimana memanfaatkan karakter-karakter pola yang sudah diketahui ada di dalam teks sampai terjadinya ketidakcocokkan untuk melakukan pergeseran. Seperti pada
gambar 2.2 :
Gambar 2.2 Pergeseran dalam Algoritma Pencocokan String
Misalkan, string teks y pada gambar 2 mempunyai panjang n, indeksnya dinyatakan dengan i, serta string pola x, mempunyai panjang m, indeknya dinyatakan
dengan j. Jika terjadi ketidakcocokan di x[j] = a dan y[i+j] = b, maka telah diketahui terdapat karakter-karakter pola yang ada pada teks yaitu x[0..j-1] = y[i..j+j-1] = u.
karakter-karakter ini dapat dimanfaatkan sehingga dapat dimungkinkan melakukan pergeseran yang lebih jauh.
Secara sistematis, langkah-langkah yang dilakukan algoritma Knuth-Morris- Pratt pada saat mencocokkan string:
1. Algoritma Knuth-Morris-Pratt mulai mencocokkan pattern pada awal teks.
2. Dari kiri ke kanan, algoritma ini akan mencocokkan karakter per karakter
pattern dengan karakter diteks yang bersesuaian, sampai salah satu kondisi berikut dipenuhi:
a. Karakter dipattern dan diteks yang dibandingkan tidak cocok
mismatch. b.
Semua karakter dipattern cocok. Kemudian algoritma akan memberitahukan penemuan di posisi ini.
3. Algoritma kemudian menggeser pattern berdasarkan tabel, lalu mengulangi
langkah 2 sampai pattern berada di ujung teks.
Universitas Sumatera Utara
2.4.1 Kelebihan Algoritma Knuth-Morris Pratt KMP
Pada algoritma KMP, kita memelihara informasi yang digunakan untuk melakukan jumlah pergeseran. Algoritma menggunakan informasi tersebut untuk membuat
pergeseran yang lebih jauh, tidak hanya satu karakter.
2.4.2 Kekurangan Algoritma Knuth-Morris Pratt KMP
Kekurangan yakni efektifitas dari algoritma ini akan berkurang seiring dengan bertambahnya aplikasi yang dibuka ketika menjalankan aplikasi ini.
2.4.3 Fungsi Pinggiran Border Function Pada Metode KMP
Fungsi pinggiran bj didefinisikan sebagai ukuran awalan terpanjang dari P yang merupakan akhiran dari P[1..j]. Sebagai contoh, tinjau pattern P = ababaa. Nilai F
untuk setiap karakter di dalam P adalah sebagai berikut:
Tabel 2.2 Fungsi Pinggiran
J 1
2 3
4 5
6 P[j]
A B
A B
A A
B[j] 1
2 3
1
2.4.4 Alur Dari Algoritma Knuth-Morris-Pratt KMP
masukan: sebuah array karakter, S teks yang akan dicari
sebuah array karakter, W kata yang dicari output:
integer yang berbasis-nol posisi di S di mana W adalah ditemukan mendefinisikan variabel:
integer, m ← 0 awal perbandingan saat ini dalam S integer, i ← 0 posisi dari karakter saat ini di W
sebuah array bilangan bulat, T meja, dihitung di tempat lain
Universitas Sumatera Utara
selama m + i adalah kurang dari panjang dari S, lakukan: jika W [i] = S [m + i],
jika S sama dengan panjang dari W -1, kembali m
i ← i + 1 jika tidak,
m ← m + i - T [i], jika T [i] adalah lebih besar dari -1,
i ← T [i] lain
i ← 0 Jika kita mencapai di sini, kita telah mencari semua S tidak berhasil
mengembalikan panjang dari S.
Gambar 2.3 Algoritma KMP
2.5 Netbeans
Fatta 2007 netbeans adalah sebuah proyek software OpenSource. Proyek Netbeans mulai diprakarsai oleh Perusahaan Sun Microsistems sejak bulan Juni 2000 dan terus
berkembang hingga saat ini. Netbeans mengacu pada dua hal, yaitu Netbeans platform untuk pengembangan aplikasi desktop java dan sebuah Netbeans IDE Integrated
Development Environment. Netbeans dimulai pada tahun 1996 sebagai Xelfi Delphi, Java IDE proyek mahasiswa di bawah bimbingan Fakultas Matematika dan
Fisika di Charles University di Praha. Pada tahun 1997 Staněk Romawi membentuk
perusahaan untuk proyek tersebut dan menghasilkan versi komersial Netbeans IDE hingga kemudian dibeli oleh Sun Microsistems pada tahun 1999. IDE Netbeans
memiliki editor untuk file Java yang berbasiskan teks ataupun GUI Graphical User Interface. Ada bermacam-macam proyek file Java yang dapat dibuat di dalam
Netbeans. Netbeans yang berisi sebuah aplikasi GUI Java yang bertujuan sebagai sarana untuk memperkenalkan fitur editor teks dari IDE Netbeans.
2.6 Flowchart