8
2. Approximate string matching atau Fuzzy string matching.
Fuzzy string matching merupakan pencocokan string secara samar, maksudnya pencocokan string dimana string yang dicocokkan memiliki kemiripan memiliki
susunan karakter yang berbeda mungkin jumlah atau urutannya, tetapi string tersebut memiliki kemiripan baik kemiripan tekstualpenulisan approximate string
matching atau kemiripan ucapan phonetic string matching.
2.2 Algoritma Horspool
Algoritma Horspool adalah penyederhanaan dari algoritma Boyer-Moore yang dibuat oleh R. Nigel Horspool. Menurut Horspool, R.N. 1980, masalah dalam pencarian
teks ini adalah mencari dalam teks yang besar untuk menemukan pattern pertama. Karena teks yang dicari bisa sangat besar memungkinkan ratusan ribu karakter maka
penting untuk menggunakan teknik yang lebih efisien. Algoritma Horspool bekerja dengan metode yang hampir sama dengan algoritma Boyer-Moore namun tidak
melakukan lompatan berdasarkan karakter pada pattern yang ditemukan tidak cocok pada teks.
Algoritma Horspool mempunyai nilai pergeseran karakter yang paling kanan dari window. Pada tahap observasi awal preprocessing, nilai shift akan dihitung
untuk semua karakter. Pada tahap ini, dibandingkan pattern dari kanan ke kiri hingga kecocokan atau ketidakcocokan pattern terjadi. Karakter yang paling kanan pada
window digunakan sebagai indeks dalam melakukan nilai shift. Dalam kasus
ketidakcocokan karakter tidak terdapat pada pattern terjadi, window digeser oleh panjang dari sebuah pattern. Jika tidak, window digeser menurut karakter yang paling
kanan pada pattern Baeza-Yates, R.A. Regnier, M. 1992.
2.2.1 Pencarian Dengan Algoritma Horspool
Terdapat dua tahap pada pencocokan string menggunakan algoritma Horspool Singh, R. Verma, H.N. 2011, yaitu:
1. Tahap praproses
Pada tahap ini, dilakukan observasi pattern terhadap teks untuk membangun sebuah tabel bad-match yang berisi nilai shift ketika ketidakcocokan antara pattern
Universitas Sumatera Utara
9
dan teks terjadi. Secara sistematis, langkah-langkah yang dilakukan algoritma Horspool pada tahap praproses adalah:
a. Algortima Horspool melakukan pencocokan karakter ter-kanan pada pattern.
b. Setiap karakter pada pattern ditambah ke dalam tabel bad-match dan dihitung
nilai shift-nya. c.
Karakter yang berada pada ujung pattern tidak dihitung dan tidak dijadikan karakter ter-kanan dari karakter yang sama dengannya.
d. Apabila terdapat dua karakter yang sama dan salah satunya bukan karakter ter-
kanan, maka karakter dengan indeks terbesar yang dihitung nilai shift-nya. e.
Algoritma Horspool menyimpan panjang dari pattern sebagai panjang nilai shift secara default apabila karakter pada teks tidak ditemukan dalam pattern.
f. Nilai value shift yang akan digunakan dapat dicari dengan perhitungan panjang
dari pattern dikurang indeks terakhir karakter dikurang 1, untuk masing-masing karakter,
� � = − � − .
Sebagai contoh, dapat dilihat pada Tabel 2.1 berikut. Pattern: KARTIKA
�⏟ �⏟ �⏟ �⏟ �⏟ �⏟ �⏟
Tabel 2.1 Bad-match pada praproses
value = 7 – 5 – 1 = 1
value = 7 – 1 – 1 = 5
value = 7 – 2 – 1 = 4
value = 7 – 3 – 1 = 3
value = 7 – 4 – 1 = 2
: karakter yang tidak dikenali Karakter Index Value
K 5
1 A
1 5
R 2
4 T
3 3
I 4
2 -
7
Universitas Sumatera Utara
10
2. Tahap pencarian
Secara sistematis, langkah-langkah yang dilakukan algoritma Horspool pada tahap praproses adalah:
a. Dilakukan perbandingan karakter paling kanan pattern terhadap window.
b. Tabel bad-match digunakan untuk melewati karakter ketika ketidakcocokan
terjadi. c.
Ketika ada ketidakcocokan, maka karakter paling kanan pada window berfungsi sebagai landasan untuk menentukan jarak shift yang akan dilakukan.
d. Setelah melakukan pencocokan baik hasilnya cocok atau tidak cocok
dilakukan pergeseran ke kanan pada window. e.
Prosedur ini dilakukan berulang-ulang sampai window berada pada akhir teks atau ketika pattern cocok dengan teks.
Untuk menggambarkan rincian algoritma, akan diberikan contoh kasus dimana pattern P = “KARTIKA” dan teks T = “ADEMUTIARA KARTIKA”. Inisialisasi awal dan
pembuatan bad-match terlihat pada Tabel 2.2 dan Tabel 2.3 berikut.
Tabel 2.2 Inisialisasi awal bad-match
m 1 2
3 5
6 7
8 9 10 11 12 13 14 15 16 15 16 17
T A D E M U T I A R
A K
A R
T I
K A
P K A R T I K A
i 1
2 3
4 5
6
Tabel 2.3 Pembuatan bad-match
P A R T
I K i
1 2
3 4
5 -
v 5
4 3
2 1
7 Seperti yang terlihat pada Tabel 2.2 di atas, inisialisasi awal bad-match
dilakukan. Setiap teks dan pattern masing-masing diberi nilai m dan i, dimana m sebagai panjang pattern dan i sebagai indeks. Tabel 2.3 menunjukkan nilai pergeseran
bad-match dengan menghitung nilai v seperti yang telah dilakukan pada Tabel 2.1. Pada tahap awal pencarian, dilakukan perbandingan karakter paling kanan pattern
terhadap window. Apabila terjadi ketidakcocokan, akan dilakukan pergeseran ke kanan untuk melewati karakter yang tidak cocok dimana nilai pergeserannya terdapat
Universitas Sumatera Utara
11
pada tabel bad-match. Karakter paling kanan teks pada window berfungsi sebagai landasan untuk menentukan jarak geser yang akan dilakukan. Hal ini terlihat pada
Tabel 2.4 berikut.
Tabel 2.4 Iterasi algoritma Horspool pertama
m 1 2
3 5
6 7
8 9 10 11 12 13 14 15 16 15 16 17
T A D E M U T I
A R A
K A
R T
I K
A P K A R T
I K A
i 1
2 3
4 5
6 Terdapat ketidakcocokan seperti yang terlihat pada Tabel 2.4. Karakter “I”
adalah karakter paling kanan teks pada window. Pada tabel bad-match, nilai geser karakter “I” adalah 2. Maka, dilakukan pergeseran ke kanan pada window sebanyak 2
kali. Hal ini terlihat pada Tabel 2.5.
Tabel 2.5 Iterasi algoritma Horspool kedua
m 1 2
3 5
6 7
8 9 10 11 12 13 14 15 16 15 16 17
T A D E M U T I A
R A
K A
R T
I K
A P
K A R T I K
A i
1 2
3 4
5 6
Pada Tabel 2.5, terdapat ketidakcocokan kembali antara karakter “R” dan “A”. Pada tabel bad-match
, nilai geser karakter “R” adalah 4. Maka, dilakukan pergeseran ke kanan pada window sebanyak 4 kali. Hal ini terlihat pada Tabel 2.6.
Tabel 2.6 Iterasi algoritma Horspool ketiga
m 1 2 3
5 6
7 8
9 10 11 12 13 14 15 16 15 16 17 T A D E M U T
I A R A
K A
R T
I K
A P
K A R T
I K
A i
1 2
3 4
5 6
Pada iterasi ketiga yang terlihat pada Tabel 2.6, kecocokan pattern dan teks terjadi pada karakter “A” dan karakter “K”. Namun, kembali terjadi ketidakcocokan
antara karakter “I” dan “spasi“. Maka, karakter paling kanan teks pada window
menentukan jarak geser yang akan dilakukan. Sebagaimana yang terlihat pada Tabel 2.6,
karakter “A” berfungsi sebagai landasan nilai geser. Nilai geser karakter “A”
Universitas Sumatera Utara
12
yang terdapat pada tabel bad-match adalah 5. Maka dilakukan pergeseran ke kanan pada window sebanyak 5 kali dan dilanjutkan dengan iterasi keempat seperti yang
terlihat pada Tabel 2.7.
Tabel 2.7 Iterasi algoritma Horspool keempat
m 1 2
3 5
6 7
8 9 10 11 12 13 14 15 16 15 16 17
T A D E M U T I A R
A K
A R
T I
K A
P K
A R
T I
K A
i 1
2 3
4 5
6 Pada Tabel 2.7, window telah berada pada akhir teks dan semua pattern cocok
dengan teks. Seluruh pencocokan karakter menggunakan algoritma Horspool telah selesai dan berhenti pada iterasi keempat.
Berikut adalah pseudocode algoritma Horspool pada tahap praproses:
Procedure preBmBc input P : array[0. . m-1] of char,
input m : integer, inputoutput BmBc : array [0 . . n-1] of integer
Deklarasi: i : integer
Algoritma: for i := 0 to ASIZE
– 1 BmBc[i] := m;
endfor for i := 0 to m-2
BmBc[P[i]] := m – i – 1;
endfor
Dan berikut adalah pseudocode algoritma Horspool pada tahap pencarian:
Procedure HorspoolSearch input m, n : integer,
input P : array[0 . . m-1] of char, input T : array[0 . . n-1] of char,
output find : array[0 . . m-1] of boolean Deklarasi:
j : integer BmBc : array[0 . . n] of integer
c : char Algoritma:
preBmBcP, m, BmBc j := 0
Universitas Sumatera Utara
13
while j = n – m do
c = T[j + m – 1];
if P[m – 1] == c memcmpP, T + j, m-1 == 0 then
find[j] := true; endif
j := j + BmBc[c]; endwhile
2.2.2 Kelebihan Algoritma Horspool