• Tidak ada hasil yang ditemukan

LANDASAN TEOR

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

25

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

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,

input/output bmBc : array of integer )

Deklarasi

i:integer

Algoritma

for (i=0; i<ASIZE; ++i) bmBc[i] ← n

for (i=0; i< n - 1; ++i) bmBc[y[i]] ← n – i – 1;

27

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 akhiran(suffix) 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,

input/output suff: array of integer ) Deklarasi f, g, i : integer Algoritma suff[n-1] ← n; g ← n-1 for (i = n-2; i >= 0; --i)

if(i > g and suff[i + n – 1 - f] < i-g)do suff[i] ← suff[i + n – 1 - f]; else

if(i<g)do g ← i; f = i

while(g >= 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,

input/output bmGs: array of integer )

Deklarasi

i, j : integer

suff : array [0..YSIZE] of integer

Algoritma

suffixes(y, n, suff) for (i=0; i < n; ++i)do

29

bmGs [i] ← n

for (i= n-1; i >= -1; --1)

if(i == -1 or suff[i] == i+1) for(j=0; j < n-1-i; ++j)

if(bmGs[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.

Dokumen terkait