Algoritma Pencocokan / Pencarian String dengan
Knuth-Morris-Pratt Menggunakan PHP
Pre Note:
Kadang Algoritma Knuth-Morris-Pratt ini dijadikan tugas akhir untuk
pencarian kata dalam teks / artikel, list kata biasanya ada dalam database atau
berdasarkan pencarian, atau ada ide lain? hehe. :)
Algoritma Knuth-Morris-Pratt merupakan salah satu algoritma pencarian string (string matcing) yang 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 (Wikipedia : Knuth-Morris-Pratt). Langkah-langkah yang dilakukan algoritma Knuth-Morris-Pratt pada saat mencocokkan string yaitu (modifikasi):
Algoritma Knuth-Morris-Pratt merupakan salah satu algoritma pencarian string (string matcing) yang 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 (Wikipedia : Knuth-Morris-Pratt). Langkah-langkah yang dilakukan algoritma Knuth-Morris-Pratt pada saat mencocokkan string yaitu (modifikasi):
- String pattern (kata yang
dicari) akan dipecah menjadi array karakter
- String text (teks, artikel,
dsb) akan dipecah menjadi array karakter
- Menentukan lompatan yang akan
dilakukan ketika pencarian (funsi preKMP())
- Algoritma Knuth-Morris-Pratt
mulai mencocokkan pattern pada awal teks. ()
- Dari kiri ke kanan, algoritma
ini akan mencocokkan karakter per karakter pattern dengan karakter di teks
yang bersesuaian, sampai salah satu kondisi berikut dipenuhi:
- Karakter di pattern dan di teks
yang dibandingkan tidak cocok (mismatch).
- Semua karakter di pattern
cocok. Kemudian algoritma akan memberitahukan penemuan di posisi ini.
- Algoritma kemudian menggeser
pattern berdasarkan tabel next (lompat), lalu mengulangi langkah 2 sampai
pattern berada di ujung teks.
1. <?php
2. // Knuth-Morris-Pratt Algorithm
3. // Created March 31, 2010 - 07:10:33 WIB
4. // Modified March 13, 2013 - 09:39:31 WIB
5. // x90
6. class KMP{
7. function
KMPSearch($p,$t){
8. $hasil = array();
9. // pattern dan text
dijadikan array
10. $pattern =
str_split($p);
11. $text = str_split($t);
12.
13. // hitung tabel lompatan dengan preKMP()
14. $lompat =
$this->preKMP($pattern);
15. print_r($lompat);
16.
17. // perhitungan KMP
18. $i = $j = 0;
19. $num=0;
20.
while($j<count($text)){
21. while($i>-1
&& $pattern[$i]!=$text[$j]){
22. // jika tidak
cocok, maka lompat sesuai tabel lompatan
23. $i =
$lompat[$i];
24. }
25. $i++;
26. $j++;
27.
if($i>=count($pattern)){
28. // jika cocok,
tentukan posisi string yang cocok
29. // kemudian lompat ke
string berikutnya
30.
$hasil[$num++]=$j-count($pattern);
31. $i =
$lompat[$i];
32. }
33. }
34. return $hasil;
35. }
36.
37. // menetukan tabel
lompatan dengan preKMP
38. function
preKMP($pattern){
39. $i = 0;
40. $j = $lompat[0] =
-1;
41. while($i<count($pattern)){
42. while($j>-1
&& $pattern[$i]!=$pattern[$j]){
43. $j =
$lompat[$j];
44. }
45. $i++;
46. $j++;
47.
if($pattern[$i]==$pattern[$j]){
48.
$lompat[$i]=$lompat[$j];
49. }else{
50. $lompat[$i]=$j;
51. }
52. }
53. return $lompat;
54. }
55.}
56.?>
1 comment:
mas apakah punya source code atau implementasinya dalam program.. untuk belajar soalnya saya juga sedang mempelajari algoritma ini :D thanks before
Post a Comment