Algoritma Knuth-Morris-Pratt KMP merupakan algoritma yang digunakan untuk melakukan proses pencocokan string. Algoritma ini merupakan jenis Exact
String matching Algorithm yang merupakan pencocokan string secara tepat dengan susunan karakter dalam string yang sama Contoh : kata algoritmik akan menunjukkan
kecocokan hanya dengan kata algoritmik. Pada algoritma Knuth-Morris-Pratt KMP, disimpan informasi yang digunakan untuk melakukan pergeseran lebih jauh, tidak
hanya satu karakter seperti algoritma Brute Force. Algoritma ini melakukan pencocokan dari kiri ke kanan Fadillah, 2008.
2.3.1. Fungsi Pinggiran Pada Algoritma Knuth-Morris-Pratt
Fungsi pinggiran Prefixi didefinisikan sebagai ukuran awalan terpanjang dari Pattern yang merupakan akhiran dari Pattern[1…i]. Sebagai contoh, tinjau Patterni =
ararief. Nilai untuk setiap karakter di dalam Pattern dapat dilihat pada Tabel 2.4. Wibowo, 2012.
Tabel 2.4. Fungsi Pinggiran
I 1
2 3
4 5
6 Patterni
A R
A R
I E
F Prefixi
1 2
2.3.2. Pencarian Dengan Algoritma Knuth-Morris-Pratt
Secara sistematis, langkah-langkah yang dilakukan algoritma Knuth-Morris-Pratt pada saat mencocokkan string.
1. Algoritma Knuth-Morris-Pratt mulai mencocokkan pattern pada awal teks. 2. Dari kiri ke kanan, algoritma ini akan mencocokkan karakter per karakter pattern
dengan karakter di teks yang bersesuaian, sampai salah satu kondisi berikut dipenuhi:
a. Karakter di pattern dan di teks yang dibandingkan tidak cocok missmatch. b. Semua karakter di pattern cocok. Kemudian algoritma akan memberitahukan
penemuan di posisi ini. c. Algoritma kemudian menggeser pattern berdasarkan tabel next, lalu
mengulangi langkah b sampai pattern berada di ujung teks.
Universitas Sumatera Utara
Untuk menggambarkan rincian algoritma, akan diberikan, contoh kasus, dimana kata P = “ARARIEF” dan kalimat T = “ARAREFARARIEF”. Pada waktu tertentu,
algoritma dalam keadaan yang ditentukan oleh dua variabel bilangan bulat: 1. m yang menunjukkan posisi dalam T yang merupakan awal dari perbandingan
prospektif untuk P. 2. i indeks di P yang menunjukkan karakter saat ini sedang dipertimbangkan.
Dalam setiap langkah, kita membandingkan T [m + i] dengan P [i] dan jika mereka sama. Hal ini digambarkan, pada awal menjalankan, seperti Gambar 2.1.
m 1
2 3
4 5
6 7
8 9 10 11 12
T A
R A
R E
F A
R A
R I
E F
P A
R A
R I
E F
i 1
2 3
4 5
6
Gambar 2.1. Iterasi metode Knuth-Morris-Pratt Pertama
Kita lanjutkan dengan membandingkan karakter berturut-turut P untuk karakter dari T, bergerak dari satu ke yang berikutnya apakah mereka cocok. Namun, pada
langkah kelima, kita mendapatkan T[4] adalah ‘E’ dan P[4] = ‘I’, tidak cocok. Karena itu kita beralih ke karakter berikutnya, menetapkan jumlah pergeseran dari nilai fungsi
pinggiran, dapat dilihat dari gambar 1 bahwa karakter terakhir yang cocok adalah P[4] = ‘R’ yang memiliki nilai fungsi pinggiran = 2 sebagaimana dilihat pada Gambar 2.2.
m 1
2 3
4 5
6 7
8 9 10 11 12
T A
R A
R E
F A
R A
R I
E F
P A
R A
R I
E F
I 1
2 3
4 5
6
Gambar 2.2 Iterasi metode Knuth-Morris-Pratt Kedua
Sistem kembali memiliki ketidaksesuaian pada P[2] T[4]. Daripada mulai mencari lagi di T[3], sistem mencatat bahwa tidak ada ‘A’ terjadi antara posisi 2 dan 4 di T
kecuali pada 2; oleh karena itu, setelah memeriksa karakter yang sebelumnya, kita tahu tidak ada peluang untuk menemukan awal yang cocok jika kita memeriksa
mereka lagi. Oleh karena itu kita beralih ke karakter berikutnya, menetapkan m = 5 dan i = 0 sebagaimana dilihat pada Gambar 2.3.
Universitas Sumatera Utara
m 1
2 3
4 5
6 7
8 9 10 11 12
T A
R A
R E
F A
R A
R I
E F
P A
R A
R I
E F
i 1
2 3
4 5
6
Gambar 2.3 Iterasi metode Knuth-Morris-Pratt Ketiga
Pencarian ini masi gagal karena terjadi ketidak sesuaian di P[1] T[5]. Sehingga kita kembali ke awal P dan mulai mencari di karakter berikutnya T: m = 6, reset i = 0.
Langkah selanjutnya dapat dilihat dari Gambar 2.4.
M 1
2 3
4 5
6 7
8 9 10 11 12
T A
R A
R E
F A
R A
R I
E F
P A
R A
R I
E F
I 1
2 3
4 5
6
Gambar 2.4 Iterasi metode Knuth-Morris-Pratt Keempat
Kali ini kita dapat menyelesaikan seluruh pencocokan, yang karakter pertama adalah T[6] Mulyana, 2014.
Berikut adalah pseudocode algoritma KMP pada fase pra-pencarian:
procedure preKMP input p : array[0..n-1] of char,
input n : integer, input output kmpNext : array[0..n] of integer
Deklarasi: i,j: integer
Algoritma: i := 0;
j := kmpNext[0] := -1; while i n {
while j -1 and not P[i] = P[j] j := kmpNext[j];
i := i+1; j := j+1;
if P[i] = P[j] kmpNext[i] := kmpNext[j];
else kmpNext[i] := j;
endif endwhile
}
Dan berikut adalah pseudocode algoritma KMP pada fase pencarian:
procedure KMPSearch input m, n : integer,
input P : array[0..n-1] of char, input T : array[0..m-1] of char,
output ketemu : array[0..m-1] of boolean
Universitas Sumatera Utara
Deklarasi: i, j, next : integer
kmpNext : array[0..n] of integer
Algoritma: preKMPn, P, kmpNext
i:=0 while i= m-n do
j:=0 while jn and T[i+j] = P[j] do
j:= j+1 endwhile
ifj = n then ketemu[i]:= true;
endif next := j - kmpNext[j]
i:= i+next endwhile
2.3.3. Kompleksitas Waktu Algoritma Knuth-Morris-Pratt