shift ke kanan teks. Prosedur ini dilakukan secara berulang - ulang sampai window berada pada akhir teks, atau pada posisi terkanan teks.
Gambar 2.7. Ilustarsi windows sliding
Algoritma string matching mempunyai tiga komponen utama Crochemore et al, 1996, sebagai berikut :
1. Pattern, yaitu deretan karakter yang akan dicocokan dengan teks,
pattern diasumsikan dengan x = x[0...m-1], dengan m adalah panjang pattern.
2. Teks, yaitu deretan karakter yang akan dicoba kecocokannya dengan
pattern, teks diasumsikan dengan y=y[0...n-1], dengan y adalah panjang teks.
3. Alfabet, berisi semua simbol yang digunakan pada teks dan pattern,
diasumsikan dengan ∑ , dan ASIZE sebagai ukurannya.
2.5. Algoritma Boyer-Moore
Algoritma Boyer Moore termasuk salah satu algoritma yang memiliki kinerja yang lebih baik dalam melakukan pencarian string khususnya dalam jenis data ASCII, biner
dan heksadesimal Dermawan, 2001. Algoritma ini melakukan pencocokan string dari kanan ke kiri, karakter yang
berada paling kanan pada string merupakan karakter pertama yang akan dicocokan dengan teks atau pattern Boyer et al, 1977. Algoritma ini menggunakan dua fungsi
shift untuk mengambil jumlah langkah pergeseran berikutnya ketika terjadi
Teks
Window shift
Window
ketidakcocokan, dua fungsi shift tersebut adalah bad-character shift atau occurrence shift dan good-suffix shift atau heuristic shift Choudhary et al, 2012.
2.5.1. Deskripsi kerja algoritma Boyer-Moore Deskripsi kerja algoritma boyer moore dapat dijelaskan dengan membuat sebuah
contoh kasus ketidakcocokan pada saat pencocokan karakter pada teks dan pattern berlangsung. Karakter pattern x[i]=a tidak cocok dengan karakter teks y[i+j]=b saat
pencocokan pada posisi j. Maka x[i+l .. m-1]= y[i+j+1 .. j+m-1]=u dan x[i] ≠ y[i+j]
Choudhary et al, 2012. Maka dari kasus ketidakcocokan tersebut diambil langkah pergeseran selanjutnya dengan memilih jumlah pergeseran yang paling besar antara
bad-character shift dan good-suffix shift, hingga karakter pada teks y[i+j] memenuhi karakter yang ada pada pattern x[i].
2.5.2 Bad-Character Shift Bad-character adalah karakter yang ada pada teks y[i+j] yang tidak cocok dengan
karakter pada pattern x Crochemore et al, 1996. Sehingga jumlah pergeseran maksimum bad-character shift dapat diambil dari jumlah pattern x[i]. Konsep dari
fungsi bad-character shift adalah sebagai berikut : 1.
Jika bad-character y[i+j] terdapat pada pattern di posisi terkanan k yang lebih kiri dari x[i] maka pattern digeser ke kanan sejauh i-k. Seperti diberikan pada
Gambar 2.8.
y b
u
x a
u shift
x b
Contains no b Gambar 2.8. Bad-character shift, b terdapat di pattern x
2. Jika bad-character y[i+j] tidak ada pada pattern sama sekali, maka pattern
dapat digeser ke kanan sejauh jumlah i. Hal ini ditunjukan pada Gambar 2.9.
y b
u
x a
u shift
x Contains no b Gambar 2.9. Bad-character shift, b tidak ada di pattern x
3. Jika bad-character y[i+j] terdapat pada pattern di posisi terkanan k yang lebih
kanan dari x[i] maka pattern seharusnya digeser sejauh i-k yang hasilnya negatif. Maka bila kasus ini terjadi akan diabaikan, karena pergeseran
selanjutnya dari algoritma boyer-moore akan diambil jumlah pergeseran yang baling besar Cantone et al, 2010.
Pada tabel bad-character, setiap karakter pada pattern diberi nilai sesuai dengan ukuran jauhnya karakter tersebut dari karakter paling kanan dari pattern dan untuk
karakter yang tidak terdapat pada pattern akan diberi nilai sejumlah karakter pada pattern. Adapun pseudocode untuk pergeseran bad-character ini adalah sebagai
berikut :
Procedure preBmBc
input y : array[0..n-1]of char, input n : integer,
inputoutput bmBc : array of integer
Deklarasi
i:integer
Algoritma
for i=0; iASIZE; ++i bmBc[i]
← n for i=0; i n - 1; ++i
bmBc[y[i]] ← n – i – 1;
2.5.3. Good-suffix shift Good-suffix merupakan jumlah pergeseran yang dihitung berdasarkan posisi di mana
ketidakcocokan terjadi. Aturan pada good-suffix shift dijelaskan sebagai berikut : 1.
Good-suffix shift merupakan pergeseran yang dibutuhkan dari x[i]=a ke karakter lain yang letaknya lebih kiri dari x[i] dan terlektak di sebelah kiri
segmen u seperti pada Gambar 2.10.
y b
u
x a
u shift
x c
u
Gambar 2.10. Good-suffix shift, u terjadi lagi didahului karakter c berbeda dari a
2. Jika tidak ada segmen yang sama dengan u, maka cari u yang merupakan
suffiks terpanjang u. Dalam hal ini ditunjukan pada Gambar 2.11.
y b
u
x a
u shift
x v
Gambar 2.11. Good-suffix shift, hanya suffix dari u yang terjadi ladi di pattern x
Pada tabel pergeseran good-suffix, nilai pergeseran digunakan ketika ketidakcocokan ditemukan berdasarkan karakter pada posisi keberapa yang menyebabkan
ketidakcocokan. Nilai dari setiap karakter yang ada pada pattern bergantung terhadap ada atau tidaknya perulangan akhiransuffix v dari text pada pattern. Semakin banyak
perulangan, maka akan semakin kecil nilai pergeseran. Untuk menentukan nilai-nilai tersebut, lebih dahulu menghitung nilai tabel suffix yang bertujuan untuk memberi
tanda adanya perulangan akhiran. Dari tabel suffix inilah tabel good-suffix akan didapat.
Pada tabel suffix, berisi nilai dari tiap karakter yang ada pada pattern yang menunjukkan ada atau tidaknya perulangan akhiran suffix dan dimana posisi
perulangan tersebut sehingga ketika proses perhitungan tabel good-suffix dapat diketahui seberapa banyak pergeseran yang akan dilakukan untuk pencocokan
selanjutnya. Adapaun pseudocode untuk pergeseran good-suffix adalah sebagai berikut :
Procedure suffixes
input y: array[0..n-1] of char, input n: integer,
inputoutput suff: array of integer
Deklarasi
f, g, i : integer
Algoritma
suff[n-1] ← n;
g ← n-1
for i = n-2; i = 0; --i ifi g and suff[i + n – 1 - f] i-gdo
suff[i] ← suff[i + n – 1 - f];
else ifigdo
g ← i;
f = i whileg = 0 and y[g] == y[g + n – 1 - f]do
--g; suff[i]
← f-g; endif
endfor
Procedure preBmG
input y: array of char, input n:integer,
inputoutput bmGs: array of integer
Deklarasi
i, j : integer suff : array [0..YSIZE] of integer
Algoritma
suffixesy, n, suff for i=0; i n; ++ido
bmGs [i] ← n
for i= n-1; i = -1; --1 ifi == -1 or suff[i] == i+1
forj=0; j n-1-i; ++j ifbmGs[j] == n
bmGs[j] ← n-1-i
for i=0; i = n-2; ++i bmGs[n-1-suff[i]]
← n-1-i
2.5.4. Cara kerja algoritma Boyer-Moore Pada kasus ketidakcocokan terjadi, algoritma akan membandingkan nilai pergeseran
yang dimiliki oleh bad-character shift dan good-suffix shift, di mana nilai pergeseran yang memiliki nilai yang paling besar yang akan digunakan untuk melakukan
pergeseran selanjutnya. Cara kerja dari algoritma Boyer-Moore dapat dijabarkan sebagai berikut :
1. Manjalankan terlebih dahulu prosedur preBmBc dan preBmGs untuk
mendapatkan jumlah pergeseran.
a. Menjalankan prosedur preprocessing Boyer-Moore bad-character
preBmBc. Prosedur ini untuk menjalankan fungsi menentukan berapa jumlah pergeseran yang dibutuhkan untuk mencapai karakter tertentu
pada teks dari karakter pattern terakhir atau terkanan. Hasil dari prosedur preBmBc disimpan pada tebel BmBc.
b. Menjalankan prosedur suffix, prosesdur suffix dijalankan untuk
memeriksa kecocokan sejumlah karakter yang berada di posisi terakhir atau terkanan dengan sejumlah karakter yang dimulai dari setiap
karakter yang lebih kiri dari karakter yang terkanan tadi. Hasil dari prosedur disimpan dalam tabel suffix. Suffix[i] mencatat panjang dari
suffix yang cocok dengan segmen dari pattern yang diakhiri karakter ke-i.
c. Menjalankan prosedur preprocessing Boyer-Moore good-suffix
preBmGs. Prosedur ini dijalankan untuk mengetahui berapa banyak langkah pada pattern dari sebuah segmen ke segmen yang lain yang
sama yang letaknya lebih kiri dengan karakter di sebelah kiri segmen yang berbeda. Prosedur preBmGs menggunakan tabel hasil dari
prosedur suffix untuk mengetahui pasangan segmen yang sama.
2. Melakukan proses pencarian string dengan menggunakan hasil dari prosedur
BmBc dan BmGs yaitu tabel BmBc dan BmGs. Dan melakukan perbandingan untuk menentukan jumlah pergeseran selanjutnya.
2.6. Penelitian Terdahulu