Berbicara mengenai algoritma Turbo Boyer-Moore maka tidak terlepas dari algoritma pendahulunya yaitu algoritma Boyer-Moore. Algoritma Boyer-Moore adalah algoritma pencarian string yang dipublikasikan pertama kali oleh Robert S. Boyer, dan J. Strother Moore pada tahun 1977.
Menurut Christian Thierry Charras dalam bukunya Handbook of Exact String Matching Algorithm mengatakan algoritma Boyer-Moore adalah algoritma yang paling efisien pada aplikasi umum. Algoritma Boyer-Moore bekerja dengan memulai pencocokan pattern dari kanan bukan dari kiri. Dengan memulai pencocokan karakter dari kanan, maka akan lebih banyak informasi yang didapat (Boyer, 1977).
Bila dibandingkan dengan algoritma Boyer-Moore, algoritma Turbo Boyer-Moore tidak membutuhkan pemrosesan ekstra. Algoritma ini mengingat faktor dari teks yang cocok dengan akhiran dari pattern selama attempt terakhir. Dengan demikian, teknik ini mempunyai dua keunggulan (Charras, 2001):
- Teknik ini memungkinkan untuk melompati faktor dari teks tersebut.
-
Teknik ini mengijinkan sebuah penggeseran turbo.
Algoritma Boyer-Moore menggunakan dua shift function yang dinamakan good suffix shift dan bad character shift. Untuk lebih jelasnya misalkan ada sebuah teks T[i…i+n-1] dan pattern P[i…i+m-1] dengan m < n dimana dilakukan pencocokan dan pencocokan terjadi pada T[i…i+n-1], dan ketidakcocokan pertama terjadi diantara T[i+j] dan P[j], dengan 0 < j < n. Berarti, T[i+j+1…i+n-1] = P[j+1…n-1] dan a = T[i+j] ≠ b = P[j].
Algoritma Turbo Boyer-Moore mengijinkan suatu pergeseran turbo yang dapat terjadi bila attempt yang sedang dilakukan, akhiran dari pattern yang cocok dengan teks yang lebih pendek dari bagian teks yang diingat dari attempt sebelumnya. Misalkan v1 adalah faktor dari attempt sebelumnya, maka v2 adalah bagian dari pattern yang cocok pada attempt yang sedang dilakukan pengecekan, sehingga v1zv2 adalah akhiran dari pattern. Kemudian anggap a adalah karakter di teks dan b adalah karakter dari pattern yang sedang dicocokan pada attempt tersebut. Maka av2, adalah akhiran dari pattern, dan juga akhiran dari v1 ketika |v2|<|v1|. Dua karakter a dan b muncul dengan jarak p di teks, dan kahiran dari v1=v2 dari pattern mempunyai periode p=|zv2|, karena v1 merupakan pinggiran dari v1zv2, sehingga tidak mungkin melewati dua kemunculan karakter a dan b di teks. Pergeseran terkecil yang mungkin dilakukan adalah sebesar |v1|-|v2|, yang disebut sebagai pergeseran turbo.
Berikut ini adalah pseudocode dari algoritma Turbo Boyer-Moore (Gozali, 2009) :
Procedure fillBadChar(input pattern:string)
{digunakan untuk mengisi tabel badchar}
m,n,j,shift,ts,bcs,k : integer
makeRightMostTable(pattern)
j <- u <- 0
m <- pattern.length()
shift <- m
while i <= tabel<nama_tabel>.indeks do
j <- 0
y <- tabel<nama_tabel>.atribut[i]
n <- y.length()
while (j <= n-m) do
k = m-1
while k >= 0 and x[k]=y[k+j]
-1
if u≠0 and k=m-1-shift then
k <- k-u;
end if
end while
if i<0 then
shift <- goodsuffix[0]
u <- m - shift
else
v = m – 1 – k
ts <- badchar[y[i+j]] – m + 1 + k
shift <- max(ts,bcs)
if(shift = goodsuffix[i]) then
u = min(m-shift,v)
else
if(ts < bcs) then
shift <- mac(shift,u+1)
end if
u <- o
end if
end if
end while
end while
Gambar.1 Pergeseran turbo (Tjung, 2009 : 34)
Gambar.2 Pergeseran turbo
Keterangan : Jika pergeseran harus lebih dari |v1|+1 (Tjung, 2009 : 34)
Misalkan terjadi kasus dimana |v2|>|v1|, dan panjang dari pergeseran bad-character lebih besar dari pergeseran good-suffix maupun pergeseran turbo. Seperti pada Gambar.1, dengan 2 karakter c dan d yang berbeda karena jika v1≠0 maka penggeseran sebelumnya adalah penggeseran good suffix. Sebagai akibatnya, jika penggeseran dengan panjang yang lebih besar dari penggeseran turbo namun lebih kecil dari |v1|+1 maka c dan d akan disejajarkan dengan karakter yang sama di teks. Oleh karena itu, dalam kasus ini panjang penggeseran minimal adalah |v1|+1 yang dapat dilihat pada Gambar.2.
Sekian penjabaran tentang algoritma Turbo Boyer Moore ini. Untuk implementasinya dapat teman-teman temukan pada postingan berikutnya.
Sekian.
3 Komentar
Gan bisa gak, kasi contoh gimana caranya untuk membuat tabel Bmbc dan bmGs nya,
Replyjangan dalam bahasa program, tp secara langkah-langkah gitu, :)
thanks before :)
Ane juga masih mempelajarinya gan, sampe sekarang belum paham2.. Hehe
ReplyCoba agan tanya dosen agan siapa tahu bisa bantu..
Ane juga masih cari referensi yang lebih jelas gan, maap yah gan..
Mantap gan
ReplyPost a Comment