Perbandingan Algoritma Galil-Seiferas dan Algoritma Not So Naϊve Dalam Aplikasi Kamus Hukum

BAB 2
LANDASAN TEORI

2.1.

Algoritma

Istilah algoritma (algorithm) berasal dari kata “algoris” dan “ritmis”, yang pertama
kali diungkapkan oleh Abu Ja‟far Mohammed Ibn Musa al Khowarizmi (825 M)
dalam buku Al-Jabr Wa-al Muqabla. Dalam bidang pemrograman algoritma
didefenisikan sebagai suatu metode khusus yang tepat dan terdiri dari serangkaian
langkah yang terstruktur dan dituliskan secara matematis yang akan dikerjakan untuk
menyelesaikan suatu masalah dengan bantuan komputer. (Jogiyanto, 2005).
Istilah algoritma digunakan dalam ilmu komputer untuk menggambarkan
metode pemecahan masalah yang terbatas, deterministik, dan efektif yang cocok untuk
implementasi sebagai program komputer. (Sedgewick. 2011).
Terdapat beberapa defenisi yang diberikan untuk kata algoritma antara lain
(Priyatna. 2015) :
a. Algoritma adalah sekelompok aturan untuk menyelesaikan perhitungan yang
dilakukan oleh tangan atau mesin.
b. Algoritma adalah langkah demi langkah sebuah prosedur berhinggga yang

dibutuhkan untuk menghasilkan sebuah penyelesaian.
c. Algoritma adalah urutan langkah-langkah perhitungan yang mentrasformasikan
dari nilai masukan menjadi keluaran.
d. Algoritma adalah urutan operasi yang dilakukan terhadap data yang terorganisasi
dalam struktur data.
e. Algoritma adalah sebuah program abstrak yang dapat dieksekusi secara fisik oleh
mesin.
f. Algoritma adalah sebuah model perhitungan yang akan dilakukan oleh komputer.

Universitas Sumatera Utara

2.2.

Algoritma Pencocokan String

Algoritma pencocokan string (string matching) merupakan komponen dasar dalam
pengimplementasian berbagai perangkat lunak praktis yang sudah ada. String
matching digunakan untuk menemukan satu atau lebih string yang disebut dengan
pattern (string yang akan dicocokkan ke dalam text) dalam string yang disebut dengan
text (string yang di-input). (Charras. 1997).

Algoritma yang dianggap memiliki hasil yang paling baik dalam praktiknya
merupakan algoritma yang bergerak mencocokan string dari arah kanan ke kiri. Untuk
mengetahui manakah algoritma yang mampu mencari string paling cepat, maka
muncullah ide untuk meneliti kemampuan dari algoritma-algoritma ini. (Sagita. 2013).
String adalah rangkaian karakter selama Σ alphabet yang terbatas. Misalnya,
ATCTAGAGA adalah string lebih

. Masalah pencocokan string adalah

untuk menemukan semua kejadian dari string P yang disebut pola, di string T pada
alphabet yang sama yang disebut teks. Mengingat string x, y, dan z kita mengatakan
bahwa x adalah awalan dari xy, akhiran dari yx, dan faktor yxz. (Navarro. 2002).
Exact string matching, yaitu pencocokan sebuah string secara sangat tepat
dengan susunan karakter dalam string yang dicocokkan baik dalam jumlah maupun
urutan karakter dalam stringnya. Pada proses pencocokan string, digunakan sebuah
window yang akan bergeser di text. Window itu memiliki panjang yang sama dengan
panjang pattern. Pada awal proses pencocokan string, window diletakkan pada ujung
kiri text, lalu karakter-karakter pada window dibandingkan dengan karakter-karakter
pada pattern, kemudian window akan digeser ke kanan di text dengan jarak tertentu,
dan pergeseran tersebut baru akan berhenti bila window tersebut sampai pada ujung

kanan text atau sampai pattern ditemukan cocok. (Charras. 1997).
Contoh sliding windows yang sedang menggeser pattern di teks dapat dilihat
di Gambar 2.1.

Universitas Sumatera Utara

Gambar 2.1 Mekanisme Sliding Windows

Algoritma pencocokan string dapat diklasifikasikan menjadi tiga bagian menurut
pencariannya, (Charras. 1997) :
a. Kategori pertama, arah yang paling alami dalam pencocokan string yaitu dari kiri
ke kanan. Algoritma kategori ini melakukan pencocokan string dimulai dari
karakter paling kiri pattern seperti yang ditunjukkan pada Gambar 2.2. Beberapa
algoritma yang termasuk dalam kategori ini adalah algoritma brute force,
algoritma Karb-Rabin, dan algoritma Knuth-Morris-Pratt.

Gambar 2.2 Pencocokan dari Karakter Paling kiri ke Paling Kanan Pattern

b. Kategori kedua, algoritma yang melakukan pencocokan dari kanan ke kiri
karakter pada pattern seperti yang dapat dilihat pada Gambar 2.3. Algoritma yang

termasuk dalam kategori ini umumnya dikatakan sebagai algoritma yang
menghasilkan hasil terbaik pada praktekmya, yaitu algoritma Boyer-Moore.

Gambar 2.3 Pencocokan dari Karakter Paling Kanan ke Paling Kiri Pattern

Universitas Sumatera Utara

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 = y1y2. Seperti yang dapat kita lihat pada Gambar 2.4, pertama kali,
pencarian terjadi pada y2 yang dilakukan dari karakter paling kiri ke kanan, apabila
selama pencarian pertama tidak terjadi ketidakcocokan atau pattern y2 cocok dengan
text selanjutnya pada pencarian kedua algoritma akan memeriksa pada y1 yang

dilakukan dari kanan ke kiri seperti yang ditunjukkan pada Gambar 2.5.

Gambar 2.4 Pencocokan Pattern y2 Dimulai dari Karakter Paling Kiri

Gambar 2.5 Pencocokan Pattern y1 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
= p2)
break;
}
newP1();
}
void newP2() {
while (x[s + q2] == x[s + p2 + q2] && p2 + q2 < k*p2)
++q2;
if (p2 + q2 == k*p2)
parse();
else
if (s + p2 + q2 == m)
search();

else {
if (q2 == p1 + q1) {
p2 += p1;
q2 -= p1;
}
else {
p2 += (q2/k + 1);
q2 = 0;
}
newP2();
}
}

Universitas Sumatera Utara

void newP1() {
while (x[s + q1] == x[s + p1 + q1])
++q1;
if (p1 + q1 >= k*p1) {
p2 = q1;

q2 = 0;
newP2();
}
else {
if (s + p1 + q1 == m)
search();
else {
p1 += (q1/k + 1);
q1 = 0;
newP1();
}
}
}
void GS(char *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


Algoritma Not So Naϊve bekerja dimana selama fase pencarian dalam perbandingan
karakter yang dibuat diatur dalam susunan sebagai berikut: 1, 2,...., m-2, m-1, 0.
Untuk setiap upaya dimana jendela diposisikan pada faktor teks:
y [j .. j + m -1]: jika x [0] = x [1] dan x [1]
dari jika x [0]

y [j+1]

x [1] dan x [1] = y [j+1]

pola digeser oleh 2 posisi pada akhir upaya dan dengan 1 sebaliknya. Dengan
demikian tahap preprocessing dapat dilakukan dalam ruang dan waktu yang konstan.
Tahap pencarian algoritma Not So Naïve memiliki kasus kuadrat terburuk tapi itu
sedikit (dengan koefisien) sub-linear dalam kasus rata-rata. (Charras. 1997).

Program Bahasa C

void NSN(char *x, int m, char *y, int n) {
int j, k, ell;
/* Preprocessing */

if (x[0] == x[1]) {
k = 2;
ell = 1;
}
else {
k = 1; ell = 2;
}
/* Searching */
j = 0;
while (j