2.4. Pengertian Pencocokan String (String Matching)
2.5.1. Defenisi Algoritma
2.5. Algoritma
2.5.1. Defenisi Algoritma
Istilah algoritma (algorithm) berasal dari kata “algoris” dan “ritmis”, yang pertama kali diungkapkan oleh seorang tokoh matematikawan Persia berkebangsaan Arab bernama Mohammed Ibn Musa Al-Khuwarizmi (825 M) dalam buku Al-Jabr Wa-al Muqabla. Dalam bidang pemrograman algoritma didefenisikan sebagai suatu metode khusus yang tepat dan terdiri dari serangkaian langkah yang terstruktur dan dituliskan secara matematis yang akan dikerjakan untuk menyelesaikan kasus-kasus tertentu (Ananda, et al. 2009).
Secara spesifik, algoritma juga dapat didefenisikan sebagai sekumpulan prosedur komputasi yang terdefinisi dengan baik dan memiliki beberapa nilai atau himpunan nilai sebagai nilai masukan dan menghasilkan nilai atau himpunan nilai sebagai nilai keluaran. Sebuah algoritma pada dasarnya adalah urutan langkah-langkah komputasi yang mengubah nilai input menjadi nilai output (Cormen, et al.
2001).
2.5.2. Algoritma Pencocokan String (String Matching)
Algoritma pencocokan string adalah sebuah proses pencarian tempat dari satu atau beberapa string yang ditemukan dalam sebuah kumpulan string atau teks. Jalan paling
sederhana adalah dengan cara membaca karakter satu persatu dan melakukan perhitungan kesalahan posisi yang ada dari string yang dicari (Dewanto, et al. 2007).
2.5.3. Algoritma Apostolico-Giancarlo
Algoritma apostolic-giancarlo merupakan algoritma pengembangan dari algoritma boyer-moore. Perbedaan algoritma apostolic-giancarlo dari algoritma boyer-moore terletak pada proses pencariannya yang menggunakan sebuah variabel bantu sebagai pengingat dalam proses pencarian. Variabel bantu pada algororitma apostolico giancarlo ini berfungsi untuk menyimpan informasi pasangan yang sudah cocok pada shift sebelumnya. Hal ini yang menjadi kelebihan dari algoritma apostolic-giancarlo, jika dibandingkan dengan algoritma booyer-moore (Crochemore et. al, 2004).
Pada dasarnya, Apostolico-giancarlo menyimpan pattern dari hasil setiap perbandingan yang sama, agar perbandingan tersebut tidak terjadi lagi. Berikut adalah contoh proses pencarian pattern AMRI dalam sebuah teks FAUZI AMRI.
Pattern :
Tabel 2.1 pattern.
I 0 1 2 3
X[i] A M R I
Kemudian, diperoleh tabel BmBc, tabel Suffix dan tabel BmGs dari pattern AMRI.
Tabel 2.2 BmBc dari pattern AMRI.
I 0 1 2 3
X[i] A M R *
BmBc 3 2 1 4
Tabel 2.3 Suffix dari pattern AMRI.
I 0 1 2 3
X[i] A M R I
Suffix 0 0 0 4
Tabel 2.4 BmGs dari pattern AMRI.
I 0 1 2 3
X[i] A M R I
BmGs 4 4 4 1
Pertama-tama akan disamakan posisi pattern dengan 4 karakter pertama pada teks.
Tabel 2.5 penyamaan posisi pattern dengan teks.
F A U Z I A M R I
A M R I
Kemudian, dilakukan perpindahan pertama posisi pattern terhadap teks.
Shift by : BmGs [3], BmBc [Z] - 4 + 4 = 4.
Max(1,4) = 4.
Kemudian, dilakukan pergeseran sebanyak 4 karakter.
Tabel 2.6 pergeseran posisi pattern sebanyak 4 karakter.
F A U Z I A M R I
A M R I
Kemudian, dilakukan perpindahan kedua posisi pattern terhadap teks.
Shift by : BmGs [3], BmBc [M] - 4 + 4 = 2 Max(1,2) = 2
Kemudian, dilakukan pergeseran sebanyak 2 karakter.
Tabel 2.7 pergeseran posisi pattern sebanyak 2 karakter, ditemukan kata yang sesuai dengan pattern
F A U Z I A M R I
A M R I
Setelah dilakukan pergeseran posisi pattern kedua, kemudian diperoleh kata yang dicari di dalam teks.
Berdasarkan penjelasan di atas, secara singkat, cara kerja algoritma giancarlo apostolico dapat disimpulkan sebagai berikut:
1. Input lokasi file yang akan dicari.
2. Input kata kunci pencarian.
3. Untuk setiap file yang diperiksa, urutkan nama file sesuai abjad tanpa ada karakter yang mengalami perulangan.
4. Hitung jumlah kemunculan masing-masing karakter kata kunci pada setiap file yang diperiksa. Untuk karakter kata kunci yang tidak ditemukan pada file, gunakan kode n+1, dimana n adalah jumlah index dari kata kunci. Untuk karakter kata kunci yang ditemukan pada file, gunakan index kemunculan karakter tersebut pada file sebagai kode.
5. Untuk setiap file yang diperiksa, lakukan pencocokan nama file terhadap kata kunci. Jika tidak terjadi kecocokan, lakukan shift berdasarkan kriteria karakter nama file, apakah termasuk bad-suffix shift atau good-suffix shift.
6. Good-suffix shift dilakukan jika karakter nama file bukan termasuk karakter buruk (memiliki kode lebih kecil dari n+1). Pergeseran dilakukan hingga ditemukan karakter yang cocok dengan karakter nama file pada kata kunci.
7. Bad-suffix shift dilakukan jika karakter nama file termasuk dalam karakter buruk (memiliki kode n+1). Pergeseran dilakukan sebanyak n+1.
8. Proses pencarian dihentikan jika seluruh karakter nama file yang diperiksa telah cocok dengan karakter pada kata kunci.
9. Hitung jumlah pergerseran (shift) untuk masing-masing pencarian nama file .
2.5.4. Algoritma Raita
Algoritma Raita dirancang untuk membandingkan karakter terakhir dari jendela teks dengan pattern yang bersesuaian, jika cocok kemudian karakter pertama,jika cocok juga maka dilanjutkan ke karakter tengah.
Akhirnya, jika mereka benar-benar cocok, maka selanjutnya algoritma akan membandingkan karakter lain mulai dari karakter kedua hingga ke karakter kedua terakhir, dan mungkin membandingkan dengan karakter tengah lagi.
Kebanyakan algoritma pencocokan string terdiri dari fase preprocessing dan fase pencarian. Tahap preprocessing menganalisis karakter dalam pola untuk menggunakan informasi ini untuk menentukan pergeseran pola dalam kasus ketidakcocokan atau seluruh pencocokan, dengan tujuan mengurangi jumlah perbandingan karakter, sedangkan fase pencarian mendefinisikan urutan perbandingan karakter dalam setiap upaya antara pola dan teks.(Klaib&Osborne, 2009).
Pada algoritma Raita terbagi atas 2 fase, yaitu : 1. Fase Preprocessing
2. Fase Pencarian
1. Fase Preprocessing
Fase preprocessing pada algoritma Raita terdiri dari penghitungan fungsi pergeseran bad-character dari algoritma Boyer Moore.Bad-character merupakan kumpulan karakter yang mewakili pola (pattern). Fungsi pergeseran bad-character dari algoritma Boyer Moore ini disimpan pada tabel bmBc.
Contoh perhitungan tabel pergeseran bmBc untuk pattern AMRI pada teks FAUZI AMRI.
Pattern :
Tabel 2.8 pattern
I 0 1 2 3
X[i] A M R I
Langkah 1 :
Diambil setiap perwakilan karakter dari pattern dan sebuah karakter pembantu “*”
untuk mewakilkan karakter yang belum ada. Dan karakter terakhir berubah menjadi
“*”.
Tabel 2.9 perubahan pada karakter terakhir pada pattern
A M R *
Nilai bmBc [x[i]] diisi dengan nilai dari panjang pattern (m). Pada contoh ini karena Pattern memiliki panjang 5, maka nilai bmBc [x[i]] adalah 5.
Tabel 2.10 Tabel BmBc dari pattern AMRI
A M R *
BmBc[c] 3 2 1 4
Langkah 2 :
Tabel 2.11 penyamaan posisi pattern terhadap teks
F A U Z I A M R I
A M R I
Karena tidak cocok, maka akan dilakukan pergeseran sesuai dengan nilai bmBc pada huruf terakhir (Z) dari perbandingan dengan pattern. bmBc [Z] = 4, maka dilakukan pergeseran ke kanan sebanyak 4 index.
Langkah 3 :
Tabel 2.12 perpindahan posisi pattern terhadap teks
F A U Z I A M R I
A M R I
Karena tidak cocok, maka akan dilakukan pergeseran sesuai dengan nilai bmBc pada huruf terakhir (M) dari perbandingan dengan pattern. bmBc [M] = 2, maka dilakukan pergeseran ke kanan sebanyak 2 index.
Langkah 5 :
Tabel 2.13 ditemukan kata yang sesuai dengan pattern
F A U Z I A M R I
A M R I
Karena sudah cocok, maka kata ditemukan.