c.
Kategori ketiga yaitu pencocokan dari dua arah yang telah ditentukan oleh tiap algoritma tertentu. Salah satunya seperti yang diterapkan oleh Galil-Seiferas dan
Crochemore-Perrin dalam algoritma Two Way, mereka membagi pattern y menjadi dua bagian yaitu
y = y
1
y
2
. Seperti yang dapat kita lihat pada Gambar 2.4, pertama kali, pencarian terjadi pada y
2
yang dilakukan dari karakter paling kiri ke kanan, apabila selama pencarian pertama tidak terjadi
ketidakcocokan atau pattern y
2
cocok dengan
text selanjutnya pada pencarian kedua algoritma
akan memeriksa pada y
1
yang dilakukan dari kanan ke kiri seperti yang ditunjukkan pada Gambar 2.5.
Gambar 2.4 Pencocokan Pattern y
2
Dimulai dari Karakter Paling Kiri
Gambar 2.5 Pencocokan Pattern y
1
Dimulai dari Karakter Paling Kanan
2.3. Algoritma Galil-Seiferas
Algoritma Galil-Seiferas merupakan algoritma yang menggunakan konstanta k oleh Galil dan Seiferas dinyatakan bernilai 4. Fungsi reach jangkauan untuk 0
≤ i m sebagai berikut:
i = i + max {i ≤ m - i: x [0 .. i ] = x [i +1 .. i + i +1]}.
Sebuah awalan x [0 .. p] dengan x adalah periode awalan jika dasar dan mencapai p
≥ kp. Tahap preprocessing pada algoritma ini berguna untuk mendapatkan dekomposisi uv dari P yang mana v memiliki paling banyak satu periode awalan dan
| u | = Ο per v, proses dekomposisi dinamakan perfect factorization. Pada tahap
Universitas Sumatera Utara
searching dilakukan pencarian pada teks T untuk menemukan setiap v dan ketika ditemukan akan dilanjutkan dengan pencarian terhadap u tepat disebelahnya pada
T. Charras. 1997. Implementasi
dalam fase
preprocessing fungsi newP1, newP2 dan mengurai adalah
untuk menemukan
uv faktorisasi sempurna x dimana u = x[0....s-1] dan v = x[s....m-1]. Fungsi newP1 menemukan
periode awalan terpendek x[s...m-1]. Fungsi newP2 menemukan periode awalan terpendek kedua dari x[s...m-1] dan fungsi parse terhadap s. Sebelum memanggil
fungsi pencarian kita memiliki: a.
x[s...m-1] memiliki paling banyak satu periode awalan; b.
Jika x[s...m-1] tidak memiliki masa awalan, maka panjangnya adalah p
1
; c.
x[s...s+p
1
+q
1
-1] memiliki periode terpendek panjang p
1
; d.
x[s...s+p
1
+q
1
] tidak memiliki periode panjang p
1
;
Gambar 2.6 Faktorisasi Sempurna x
Pola x adalah dari bentuk x[0...s-1] x[s...m-1] dimana x[s...m-1] adalah dari bentuk z
z’ z” dengan z dasar, |z|=p
1
.z’ awalan z, z’ tidak awalan z dan | z z | = p
1
+q
1
. Pada Gambar 2.4 terlihat bahwa ketika mencari x[s...m-1] di y, jika
x[s...s+p
1
+q
1
-1] telah dicocokkan pergeseran panjang p
1
dapat dilakukan dan perbandingan yang dilanjutkan dengan x[s+q
1
]. Sebaliknya jika terjadi ketidakcocokan dengan x[s+q] dengan q
≠ p
1
+ q
1
maka pergeseran panjang qk
1
dapat dilakukan dan perbandingan yang dilanjutkan dengan x[0]. Hal ini memberikan jumlah linier keseluruhan perbandingan karakter teks.
Tahap preprocessing dari algoritma Galil-Seiferas di Οm waktu dan
kompleksitas ruang konstan. Fase pencarian di Οn kompleksitas waktu. Paling
banyak 5n perbandingan karakter teks dapat dilakukan selama fase ini. Charras. 1997.
Universitas Sumatera Utara
Program dalam Bahasa C
char x, y; int k, m, n, p, p1, p2, q, q1, q2, s;
void search {
while p = n - m { while p + s + q n x[s + q] == y[p + s + q]
++q; if q == m - s memcmpx, y + p, s + 1 == 0
OUTPUTp; if q == p1 + q1 {
p += p1; q -= p1;
} else {
p += qk + 1; q = 0;
} }
} void parse {
while 1 { while x[s + q1] == x[s + p1 + q1]
++q1; while p1 + q1 = kp1 {
s += p1; q1 -= p1;
} p1 += q1k + 1;
q1 = 0; if p1 = p2
break; }
newP1; }
void newP2 { while x[s + q2] == x[s + p2 + q2] p2 + q2 kp2
++q2; if p2 + q2 == kp2
parse; else
if s + p2 + q2 == m search;
else { if q2 == p1 + q1 {
p2 += p1; q2 -= p1;
} else {
p2 += q2k + 1; q2 = 0;
} newP2;
} }
Universitas Sumatera Utara
void newP1 { while x[s + q1] == x[s + p1 + q1]
++q1; if p1 + q1 = kp1 {
p2 = q1; q2 = 0;
newP2; }
else { if s + p1 + q1 == m
search; else {
p1 += q1k + 1; q1 = 0;
newP1; }
} }
void GSchar argX, int argM, char argY, int argN { x = argX;
m = argM; y = argY;
n = argN; k = 4;
p = q = s = q1 = p2 = q2 = 0; p1 = 1;
newP1;
}
Contoh :
Fase Pre-Processing P= 0, q = 0, s = 0, p 1 = 7, q 1 = 1
Fase Searching Algoritma Galil - Seiferas melakukan 24 perbandingan karakter
Universitas Sumatera Utara
Universitas Sumatera Utara
Gambar 2.7 Fase Pencarian dengan Algoritma Galil-Seiferas.
2.4. Algoritma Not So Naϊve