7
Hak Cipta © 2007 UPN Veteran Jatim Dilarang mengutip sebagian atau seluruh karya tulis ini tanpa mencantumkan dan menyebutkan sumber.
BAB II TINJAUAN PUSTAKA
2.1. Algorithma dan Pemrograman
Dalam matematika dan komputasi, algoritma atau algoritme merupakan kumpulan perintah untuk menyelesaikan suatu masalah.
Perintah-perintah ini dapat diterjemahkan secara bertahap dari awal hingga akhir. Masalah tersebut dapat berupa apa saja, dengan catatan untuk setiap
masalah, ada kriteria kondisi awal yang harus dipenuhi sebelum menjalankan algoritma. Algoritma akan dapat selalu berakhir untuk semua
kondisi awal yang memenuhi kriteria, dalam hal ini berbeda dengan heuristik. Algoritma sering mempunyai langkah pengulangan
iterasi atau memerlukan keputusan logika Boolean dan perbandingan sampai tugasnya selesai. Sedangkan pemrograman itu sendiri adalah proses
menulis, menguji dan memperbaiki debug, dan memelihara kode yang membangun
sebuah program komputer.
Kode ini
ditulis dalam
berbagai bahasa pemrograman. Tujuan dari pemrograman adalah untuk memuat suatu program yang dapat melakukan suatu perhitungan atau
“pekerjaan” sesuai dengan keinginan si pemrogram. Untuk dapat melakukan pemrograman, diperlukan keterampilan dalam algoritma, logika, bahasa
pemrograman, dan di banyak kasus, pengetahuan-pengetahuan lain seperti matematika. [7].
Hak Cipta © 2007 UPN Veteran Jatim Dilarang mengutip sebagian atau seluruh karya tulis ini tanpa mencantumkan dan menyebutkan sumber.
2.2. Algorithma Knuth Morris Pratt
Algoritma Knuth – Morris - Pratt adalah salah satu algoritma pencarian string, dikembangkan secara terpisah oleh Donald E. Knuth pada
tahun 1967 dan James H. Morris bersama Vaughan R. Pratt pada tahun 1966, namun keduanya mempublikasikannya secara bersamaan pada tahun
1977. Jika kita melihat algoritma brute force lebih mendalam, kita
mengetahui bahwa dengan mengingat beberapa perbandingan yang dilakukan sebelumnya kita dapat meningkatkan besar pergeseran yang
dilakukan. Hal ini akan menghemat perbandingan, yang selanjutnya akan meningkatkan kecepatan pencarian.
Perhitungan penggeseran pada algoritma ini adalah sebagai berikut, bila terjadi ketidakcocokkan pada saat pattern sejajar dengan teks[i..i + n − 1],
kita bisa
menganggap ketidakcocokan
pertama terjadi
di antara teks[i + j] dan pattern[j], dengan 0 j n. Berarti, teks[i..i + j − 1]
= pattern[0..j − 1] dan a = teks[i + j] tidak sama dengan b = pattern[j]. Ketika kita menggeser, sangat beralasan bila ada sebuah awalan v dari
pattern akan sama dengan sebagian akhiran u dari sebagian teks. Sehingga kita bisa menggeser pattern agar awalan v tersebut sejajar dengan akhiran
dari u. Dengan kata lain, pencocokkan string akan berjalan secara efisien bila
kita mempunyai tabel yang menentukan berapa panjang kita seharusnya menggeser seandainya terdeteksi ketidakcocokkan di karakter ke-j dari
Hak Cipta © 2007 UPN Veteran Jatim Dilarang mengutip sebagian atau seluruh karya tulis ini tanpa mencantumkan dan menyebutkan sumber.
pattern. Tabel
1` harus
memuat next[j] yang merupakan
posisi karakter pattern[j] setelah digeser, sehingga kita bisa menggeser pattern
sebesar j − next[j] relatif terhadap teks. [5]. 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
mismatch. b.
Semua karakter di pattern cocok. Kemudian algoritma akan memberitahukan penemuan di posisi ini.
3. Algoritma kemudian menggeser pattern berdasarkan tabel next, lalu
mengulangi langkah no. 2 sampai pattern berada di ujung teks. [5].
Pseudocode
Berikut adalah pseudocode algoritma Knuth-Morris-Pratt pada fase pra- pencarian :
procedure preKMP input P : array[0..n-1] of char,
input n : integer, inputoutput kmpNext : array[0..n] of integer
Hak Cipta © 2007 UPN Veteran Jatim Dilarang mengutip sebagian atau seluruh karya tulis ini tanpa mencantumkan dan menyebutkan sumber.
Deklarasi: i,j: integer
Algoritma i := 0;
j := kmpNext[0] := -1; while i n {
while j -1 and notP[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 Knuth-Morris-Pratt 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 Deklarasi:
i, j,next: integer kmpNext : array[0..n] of interger
Algoritma: preKMPn, P, kmpNext
i:=0 while i= m-n do
Hak Cipta © 2007 UPN Veteran Jatim Dilarang mengutip sebagian atau seluruh karya tulis ini tanpa mencantumkan dan menyebutkan sumber.
j:=0 while j n 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. Algorithma Booyer - Moore