Algoritma Galil-Seiferas LANDASAN TEORI

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