Algoritma Pencarian String dengan metode String Matching, Boyer Moore, dan KMP.
Algoritma adalah
langkah-langkah yang disusun secara tertulis dan berurutan untuk menyelesaikan
suatu masalah. Sedangkan Algoritma Pemrograman adalah langkah-langkah
yang ditulis secara berurutan untuk menyelesaikan masalah pemrograman komputer.
Dalam pemrograman yang sederhana, algoritma merupakan langkah pertama yang harus ditulis sebelum menuliskan program. Masalah yang dapat diselesaikan dengan pemrograman komputer adalah masalah-masalah yang berhubungan dengan perhitungan matematik.
Hal yang penting
dikuasai dalam pemrograman adalah logika berpikir bagaimana cara memecahkan
masalah pemrograman yang akan dibuat. Kadang-kadang ada masalah matematika yang
sangat gampang jika diselesaikan secara tertulis, tetapi cukup sulit jika
diterjemahkan ke dalam pemrograman. Jika menemukan hal seperti itu, maka
algoritma dan logika pemrograman sangat penting untuk memecahkan masalah
!!!!!!!
Nahh Kali Ini
Saya Akan Berbagi Ilmu Terkait Algoritma Pencarian String Dengan Menggunakan
Metode String Matching, Boyer Moore, Dan KMP !!
Selamat
Belajar.....
Algoritma
pencarian string merupakan salah satu bagian terpenting dalam
berbagai proses yang berkaitan dengan data dengan tipe teks. Berbagai perangkat
lunak yang digunakan di seluruh dunia saat ini dengan sejumlah sistem operasi
berbeda, menggunakan algoritma pencarian string sebagai dasar implementasi.
Meskipun terdapat berbagai metode dan bentuk penyimpanan data yang telah
dikembangkan hingga saat ini, tetapi tipe data teks masih merupakan bentuk
utama pada proses transfer data. Fakta tersebut mendorong perkembangan berbagai
algoritma pencarian string yang mangkus sehingga memberikan hasil yang akurat
dengan waktu singkat. Hingga saat ini terdapat puluhan algoritma pencarian
string yang dapat dikelompokkan berdasarkan jenis pola dan metode pencocokan
string yang digunakan, beberapa contoh algoritma pencarian string diantaranya
adalah algoritma string matching yang merupakan algoritma paling sederhana,
algoritma Knuth-Morris-Pratt (KMP), algoritma Boyer-Moore, algoritma dua jalur,
algoritma Raita, algoritma quick search dan algoritma alpha skip.
Kata kunci: algoritma sting matching,
boyer moore, dan Knuth-Morris-Pratt(KMP).
Algoritma pencarian string
banyak digunakan pada proses pencarian data pada suatu kumpulan data, tidak
hanya pada bidang teknologi komputer semata, melainkan juga pada berbagai
bidang keilmuan yang membutuhkan penyimpanan data dalam jumlah besar untuk
kemudian dilakukan pencarian dan pengubahan data sesuai perubahan situasi dan
kondisi. Algoritma pencarian string bekerja dengan menghasilkan satu atau lebih
pola suatu string tertentu dalam sebuah tipe data teks sebagai kumpulan string.
Dengan demikian, algoritma pencarian string.
membutuhkan minimal dua data
masukan, yaitu string yang akan dicari dan data teks atau string yang lebih
panjang sebagai lokasi pencarian. Algoritma pencarian string bekerja dengan
memanfaatkan konsep automata, yaitu proses dibagi menjadi sejumlah kondisi
berbeda sesuai masukan yang telah diproses. Berdasarkan arah pemeriksaan karakter,
metode yang digunakan dikelompokkan menjadi :
1.
Metode pembacaan berawal dari posisi kiri mengarah ke kanan, salah satu
contohnya adalah algoritma Knut-Morris-Pratt. Metode ini tergolong alamiah
karena sesuai dengan arah pembacaan biasa dan memiliki karakteristik seperti
proses pada automata.
2.
Metode pembacaan berawal dari posisi kanan mengarah ke kiri, misalnya algoritma
BoyerMoore. Metode ini umumnya menghasilkan algoritma yang sederhana dan
dianggap paling mangkus.
3.
Metode pencarian dengan aturan tertentu, salah satunya adalah pencarian dua
arah yang diawali dengan kemunculan algoritma dua jalur yang dicetuskan oleh
Crochemore-Perrin. Metode ini melakukan dua jenis pencarian, yang pertama
adalah mencari bagian kanan pola dari kiri ke kanan, dan jika tidak ada
ketidakcocokan, pencarian dilanjutkan dengan bagian kiri.
4.
Metode yang tidak memiliki suatu pola tertentu, biasanya algoritma ini
menggunakan sebagian metode dari algoritma pada tiga kelompok di atas yang
dikombinasikan dengan metode lain, contohnya adalah algotima quick search.
Pada
kali ini hanya akan membahas tiga algoritma pencarian string, yaitu algoritma
string matching, algoritma boyer moore, dan algoritma KnuthMorris-Pratt (KMP).
Pembahasan mencakup metode pencocokan yang digunakan dan variasi yang mungkin
pada bentuk implementasi algoritma pada bahasa pemrograman C, berikut beberapa
penamaan variabel dan fungsi atau prosedur standar yang digunakan :
· char* input, data teks sebagai sumber
pencarian
· char* tes, pola string yang akan dicari
· int
len_i, variabel jumlah karakter pada input
· int len_t, variabel jumlah karakter pada tes
·
int getLenStr(char* str), fungsi penghitung
jumlah karakter pada sebuah string
·
void output(int x), prosedur pengembali nilai
hasil pencarian
·
int memcmp(char* b1, char* b2, int len),
fungsi bawaan dari bahasa C pada
library “string.h” yang
membandingkan byte string b1 dengan byte string b2 dan keduanya diasumsikan memiliki
panjang len. Fungsi ini mengembalikan nilai 0 jika keduan string sama, atau
nilai perbedaan karakter yang berbeda dalam byte.
1. Algoritma String Matching (Brute Force).
Algoritma pencarian string atau sering disebut juga
algoritma pencocokan string yaitu algoritma untuk melakukan pencarian
semua kemunculan string pendek dan dan panjang, untuk string pendek yang
disebut pattern dan string yang lebih panjang yang disebut teks.
Jenis algoritma ini merupakan algoritma yang
mencocokan sebuah pattern atau kata kunci dalam suatu data yang tersimpan antara
indeks 0 sampai indeks n– m untuk
mengetahui keberadaan pattern dalam
suatu text . Text disini merupakan suatu data yang
tersimpan dalam komputer sedangkan pattern merupakan kata kunci
yang akan dicari dalam suatu data. Proses pencocokan satu huruf
antara pattern dengan text dari kiri ke kanan dengan
ketentuan sebagai berikut :
1. karakter atau huruf di pattern dan di text yang di bandingkan tidak
cocok, maka dilakukan pergeseran sebanyak 1 kali.
2. Jika
semua karakter pattern cocok dengan text, maka tidak ada lagi
pergeseran., program akan memberitahukan penemuan pada posisi ini
dan menambahkan nilai suatu variabel sebagai
banyaknya pattern yang ditemukan dalam text.
Contoh :
|
T
|
=
|
A
|
L
|
E
|
X
|
A
|
N
|
D
|
E
|
R
|
|
T
|
E
|
O
|
|
L
|
E
|
M
|
B
|
A
|
N
|
G
|
|
P
|
=
|
T
|
E
|
O
|
Pada contoh diatas terjadi
pergeseran sampai Shift = 11, sehingga telah di temukan kata kunci “TEO” yang
dicari pada suatu data.
2. Algoritma Boyer Moore.
Boyer-Moore
merupakan sebuah cara untuk mencocokan sebuah String dari kanan ke kiri. Sebuah
teks dicocokan dengan pattern tertentu untuk menentukan apakah dalam teks yang
dicocokan terdapat pattern tersebut.
Perbedaan pencocokan String Boyer-Moore dengan pencocokan String secara Brute Force adalah pada Algoritma Boyer-Moore tidak semua String dicocokan seperti pada cara Brute Force. Ketika Ada text dan pattern yang terjadi Mismatch, maka pattern akan mencocokan text meloncat menurut nilai pada tabel delta atau sebanyak jumlah karakter yang telah dicocokan. Hal ini tergantung nilai maksimum yang terdapat dari keduanya.
Perbedaan pencocokan String Boyer-Moore dengan pencocokan String secara Brute Force adalah pada Algoritma Boyer-Moore tidak semua String dicocokan seperti pada cara Brute Force. Ketika Ada text dan pattern yang terjadi Mismatch, maka pattern akan mencocokan text meloncat menurut nilai pada tabel delta atau sebanyak jumlah karakter yang telah dicocokan. Hal ini tergantung nilai maksimum yang terdapat dari keduanya.
Secara sistematis,
langkah-langkah yang dilakukan algoritme Boyer-Moore pada saat mencocokkan
string adalah:
1. Menentukan
nilai OH(BMBC) dan MH(BMGS).
2. Algoritme
Boyer-Moore mulai mencocokkan pattern pada awal teks.
3. Dari
kanan ke kiri, algoritme ini akan mencocokkan karakter per karakter pattern
dengan karakter di teks yang bersesuaian, sampai salah satu kondisi berikut
dipenuhi:
1.
Karakter di pattern dan di teks yang
dibandingkan tidak cocok (mismatch).
2.
Semua karakter di pattern cocok.
Kemudian algoritme akan memberitahukan penemuan di posisi ini.
4. Algoritme
kemudian menggeser pattern dengan memaksimalkan nilai penggeseran good-suffix(OH)
dan penggeseran bad-character(MH), lalu mengulangi langkah 2 sampai pattern
berada di ujung teks.
Contoh :
|
T
|
=
|
A
|
L
|
E
|
X
|
A
|
N
|
D
|
E
|
R
|
|
T
|
E
|
O
|
|
L
|
E
|
M
|
B
|
A
|
N
|
G
|
|
P
|
=
|
T
|
E
|
O
|
Menentukan
nilai OH(BMBC) dan MH(BMGS).
|
|
T
|
E
|
O
|
|
0
|
|
|
0
|
|
1
|
|
1
|
|
|
2
|
2
|
|
|
Dari tabel di atas dapat dilihat bahwa nilai OH dan MH :
OH = 2 1 0
MH = 3 3 1 (dimana nilai 3 merupakan jumlah karakter pada pattern, dan nilia 1 merupakan
default atau suatu ketetapan).
Algoritme Boyer-Moore mulai mencocokkan
pattern Dari kanan ke kiri, algoritme ini akan mencocokkan karakter per
karakter pattern dengan karakter di teks yang bersesuaian, dengan menggeser
pattern dengan memaksimalkan nilai penggeseran good-suffix(OH) dan penggeseran
bad-character(MH).
1. Pada
pergeseran ke 1 karakter “O” pada pattern tidak cocok dengan karakter “E” pada teks, maka pergeseran
berdasarkan nilai dari tabel OH, karena Pada tabel OH karakter
E bernilai 1, maka pergeseran dilakukan sebanyak 1 kali.
2. pada pergeseran 2-4, karakter pattern
berturut-turut O, O, dan O, tidak cocok dengan karakter pada teks
berturut-turut X, D, dan SPASI, maka pergeseran di lakukan berdasarkan jumlah
karakter pattern, karena karakter X, D, dan spasi tidak mempunyai nilai pada
OH.
3. Pada tahap ke 5 tidak dilakukan pergeseran, karena pattern telah ditemukan, dan proses pencarian pattern berhenti dan tidak ada lagi pergeseran ke indeks berikutnya.
3. Algoritma KMP.
Algoritma Knuth Morris Pratt (KMP) dikembangkan
oleh D. E. Knuth, bersama dengan J.H. Morris dan V. R.Pratt. Algoritma Knuth Morris Pratt bekerja dengan memanfaatkan
pergeseran yang semaksimal mungkin dalam pencocokan string dalam teks. Jenis algoritma ini
merupakan proses matching yang dilakukan untuk mengetahui jumlah penggeseran
yang dilihat dari kesamaan String antara prefix dan suffix.
Langkah-langkah yang dilakukan algoritma
Knuth-Morris-Pratt pada saat mencocokkan string yaitu (modifikasi):
1.
String pattern (kata yang dicari) akan
dipecah menjadi array karakter
2.
String text (teks, artikel, dsb) akan dipecah
menjadi array karakter
3.
Menentukan lompatan yang akan dilakukan
ketika pencarian (funsi preKMP())
4.
Algoritma Knuth-Morris-Pratt mulai
mencocokkan pattern pada awal teks. ()
5. Dari kiri ke kanan, algoritma ini akan
mencocokkan karakter per karakter pattern dengan karakter di teks yang
bersesuaian, sampai salah satu kondisi berikut dipenuhi:
6.
Karakter di pattern dan di teks yang
dibandingkan tidak cocok (mismatch).
7.
Semua karakter di pattern cocok.
Kemudian algoritma akan memberitahukan penemuan di posisi ini.
8.
Algoritma kemudian menggeser pattern
berdasarkan tabel next (lompat), lalu mengulangi langkah 2 sampai pattern
berada di ujung teks.
Contoh :
|
T
|
=
|
A
|
L
|
E
|
X
|
A
|
N
|
D
|
E
|
R
|
|
T
|
E
|
O
|
|
L
|
E
|
M
|
B
|
A
|
N
|
G
|
|
P
|
=
|
T
|
E
|
O
|
|
No
|
Pattern
|
P
|
nilai
|
S
|
|
1
|
T
|
no perfix
|
0
|
no subfix
|
|
2
|
TE
|
T
|
0
|
E
|
|
3
|
TEO
|
T,TE
|
0
|
O, EO
|
P(j)
= T E O
B(j) = 0 0 0
Algoritma Knuth-Morris-Pratt mulai
mencocokkan pattern, Dari kiri ke kanan.
|
teks
|
A
|
L
|
E
|
X
|
A
|
N
|
D
|
E
|
R
|
|
T
|
E
|
O
|
|
L
|
E
|
M
|
B
|
A
|
N
|
G
|
|
pattern
|
T
|
E
|
O
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
T
|
E
|
O
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
T
|
E
|
O
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
T
|
E
|
O
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
T
|
E
|
O
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
T
|
E
|
O
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
T
|
E
|
O
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
T
|
E
|
O
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
T
|
E
|
O
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
T
|
E
|
O
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
T
|
E
|
O
|
|
|
|
|
|
|
|
|
Sekian
Ilmu Yang Bisa Saya Bagi, Semoga Bermanfat !!!!!





Komentar
Posting Komentar