Fungsi Pinggiran Pada Algoritma Knuth-Morris-Pratt Pencarian Dengan Algoritma Knuth-Morris-Pratt

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