semakin panjang kata yang dicari maka semakin panjang pengecekan nilai untuk pergeseran sebab tiap fungsi pencarian dipanggil dan membuat tabel
perhitungan untuk pencarian terlebih dahulu lalu melakukan pergeseran dengan mengambil nilai maksimal dari perhitungan pencarian yang telah
dilakukan sebelumnya. Hal ini dilakukan dalam setiap pencarian per baris. Rata-rata hasil running time Algoritma Boyer Moore untuk pencarian kata
adalah 134.6 ms. 3.
Hasil Kompleksitas Algoritma Knuth Morris Pratt adalah Tn = Ɵm. Sedangkan Hasil Kompleksitas Algoritma Boyer Moore adalah Tn =
Ɵmn. Maka pencarian dengan menggunakan Algoritma Knuth Morris Pratt lebih
cepat dibandingkan dengan Algoritma Boyer Moore.
5.2 Saran
Adapun saran-saran yang diperlukan untuk penelitian maupun pengembangan berikutnya adalah:
1. Sistem ini sebaiknya ditambah menu pengolahan data seperti penambahan
data,edit data dan hapus data agar data dalam kamus semakin banyak untuk
pencarian kata pada kamus.
2. Sistem ini sebaiknya ditambahkan suara untuk pelafalan huruf hangul nya
agar user mampu mengucapkan kata hangul. 3.
Untuk pengembangan selanjutnya, diharapkan aplikasi ini menyediakan menu pilihan algoritma pencarian string yang baru ditemukan agar terlihat
perbedaan pada pencarian string antara Algoritma yang lama dengan Algoritma yang sudah mengalami proses perkembangan.
BAB 2
LANDASAN TEORI
2.1 Definisi Kamus
Kamus adalah sejenis buku rujukan yang menerangkan makna kata-kata. Kamus berfungsi untuk membantu seseorang mengenal perkataan baru. Selain menerangkan
maksud kata kamus juga mungkin mempunyai pedoman sebutan, asal usul etimologi sesuatu perkataan dan juga contoh penggunaan bagi sesuatu perkataan. Untuk
memperjelas kadang kala terdapat juga ilustrasi didalam kamus Susanto,2014.
2.2 Definisi Algoritma
Algoritma adalah langkah detail yang ditunjukkan untuk komputer guna menyelesaikan suatu masalah. Proses semacam algoritma sebenarnya dapat dijumpai dalam kehidupan
sehari hari. Untuk lebih mudah memahami arti dari algoritma, dapat diilustrasikan seperti membaca resep makanan.
Jika membaca resep makanan pasti akan melihat prosedur untuk membuat masakan. Prosedur dalam resep itu sebenarnya menyatakan seperti algoritma. Dengan
mengikuti langkah-langkah yang diberikan maka dapat membuat masakan tersebut. Dalam pengertian sekarang,algoritma mempunyai kesamaan tidak hanya dengan resep
tetapi juga dengan proses,metode dan prosedur Kadir, A. Heriyanto. 2005.
2.2.1 Algoritma String Matching pencocokan kata Pengertian string menurut Dictionary of Algorithms and Data Structures, National
Institute of Standards and Technology NIST adalah susunan dari karakter- karakterangka,alfabet atau karakter yang lain dan biasanya direpresentasikan sebagai
struktur dan array. String dapat berupa kata, frase, atau kalimat. Pencocokan string
string matching merupakan bagian penting dari sebuah proses pencarian stringstring searching dalam sebuah dokumen. Hasil dari sebuah sebuah pencarian string dalam
dokumen tergantung dari teknik dan cara pencocokan string yang digunakan Buulolo,
E. 2013.
Menurut Singla, N. Garg, D. 2012 ada dua teknik utama dalam algoritma string matching yaitu exact matching dimana hasil pencocokannya mengandung string
yang sama persis dengan string yang di-input, contohnya pada algoritma Needleman Wunsch, algoritma Smith Waterman, algoritma Knuth-Morris-Pratt, algoritma Boyer-
Moore-Horspool dan approximate matching dimana hasil pencocokannya mengandung string yang tidak harus persis dengan string yang di-input, contohnya pada algoritma
Fuzzy String Searching, algoritma Rabin Karp, algoritma Brute Force. Prinsip kerja algoritma string matching adalah sebagai berikut:
1. Memindai teks dengan bantuan sebuah window yang ukurannya sama dengan panjang pattern.
2. Menempatkan window pada awal teks. 3. Membandingkan karakter pada window dengan karakter dari pattern. Setelah
pencocokan baik hasilnya cocok atau tidak cocok, dilakukan shift ke kanan pada window. Prosedur ini dilakukan berulang-ulang sampai window berada pada akhir teks.
Mekanisme ini disebut mekanisme sliding-window Effendi, D., et al. 2013. Algoritma string matching mempunyai tiga komponen utama, yaitu:
1. Pattern, yaitu deretan karakter yang akan dicocokkan dengan teks, dinyatakan dengan x[0..m-1], panjang pattern dinyatakan dengan m.
2. Teks, yaitu tempat pencocokan pattern dilakukan, dinyatakan dengan y[0..n-1], panjang teks dinyatakan dengan n.
3. Alfabet, yang berisi semua simbol yang digunakan oleh bahasa pada teks dan pattern, dinyatakan dengan Σ dengan ukuran dinyatakan dengan ASIZE Effendi, D., et al.
2013.
2.2.1.1 Algoritma Knuth Morris Pratt 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
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 Ervana, A.
Pertiwi, A. 2012. 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 di teks yang bersesuaian, sampai salah satu kondisi berikut dipenuhi :
a Karakter di pattern dan di teks yang dibandingkan tidak cocok mismatch.
b Semua karakter di pattern cocok.Kemudian algoritma akan memberitahukan
penemuan di posisi ini. 3. Algoritma kemudian menggeser pattern berdasarkan tabel shift, lalu mengulangi
langkah 2 sampai pattern berada di ujung teks Ervana, A. Pertiwi, A. 2012. Cara kerja Algoritma Knuth Morris Pratt yang digunakan untuk melakukan jumlah
pergeseran adalah sebagai berikut :
Tabel 2.1 Hasil Perhitungan kmpNext[i] dan shift[i]
Langkah-langkah untuk
menghitung nilai kmpNext[i] dan shift[i] adalah sebagai berikut : 1.
Untuk mendapatkan hasil pergeseran, mula-mula isi kmpNext[i] dengan nilai awal -1
i 1
2 3
4 x [i]
A B
A B
kmpNext[i] -1
-1 2
Shift[i] 1
1 3
3 2
i 1
2 3
4 x [i]
A B
A B
kmpNext[i] -1
Shift[i]
2. Membandingkan karakter dari kiri ke kanan
Bandingkan karakter A dan B jika tidak sama beri nilai 0 Bandingkan karakter A dan A jika sama beri nilai -1
Bandingkan karakter B dan B jika sama beri nilai 0 Bandingkan karakter A dan - jika tidak sama beri nilai 2
untuk karakter yang sama lihat nilai kmpNext[i] untuk mengisi tabel kmpNext[i], sedangkan untuk karakter yang tidak sama lihat nilai i untuk
mengisi tabel kmpNext[i]
3.
Pengisian kolom Shift dilakukan dengan memakai rumus i - kmpNext[i]
i - kmpNext[i] = 0 – -1 = 1
i - kmpNext[i] = 1 – 0 = 1
i - kmpNext[i] = 2 – -1 = 3
i - kmpNext[i] = 3 – 0 = 3
i - kmpNext[i] = 4 – 2 = 2
Setelah mendapatkan hasil pergeseran yang diperoleh dari Tabel 2.1 maka pencocokan
kata dapat dilakukan dengan langkah-langkah berikut : i
1 2
3 4
x [i] A
B A
B kmpNext[i]
-1 -1
2 Shift[i]
i 1
2 3
4 x [i]
A B
A B
kmpNext[i] -1
-1 2
Shift[i] 1
1 3
3 2
Index 1
2 3
4 5
6 7
8 9
Text B
A C
B A
B A
B A
B
Index 1
2 3
Pattern A
B A
B
Keterangan : Text menjelaskan tentang teks yang telah disimpan dalam database dan Pattern menjelaskan tentang pola atau inputan kata yang ingin dicari atau dicocokkan
kedalam teks. Langkah 1 :
Index 1
2 3
4 5
6 7
8 9
Text B
A C
B A
B A
B A
B
Index 1
2 3
Pattern A
B A
B Keterangan : Terlihat karakter B dan A tidak cocok. Nilai Shift [0] yang berkarakter A
bernilai 1 seperti terlihat pada Tabel 2.1 maka terjadi pergeseran sebanyak 1 kali.
Langkah 2 : Index
1 2
3 4
5 6
7 8
9 Text
B A
C B
A B
A B
A B
Index 1
2 3
Pattern A
B A
B Keterangan : Terlihat karakter C dan B tidak cocok. Nilai Shift [1] yang berkarakter B
bernilai 1 seperti terlihat pada Tabel 2.1 maka terjadi pergeseran sebanyak 1 kali.
Langkah 3 : Index
1 2
3 4
5 6
7 8
9 Text
B A
C B
A B
A B
A B
Index 1
2 3
Pattern A
B A
B Keterangan : Terlihat karakter C dan A tidak cocok. Nilai Shift [0] yang berkarakter A
bernilai 1 seperti terlihat pada Tabel 2.1 maka terjadi pergeseran sebanyak 1 kali.
Langkah 4 : Index
1 2
3 4
5 6
7 8
9 Text
B A
C B
A B
A B
A B
Index 1
2 3
Pattern A
B A
B Keterangan : Terlihat karakter B dan A tidak cocok. Nilai Shift [0] yang berkarakter A
bernilai 1 seperti terlihat pada Tabel 2.1 maka terjadi pergeseran sebanyak 1 kali.
Langkah 5 : Index
1 2
3 4
5 6
7 8
9 Text
B A
C B
A B
A B
A B
Index 1
2 3
Pattern A
B A
B Keterangan : Terlihat semua karakter telah cocok. Tetapi karakter masih bisa bergeser
dan kemungkinan ada kecocokan karakter maka harus shift dengan nilai Shift[4]. Nilai
Shift[4] pada Tabel 2.1 adalah bernilai 2. Maka lakukan pergeseran sebanyak 2 kali.
Langkah 6 : Index
1 2
3 4
5 6
7 8
9 Text
B A
C B
A B
A B
A B
Index 1
2 3
Pattern A
B A
B Keterangan : Terlihat semua karakter telah cocok dan window berada pada akhir teks
maka tidak ada lagi pergeseran. Berdasarkan contoh diatas maka dapat disimpulkan bahwa informasi yang
digunakan untuk melakukan pergeseran adalah berdasarkan hitungan ketidakcocokan Pattern dari kiri pada Text.
2.2.1.2 Algoritma Boyer Moore Algoritma Boyer Moore adalah salah satu algoritma untuk mencari suatu string di dalam
teks, dibuat oleh R.M Boyer dan J.S Moore. Algoritma Boyer Moore melakukan perbandingan dimulai dari kanan ke kiri, tetapi pergeseran window tetap dari kiri ke
kanan. Jika terjadi ketidakcocokan, maka akan dicek nilai pergeseran yang dilakukan dengan melihat ke tabel bad character shitf dan good suffix shift. Nilai terbesar yang
didapat diantara kedua tabel tersebut akan diambil dan pergeseran akan dilakukan sesuai dengan nilai tersebut.
Algoritma Boyer-Moore menggunakan dua buah tabel untuk mengolah informasi saat terjadi kegagalan pencocokan pattern. Tabel pertama disebut bad
character shitf juga sering disebut occurrence heuristic OH. Tabel kedua disebut dengan istilah good suffix shift juga disebut match heuristic MH Charras, C.
Lecroq, T. 2004. Secara sistematis, langkah-langkah yang dilakukan Algoritma Boyer Moore
pada saat mencocokkan string : 1. Algoritma Boyer-Moore mulai mencocokkan pattern pada awal teks.
2. Dari kanan ke kiri, algorima ini akan mencocokan karakter per karakter pattern dengan karakter di teks yang bersesuaian, sampai salah satu kondisi berikut dipenuhi:
a Karakter di pattern dan di teks yang dibandingkan tidak cocok mismatch.
b Semua karakter di pattern cocok kemudian algoritma akan memberitahukan
penemuan diposisi ini. 3. Algoritma kemudian menggeser pattern dengan memaksimalkan nilai penggeseran
good suffix dan penggeseran bad-character, lalu mengulangi langkah 2 sampai pattern berada di ujung teks Susanto,2014.
Cara kerja Algoritma Boyer Moore yang digunakan untuk melakukan jumlah pergeseran adalah sebagai berikut :
2.2.1.2.1 Suffix Tabel Suffix berisi nilai-nilai dari tiap karakter yang ada di pattern yang menunjukkan
adanya perulangan akhiran atau tidak dan dimana letak perulangan tersebut sehingga
ketika proses perhitungan tabel bmGs Tabel 2.3, dapat diketahui seberapa banyak
karakter yang digeser untuk pencocokan karakter selanjutnya.
Tabel 2.2 Hasil Perhitungan Suffix
Langkah-langkah untuk menghitung nilai Suffix adalah sebagai berikut : 1.
Isi kolom Suffix paling kanan dengan nilai m. m adalah panjang karakter pattern
2. Membandingkan karakter dari kanan ke kiri
Bandingkan karakter B dan A jika tidak cocok maka beri nilai 0 Bandingkan karakter B dan B jika cocok maka jangan beri nilai
Bandingkan karakter B dan A jika tidak cocok maka beri nilai 0
3. Pengisian kolom yang tidak bernilai dilakukan dengan memakai rumus
i – i – s . s adalah nilai berapa kali pergeseran karakter yang cocok.
i – i – s = 1 – 1 – 2 = 2
2.2.1.2.2 Good-Suffix Shift Match Heuristic Tabel Match Heuristic sering disebut juga Good-Suffix Shift bmGs, dimana
pergeserannya dilakukan berdasarkan posisi ketidakcocokkan karakter yang terjadi. Maksudnya untuk menghitung tabel bmGs perlu diketahui pada posisi keberapa terjadi
ketidakcocokkan. Posisi ketidakcocokkan itulah yang akan menentukan besar pergeseran Argakusumah, K.W. Hansun, S. 2014.
i 1
2 3
x[i] A
B A
B Suffix
2 4
i 1
2 3
x[i] A
B A
B Suffix
4
i 1
2 3
x[i] A
B A
B Suffix 0
4
i 1
2 3
x[i] A
B A
B Suffix 0
2 4
Tabel 2.3 Hasil Perhitungan bmGs
Langkah-langkah untuk menghitung nilai bmGs adalah sebagai berikut : 1.
Isi bmGs sesuai dengan panjang karakter yaitu 4.
2. Lakukan pengecekan dari kanan, lakukan pengecekan hingga i = 0
i = 3, jika i + 1 = 4 dan ternyata Suffix bernilai 4 maka tandai kolom i = 2, jika i + 1 = 3 dan ternyata Suffix bernilai 0 maka jangan beri tanda pada
kolom i = 1, jika i + 1 = 2 dan ternyata Suffix bernilai 2 maka tandai kolom
i = 0, jika i + 1 = 1 dan ternyata Suffix bernilai 0 jangan beri tanda pada kolom
3.
Masukkan rumus m – 1 – i pada nilai yang telah diberi ceklis
m – 1 – i = 4 – 1 – 3 = 0. Karena hasilnya 0 maka tidak melakukan perhitungan
m – 1 – i = 4 – 1 – 1 = 2. Karena hasilnya 2 maka perhitungan indeks dari 0
sampai 1
4.
Ubahlah nilai indeks 0 dan 1 dengan rumus m- 1 – i
m- 1
– i = 4 – 1 – 1 = 2
i 1
2 3
x[i] A
B A
B bmGs
2 2
4 1
i 1
2 3
x[i] A
B A
B Suffix
2 4
bmGs 4
4 4
4
i 1
2 3
x[i] A
B A
B Suffix
2 4
bmGs 4
4 4
4
i 1
2 3
x[i] A
B A
B Suffix
2 4
bmGs 2
2 4
4
5.
Lakukan pengecekan sampai m – 2 = 4 – 2 = 2, artinya menghitung indeks dari
0 sampai 2 6.
Masukkan rumus m – 1 – suffix untuk mengisi kolom bmGs
i = 0 4
– 1 – 0 = 3, 3 adalah nilai i yang akan diisi pada kolom bmGs m
– 1 – i = 4 – 1 – 0 = 3
i = 1 4
– 1 – 2 = 1, 1 adalah nilai i yang akan diisi pada kolom bmGs m
– 1 – i = 4 – 1 – 1 = 2
i = 2 4
– 1 – 0 = 3, adalah nilai i yang akan diisi pada kolom bmGs m
– 1 – i = 4 – 1 – 2 = 1
2.2.1.2.3 Bad-Character Shift Occurance Heuristic Tabel Occurrence Heuristic sering disebut juga Bad-Character Shift bmBc, dimana
pergeserannya dilakukan berdasarkan karakter apa yang menyebabkan tidak cocok dan seberapa jauh karakter tersebut dari karakter paling akhir Argakusumah, K.W.
Hansun, S. 2014. i
1 2
3 x[i]
A B
A B
Suffix 2
4 bmGs
2 2
4 3
i 1
2 3
x[i] A
B A
B Suffix
2 4
bmGs 2
2 4
3
i 1
2 3
x[i] A
B A
B Suffix
2 4
bmGs 2
2 4
1
Tabel 2.4 Hasil Perhitungan bmBc
Langkah-langkah untuk menghitung nilai bmBc adalah sebagai berikut : 1.
Isi dengan panjang karakter yaitu 4 x[i]
A B
bmBc 4
2. Pengisian tabel dimulai dari 0 sampai m - 2 yaitu 4 – 2 = 2
3.
Isi tabel bmBc dengan rumus m – 1 – i
i = 0 m
– 1 – i = 4 – 1 – 0 = 3, i = 0 menunjukkan karakter A maka isi tabel bmBc dengan nilai 3
i = 1 m
– 1 – i = 4 – 1 – 1 = 2, i = 1 menunjukkan karakter B maka isi tabel bmBc dengan nilai 2
i 1
2 3
x[i] A
B A
B x[i]
A B
bmBc 1
2 4
i 1
2 3
x[i] A
B A
B
i 1
2 3
x[i] A
B A
B
x[i] A
B bmBc
3 4
i 1
2 3
x[i] A
B A
B
i = 2 m
– 1 – i = 4 – 1 – 2 = 1, i = 2 menunjukkan karakter A maka isi tabel bmBc
dengan nilai 1
Setelah mendapatkan hasil pergeseran yang diperoleh dari Tabel 2.3 dan Tabel 2.4
maka pencocokan kata dapat dilakukan dengan langkah-langkah berikut :
Tabel 2.5 Pergeseran karakter untuk bmBc
1 2
3 4
5 6
7 8
9 B
A C
B A
B A
B A
B
Tabel 2.6 Pergeseran posisi untuk bmGs
Langkah 1 : Index 0
1 2
3 4
5 6
7 8
9 bmBc B
A C
B A
B A
B A
B
Index 0 1
2 3
bmGs A B
A B
Keterangan : Terlihat karakter C dan A tidak cocok maka dibandingkan nilai bmBc
dan bmGs. Nilai bmBc C bernilai 4 seperti terlihat pada Tabel 2.4,lalu mengambil
nilai bmBc masukkan rumus 4 - m + 1 + i = 4 – 4 + 1 + 2 = -3. Sedangkan nilai
bmGs A bernilai 4 seperti terlihat pada Tabel 2.3 Maka bmBc bernilai -3 dan bmGs
x[i] A
B bmBc
3 2
4
i 1
2 3
x[i] A
B A
B x[i]
A B
bmBc 1
2 4
1 2
3 A
B A
B
bernilai 4. Bandingkanlah maka hasil maksimum yang diperoleh untuk mengambil pergeseran yaitu 4 kali pergeseran.
Langkah 2 : Index 0
1 2
3 4
5 6
7 8
9 bmBc B
A C
B A
B A
B A
B
Index 1
2 3
bmGs A
B A
B Keterangan : Terlihat semua karakter cocok. Jika semua karakter telah cocok maka
harus shift dengan nilai bmGs [0]. Nilai bmGs [0] pada Tabel 2.3 adalah bernilai 2.
Maka lakukan pergeseran sebanyak 2 kali tanpa membandingkan nilai bmGs dan bmBc.
Langkah 3 : Index 0
1 2
3 4
5 6
7 8
9 bmBc B
A C
B A
B A
B A
B
Index 1
2 3
bmGs A
B A
B Keterangan : Terlihat semua karakter telah cocok dan window berada pada akhir teks
maka tidak ada lagi pergeseran.
2.3 Definisi Kompleksitas Algoritma