5. Skip Search, Algoritma ini membuat tabel dari teks yang akan dibandingkan dan menyesuaikannya dengan kata yang dicari. Proses ini cukup memakan waktu,
ditambah dengan jika kata yang dicari pendek, maka pergeseran yang bisa dilakukan Algoritma Skip Search juga pendek. Kelebihan Algoritma Skip Search adalah
unggul dalam pencarian kata yang panjang atau pencarian kalimat. Ini dikarenakan makin panjang kata yang dicari, maka pergeseran yang dilakukan Algoritma Skip
Search juga panjang. 6. Hasil Kompleksitas Algoritma Not So Naive adalah Tn = Omn. Sedangkan Hasil
Kompleksitas Algoritma Skip Search juga Tn = Omn.
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. 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.
Universitas Sumatera Utara
BAB 2
LANDASAN TEORI
2.1. Algoritma
Algoritma adalah urutan langkah-langkah penyelesaian masalah yang disusun secara matematis dan logis. Tanpa kita sadari, kebanyakan dari kegiatan yang kita
lakukan setiap harinya selalu berlandaskan algoritma. Dalam beberapa konteks, algoritma adalah spesifikasi urutan langkah
untuk melakukan pekerjaan tertentu. Pertimbangan dalam pemilihan algoritma adalah, pertama, algoritma haruslah benar. Artinya algoritma akan memberikan
keluaran yang dikehendaki dari sejumlah masukan yang diberikan. Tidak peduli sebagus apapun algoritma, kalau memberikan keluaran yang salah,
pastilah algoritma tersebut bukanlah algoritma yang baik. Zarlis Handrizal, 2008.
2.1.1 Algoritma String Matching pencocokan string
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. Pencocokan string string
matching menurut Dictionary of Algorithms and Data Structures, National Institute of Standards and Technology NIST, diartikan sebagai sebuah
permasalahan untuk menemukan pola susunan karakter string di dalam string lain atau bagian dari isi teks. String Matching merupakan subjek yang sangat penting
di dalam domain yang sangat luas dalam pengolahan teks. Charras Lecroq. 2004
Universitas Sumatera Utara
Pencocokan string string matching secara garis besar dapat dibedakan menjadi dua yaitu :
1 Exact string matching, merupakan pencocokan 2 string secara tepat dengan susunan karakter dalam string yang dicocokkan memiliki jumlah maupun
urutan karakter dalam string yang sama. Contoh : kata step akan menunjukkan kecocokan hanya dengan kata step.
2 Inexact string matching atau Fuzzy string matching, merupakan pencocokan string secara samar, maksudnya pencocokan string dimana string yang
dicocokkan memiliki kemiripan dimana keduanya memiliki susunan karakter yang berbeda mungkin jumlah atau urutannya tetapi string-string tersebut
memiliki kemiripan baik kemiripan tekstualpenulisan approximate string matching atau kemiripan ucapan phonetic string matching. Inexact string
matching masih dapat dibagi lagi menjadi dua yaitu : a. Pencocokan string berdasarkan kemiripan penulisan approximate string
matching merupakan pencocokan string dengan dasar kemiripan dari segi penulisannya jumlah karakter, susunan karakter dalam dokumen. Tingkat
kemiripan ditentukan dengan jauh tidaknya beda penulisan dua buah string yang dibandingkan tersebut dan nilai tingkat kemiripan ini ditentukan oleh
pemrogram programmer. Contoh : c mpuler dengan compiler, memiliki jumlah karakter yang sama tetapi ada dua karakter yang berbeda. Jika
perbedaan dua karakter ini dapat ditoleransi sebagai sebuah kesalahan penulisan maka dua string tersebut dikatakan cocok.
b. Pencocokan string berdasarkan kemiripan ucapan phonetic string
matching merupakan pencocokan string dengan dasar kemiripan dari segi pengucapannya meskipun ada perbedaan penulisan dua string yang
dibandingkan tersebut. Contoh step dengan steb dari tulisan berbeda tetapi dalam pengucapannya mirip sehingga dua string tersebut dianggap cocok.
Contoh yang lain adalah step, dengan steppe, sttep, stepp, stepe. Syaroni Munir. 2005
Universitas Sumatera Utara
2.1.1.1 Algoritma Not So Naive
Algoritma Not So Naive pertama kali dipublikasikan oleh Christophe Hancart tahun 1992. Algoritma Not So Naive merupakan variasi turunan dari algoritma
Naive atau yang sering disebut algoritma Brute Force.
Cara kerja
algoritma ini adalah dengan memiliki fase pencarian mengecek teks dan pola dari kiri ke kanan.
Lalu, algoritma Not So Naive akan mengidentifikasi terlebih dahulu dua kasus yang dimana di setiap akhir fase pencocokan pergeseran dapat dilakukan
sebanyak 2 posisi ke kanan, tidak seperti algoritma Naive yang dimana pergeseran tetaplah sebanyak 1 posisi ke kanan.
Kita asumsikan bahwa P[0] ≠ P[1]. Jika P[0] = T[s] dan P[1] = T[s+1], maka di akhir fase pencocokan pergeseran s bisa dilakukan sebanyak 2 posisi,
karena P[0] ≠ P[1] = T[s+1]. Dan jika P[0] = P[1]. Jika P[0] = T[s] tapi P[1] ≠ T[s+1], maka sekali lagi pergesaran s dapat dilakukan sebanyak 2 posisi Cantone
Faro, 2004 dimana P adalah Pattern, T adalah Teks dan s adalah nilai posisi.
2.1.1.1.1 Pencarian Algoritma Not So Naive
Saat fase pencarian dari Algoritma Not So Naive perbandingan karakter dilakukan dengan posisi pola mengikuti urutan 1, 2, ..., m-2, m-1, 0 dimana m adalah panjang
pattern. Di setiap percobaan dimana “jendela” diposisikan di teks faktor y[i..j +
m-1]. Jika x[0] = x[1] dan x[1] ≠ y[j+1] atau jika x[0] ≠ x[1] dan x[1] = y[j+1] polanya akan digeser sebanyak 2 posisi di setiap akhir percobaan dan sebanyak 1
posisi jika kondisi di atas tidak terpenuhi Alapati Mannava, 2011 dimana y adalah teks dan x adalah pattern.
Berikut diberikan contoh untuk menunjukkan proses pencarian
Algoritma Not So Naive dengan pola WIJA yang akan dicari pada teks RICKYWIJAYA.
Dimana karakter urutan 0 dan karakter urutan 1 pada pattern tidak mengalami kesamaan x[0] = x[1] maka nilai variabel k akan diinisialisasi
dengan nilai 1 dan nilai variabel ell akan diinisialisasi dengan nilai 2 dimana kedua variabel tersebut akan digunakan untuk nilai pergeseran pada proses
pencocokan.
Universitas Sumatera Utara
Tabel 2.1 Proses Pencocokan Algoritma Not So Naive di Percobaan Pertama
Pada Tabel 2.1, perbandingan karakter pertama x[1] == y[j+1] mengalami
kecocokan namun di perbandingan kedua mengalami ketidakcocokan, karena saat perbandingan pertama telah terjadi kecocokan, namun di urutan selanjutnya tidak
terjadi kecocokan maka posisi pola akan digeser sebanyak 2 posisi sesuai dengan nilai variabel ell.
Tabel 2.2 Proses Pencocokan Algoritma Not So Naive di Percobaan Kedua
Pada Tabel 2.2, perbandingan karakter pertama x[1] = y[j+1] sudah mengalami
ketidakcocokan. Maka akan dilakukan percobaan selanjutnya dengan posisi pola digeser sebanyak 1 posisi sesuai dengan nilai variabel k.
Tabel 2.3 Proses Pencocokan Algoritma Not So Naive di Percobaan Ketiga
Pada Tabel 2.3, perbandingan karakter pertama x[1] = y[j+1] masih mengalami
ketidakcocokan. Maka akan dilakukan percobaan selanjutnya dengan posisi pola digeser sebanyak 1 posisi sesuai dengan nilai variabel k.
Tabel 2.4 Proses Pencocokan Algoritma Not So Naive di Percobaan Keempat
I 1
2 3
4 5
6 7
8 9
10 Teks
R I
C K
Y W
I J
A Y
A Pola
W I
J A
II 1
2 3
4 5
6 7
8 9
10 Teks
R I
C K
Y W
I J
A Y
A Pola
W I
J A
III 1
2 3
4 5
6 7
8 9
10 Teks
R I
C K
Y W
I J
A Y
A Pola
W I
J A
IV 1
2 3
4 5
6 7
8 9
10 Teks
R I
C K
Y W
I J
A Y
A Pola
W I
J A
Universitas Sumatera Utara
Pada Tabel 2.4, perbandingan karakter pertama x[1] = y[j+1] masih mengalami
ketidakcocokan. Maka akan dilakukan percobaan selanjutnya dengan posisi pola digeser sebanyak 1 posisi sesuai dengan nilai variabel k.
Tabel 2.5 Proses Pencocokan Algoritma Not So Naive di Percobaan Kelima
Pada Tabel 2.5, perbandingan karakter mengalami kecocokan x[1] == y[j+1]
dimulai dari perbandingan karakter W, I, J, dan A semua mengalami kecocokan, oleh sebab itu teks akan dikeluarkan. Namun, algoritma Not So Naive tidak
berhenti sampai disini. Algoritma Not So Naive akan melakukan percobaan terus sampai sisa teks lebih kecil daripada pola. Untuk percoabaan selanjutnya, posisi
pola akan digeser sebanyak 2 posisi sesuai dengan nilai variabel ell.
Tabel 2.6 Proses Pencocokan algoritma Not So Naive di Percobaan Keenam
Pada Tabel 2.6, perbandingan karakter pertama mengalami ketidakcocokan x[1]
= y[j+1]. Maka akan dilakukan percobaan selanjutnya dengan posisi pola digeser sebanyak 1 posisi sesuai dengan nilai variabel k. Namun dikarenakan sisa
teks telah lebih kecil daripada pola maka fase pencarian berhenti disini.
2.1.1.2 Algoritma Skip Search
Algoritma Skip Search merupakan salah satu algoritma pencocokan string, yang dipublikasikan secara luas oleh Charas, C et al., 1998. Cara kerja algoritma Skip
Search seperti algoritma Knuth Morris Pratt dengan mendeteksi jendela dari karakter yang ada dari kiri ke kanan dan menyimpannya ke dalam sebuah wadah
untuk menentukan titik awal dari jendela karakter tersebut Charas et al., Naser et al., 2012, 1998.
V 1
2 3
4 5
6 7
8 9
10 Teks
R I
C K
Y W
I J
A Y
A Pola
W I
J A
VI 1
2 3
4 5
6 7
8 9
10 Teks
R I
C K
Y W
I J
A Y
A Pola
W I
J A
Universitas Sumatera Utara
Jadi, terdapat suatu pola yang ingin kita cari dan kita inisialkan x dan memiliki panjang yang kita inisialkan dengan m. Teks yang ingin kita cari kita
inisialkan y dan memiliki panjang yang kita inisialkan dengan n. Untuk setiap simbol alfabet, sebuah wadah akan menyimpan semua posisi simbol dari x. Saat
sebuah simbol berulang sebanyak k di dalam teks, maka akan ada sebanyak k posisi yang sesuai dalam wadah simbol. Saat pola lebih pendek daripada alfabet
yang ada dalam teks, maka akan ada banyak tempat kosong dalam wadah. Dalam perulangan utama dari fase pencarian terdapat proses memeriksa
setiap teks simbol ke m, Yj yang nantinya iterasi utama nm. Untuk Yj, menggunakan setiap posisi yang ada di wadah z[Yj] untuk mendapatkan titik awal
yang memungkinkan p dari x di dalam y. Lalu dilakukan proses perbandingan x dengan y dari posisi p, simbol dengan simbol, sampai terjadi ketidakcocokan atau
seluruhnya cocok Charras et al., 1998. Algoritma Skip Search memiliki efisiensi dalam mencari huruf kecil dalam pola yang panjang Naser et al., 2012.
2.1.1.2.1 Fase Preprocessing Algoritma Skip Search
Tahap preprocessing Algoritma Skip Search terdiri dari tahap komputasi wadah untuk menampung seluruh karakter alfabet untuk c ∈ ∑
z[c] = { i; 0 ≤ i ≤ m-1 and x[i] = c}.
Ruang dan waktu kompleksitas dari fase preprocessing adalah O m+ Charras
Lecroq, 2004. Berikut diberikan contoh pada Tabel 2.7 untuk menunjukkan proses pencarian Algoritma Skip Search dengan pola WIJA yang akan dicari pada
teks RICKYWIJAYA.
Tabel 2.7 Tabel Teks dan Pola yang akan Dijadikan Contoh Kasus
Maka hasil dari fase preprocessing Algoritma Skip Search dapat dilihat di Tabel 2.8
1 2
3 4
5 6
7 8
9 10
Teks R
I C
K Y
W I
J A
Y A
Pola W
I J
A
Universitas Sumatera Utara
Tabel 2.8 Tabel Hasil preprocessing dari Algoritma Skip Search
2.1.1.2.2 Fase Pencarian Algoritma Skip Search
Dalam Fase Pencarian, algoritma Skip Search menggunakan aturan The Two Window Rule untuk menentukan batas sampai mana pola boleh digeser. Panjang
batas The Two Window Rule menggunakan rumus 2m-1 dimana m adalah panjang dari pola Bhandari Kumar, 2013. Lalu panjang dari hasil aturan The Two
Window Rule akan bernilai ganjil dan karakter yang terdapat di tengah panjang teks tersebutlah yang akan dilakukan proses pencocokan.
Gambar 2.1 Penentuan Panjang window dan Karakter Tengah yang akan
Digunakan dalam Proses Pencocokan 1
Dari Gambar 2.1 didapatkan batas panjang untuk pola digeser adalah dari urutan
0 huruf R sampai urutan 6 huruf I dan karakter yang akan digunakan dalam
proses pencocokan adalah karakter K. Namun, berdasarkan tabel 8 karakter K c
z[c] A
3 C
∅ I
1 J
2 K
∅ R
∅ W
Y ∅
Universitas Sumatera Utara
bernilai nol tidak ada dalam pola maka percobaan akan dilanjutkan dengan posisi jendela digeser sebanyak 4 posisi sesuai dengan panjang pola m.
Gambar 2.2 Penentuan Panjang window dan Karakter Tengah yang akan
Digunakan dalam Proses Pencocokan 2
Dari Gambar 2.2 didapatkan batas panjang untuk pola digeser adalah dari urutan 4 huruf W sampai urutan 10 huruf A dan karakter yang akan digunakan dalam
proses pencocokan adalah karakter J. Berdasarkan tabel 8 karakter J terdapat di
posisi 2 dalam pola, oleh karena itu pola akan langsung diposisikan menurut posisi J, dan dilakukan proses pencocokan dari urutan 5, 6, 7 dan 8. Dalam
pencocokan 2 ini, pola yang berisi karakter W, I, J, dan A mengalami kecocokan maka teks akan ditampilkan. Dan fase pencarian berhenti sampai disini. Ini
dikarenakan saat pola digeser sebanyak 4 posisi, panjang teks untuk dibandingkan hanya bersisa 3 dimana panjang pola lebih banyak daripada panjang teks yang
akan dicocokan.
2.2. Kompleksitas Algoritma
Kebenaran suatu algoritma harus diuji dengan jumlah masukan tertentu untuk melihat kinerja algoritma berupa waktu yang diperlukan untuk menjalankan
algoritmanya dan ruang memori yang diperlukan untuk struktur datanya. Algoritma yang bagus adalah algoritma yang mangkus efisien. Kemangkusan
algoritma diukur dari jumlah waktu dan ruang memori yang dibutuhkan untuk menjalankan algoritma tersebut.
Ada dua macam kompleksitas algoritma, yaitu kompleksitas waktu dan kompleksitas ruang. Kompleksitas waktu dari algoritma adalah mengukur jumlah
perhitungan komputasi yang dikerjakan oleh komputer ketika menyelesaikan
Universitas Sumatera Utara
suatu masalah dengan menggunakan algoritma. Ukuran yang dimaksud mengacu ke jumlah langkah-langkah perhitungan dan waktu tempuh pemrosesan.
Kompleksitas waktu merupakan hal penting untuk mengukur efisiensi suatu algoritma.
Kompleksitas waktu dari suatu algoritma yang terukur sebagai suatu fungsi ukuran masalah. Kompleksitas waktu dari algoritma berisi ekspresi
bilangan dan jumlah langkah yang dibutuhkan sebagai fungsi dari ukuran permasalahan. Kompleksitas ruang berkaitan dengan sistem memori yang
dibutuhkan dalam eksekusi program. Untuk mengukur kebutuhan waktu sebuah algoritma yaitu dengan
mengeksekusi langsung algoritma tersebut pada sebuah komputer, lalu dihitung berapa lama durasi waktu yang dibutuhkan untuk menyelesaikan sebuah
persoalan dengan n yang berbeda-beda. Kemudian dibandingkan hasil komputasi algoritma tersebut dengan notasi kompleksitas waktunya untuk mengetahui
efisiensi algoritmanya Nugraha, D.W. 2012. Kompleksitas algoritma diukur berdasarkan kinerjanya dengan
menghitung waktu eksekusi suatu algoritma. Menurut Cormen et al. 2009 waktu eksekusi algoritma dapat diklasifikasikan menjadi tiga kelompok besar, yaitu
best-case kasus terbaik, average-case kasus rata-rata dan worst-case kasus terjelek.
Pada pemrograman yang dimaksud dengan kasus terbaik, kasus terjelek dan kasus rata-rata suatu algoritma adalah besar kecilnya atau banyak sedikitnya
sumber-sumber yang digunakan oleh suatu algoritma. Makin sedikit makin baik, makin banyak makin jelek Subandijo. 2011.
2.3. Kamus