6 BAB 2 LANDASAN TEORI 2. Information Retrieval Information Retrieval atau sering disebut temu kembali infromasi adalah suatu sistem yang mampu melakukan penyimpanan, pencarian, dan pemeliharaan informasi. Informatian retrieval merupakan ilmu yang mempelajari prosedur-prosedur dan metode-metode untuk menemukan kembali informasi yang tersimpan dari berbagai sumber yang relevan atau koleksi sumber informasi yang dicari atau dibutuhkan. Dengan tindakan index panggilan (searching), pemanggilan data kembali. (Kowalski, G. 997) Dalam pencarian data, beberapa jenis data dapat ditemukan diantaranya texts, table, image, video, audio. Adapun tujuan dari Infromation Retrieval ialah untuk memenuhi informasi pengguna dengan cara meretrieve dokumen yang relevan atau menguragi dokumen pencarian yang tidak relevan. (Kowalski, G. 997) Information Retrieval memiliki kegunaan yang banyak untuk user. Kita bisa melihat fungsinya di mesin pencari untuk mencari informasi, atau di perpustakaan, di apotik dan lain sebagainya. Itu semua adalah karena jasa Information Retrieval. Information Retrieval mempunyai peran untuk: ) Menganalisis isi sumber informasi dan pertanyaan pengguna. 2) Mempertemukan pertanyaan pengguna dengan sumber informasi untuk mendapatkan dokumen yang relevan. 2.2 String Matching String matching adalah pencarian sebuah pattern pada sebuah teks (Cormen, T.H. et al. 994). String matching digunakan untuk menemukan suatu string yang disebut dengan pattern dalam string yang disebut dengan teks (Charras, C. & Lecroq, T. 997). Prinsip kerja algoritma string matching (Effendi, D. et al. 203) adalah sebagai berikut:
7 ) Memindai teks dengan bantuan sebuah window yang ukurannya sama dengan panjang pattern. 2) Menempatkan window pada awal teks. 3) Membandingkan karakter pada window dengan karakter dari pattern. Setelah pencocokan (baik hasilnya cocok atau tidak cocok) dilakukan pergeseran ke kanan pada window. Prosedur ini dilakukan berulang-ulang sampai window berada pada akhir teks. Mekanisme ini disebut mekanisme sliding window. Algoritma string matching mempunyai tiga komponen utama (Effendi, D. et al. 203), yaitu: ) Pattern, yaitu deretan karakter yang akan dicocokkan dengan teks, dinyatakan dengan, panjang pattern dinyatakan dengan. 2) Teks, yaitu tempat pencocokan pattern dilakukan. Dinyatakan dengan, panjang teks dinyatakan dengan. 3) Alfabet, berisi semua simbol yang digunakan oleh bahasa pada teks dan pattern, dinyatakan dengan dengan ukuran dinyatakan ASIZE. 2.3 Cara Kerja String Matching Pattern adalah solusi umum yang dapat digunakan kembali pada permasalahan umum yang sering terjadi pada software design. Design pattern bukan desain final yang dapat ditransformasikan secara langsung kedalam kode. Ini hanyalah deskripsi atau template untuk mengetahui bagaimana menyelesaikan permasalahan yang dapat digunakan pada berbagai macam situasi yang berbeda. Cara yang jelas untuk mencari pattern yang cocok dengan teks adalah dengan mencoba mencari di setiap posisi awal dari teks dan mengabaikan pencarian secepat mungkin jika karakter yang salah ditemukan (Knuth, D.E. et al. 977). Proses pertama adalah menyelaraskan bagian paling kiri dari pattern dengan teks. Kemudian dibandingkan karakter yang sesuai dari teks dan pattern. Setelah seluruhnya cocok maupun tidak cocok dari pattern, window digeser ke kanan sampai posisi pada teks. Menurut Singh, R. & Verma, H.N. (20), efisiensi dari algoritma terletak pada dua tahap: ) Tahap praproses, tahap ini mengumpulkan informasi penuh tentang pattern dan menggunakan informasi ini pada tahap pencarian.
8 2) Tahap pencarian, pattern dibandingkan dengan window dari kanan ke kiri atau kiri ke kanan sampai kecocokan atau ketidakcocokan terjadi. 2.4 Klasifikasi Algoritma String Matching Algoritma string matching dapat diklasifikasikan menjadi tiga bagian menurut arah pencariannya (Charras, C. & Lecroq, T. 997), yaitu: ) Dari kiri ke kanan (left to right), algoritma yang termasuk dalam kategori ini adalah algoritma Brute Force, algoritma Morris dan Pratt yang kemudian dikembangkan menjadi algoritma Knuth-Morris-Pratt. 2) Dari kanan ke kiri (right to left) yang biasanya menghasilkan hasil terbaik secara partikal. Contoh algoritma ini adalah algoritma Boyer-Moore, yang kemudian banyak dikembangkan menjadi algoritma Tuned Boyer-Moore, algoritma Turbo Boyer-Moore, algoritma Zhu Takaoka dan algoritma Horspool. 3) Dari arah yang ditentukan secara spesifik oleh algoritma tersebut (in a spesific order), arah ini menghasilkan hasil terbaik secara teoritis. Algoritma yang termasuk kategori ini adalah algoritma Colussi dan algoritma Chrocemorre- Perrin. 2.5 Teknik Algoritma String Matching Menurut Singla, N. & Garg, D. (202), ada dua teknik utama dalam algoritma string matching, yaitu: ) Exact string matching Exact string matching, merupakan pencocokan string secara tepat dengan susunan karakter dalam string yang dicocokkan memiliki jumlah maupun urutan karakter dalam string yang sama. Beberapa algoritma exact string matching antara lain: a. Knuth-Morris-Pratt, metode ini mencari kehadiran sebuah kata dalam teks dengan melakukan observasi awal (preprocessing) dengan cara mengecek ulang kata sebelumnya. Algoritma ini melakukan pencocokan dari kiri ke kanan. b. Boyer-Moore, algoritma Boyer-Moore adalah algoritma string matching yang paling efisien dibandingkan algoritma string matching lainnya. Sebelum melakukan pencarian string, algoritma melakukan proses terlebih dahulu pada pattern, bukan pada string pada teks tempat pencarian. Algoritma ini melakukan
9 pencocokan karakter yang dimulai dari kanan ke kiri. Karena sifatnya yang sangat efisien, Boyer-Moore memiliki banyak variasi penyederhanaannya. Salah satunya adalah algoritma Horspool yang akan digunakan dalam penelitian ini dan akan dijelaskan pada poin berikutnya. 2) Approximate string matching atau Fuzzy string matching Fuzzy string matching merupakan pencocokan string secara samar, maksudnya pencocokan string dimana string yang dicocokkan memiliki kemiripan memiliki susunan karakter yang berbeda (mungkin jumlah atau urutannya), tetapi string tersebut memiliki kemiripan baik kemiripan tekstual/penulisan (approximate string matching) atau kemiripan ucapan (phonetic string matching). 2.6 Algoritma Not So Naive Algoritma Not So Naive pertama kali dipublikasikan oleh Christophe Hancart tahun 992. Algoritma Not So Naive merupakan variasi turunan dari algoritma Naive atau yang sering disebut algoritma Brute Force. Cara kerja algoritma ini adalah dengan memiliki fase pencarian mengecek teks dan pola dari kiri ke kanan. Lalu, algoritma Not So Naive akan mengidentifikasi terlebih dahulu dua kasus yang dimana di setiap akhir fase pencocokan pergeseran dapat dilakukan sebanyak 2 posisi ke kanan, tidak seperti algoritma Naive yang dimana pergeseran tetaplah sebanyak posisi ke kanan. Kita asumsikan bahwa P[0] P[]. Jika P[0] = T[s] dan P[] = T[s+], maka di akhir fase pencocokan pergeseran s bisa dilakukan sebanyak 2 posisi. Karena P[0] P[] = T[s+]. Dan jika P[0] = P[]. Jika P[0] = T[s] tapi P[] T[s+]. Maka sekali lagi pergeseran s dapat dilakukan sebanyak 2 posisi (Cantone & Faro,2004) dimana P adalah Pattern,T adalah Teks dan s adalah nilai posisi. Saat fase pencarian dari Algoritma Not So Naive perbandingan karakter dilakukan dengan posisi pola mengikuti urutan, 2,..., m-2, m-, 0 dimana m adalah panjang pattern. Di setiap percobaan dimana jendela diposisikan di teks faktor y[i..j+m-]. jika x[0] = x[] dan x[] y[ j+] atau jika x[0] x[] dan x[] = y[j+] polanya akan digeser sebanyak 2 posisi di setiap akhir percobaan dan sebanyak posisi jika kondisi di atas tidak terpenuhi (Alapati & Mannava, 20) dimana y adalah teks dan x adalah pattern. Berikut diberikan contoh untuk menunjukkan proses pencarian Algoritma Not So Naive dimana karakter urutan 0 dan karakter urutan pada pattern tidak
0 mengalami kesamaan (x[0]!= x[]) maka nilai variabel k akan diinisialisasi dengan nilai dan nilai variabel ell akan diinisialisasi dengan nilai 2 dimana kedua variabel tersebut akan digunakan untuk nilai pergeseran pada proses pencocokan. Contoh Teks : NURUL HASANAH HARAHAP Pattern : ARAH Tabel. Proses Pencocokan Algoritma Not So Naive Pada Percobaan Satu Pada Tabel. perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak posisi sesuai dengan nilai variabel k. Tabel.2 Proses Pencocokan Algoritma Not So Naive Pada Percobaan Dua 2 Pada Tabel.2 perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak 2 posisi sesuai dengan nilai variable ell. Tabel.3 Proses Pencocokan Algoritma Not So Naive Pada Percobaan Tiga Pada Tabel.3 perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak posisi sesuai dengan nilai variabel k.
Tabel.4 Proses Pencocokan Algoritma Not So Naive Pada Percobaan Empat Pada Tabel.4 perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak posisi sesuai dengan nilai variabel k. Tabel.5 Proses Pencocokan Algoritma Not So Naive Pada Percobaan Lima Pada Tabel.5, perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak posisi sesuai dengan nilai variabel k. Tabel.6 Proses Pencocokan Algoritma Not So Naive Pada Percobaan Enam Pada Tabel.6 perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak posisi sesuai dengan nilai variabel k. Tabel.7 Proses Pencocokan Algoritma Not So Naive Pada Percobaan Tujuh Pada Tabel.7 perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak posisi sesuai dengan nilai variabel k.
2 Tabel.8 Proses Pencocokan Algoritma Not So Naive Pada Percobaan Delapan Pada Tabel.8 perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak posisi sesuai dengan nilai variabel k. Tabel.9 Proses Pencocokan Algoritma Not So Naive Pada Percobaan Sembilan Pada Tabel.9 perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak posisi sesuai dengan nilai variabel k. Tabel.0 Proses Pencocokan Algoritma Not So Naive Pada Percobaan Sepuluh Pada Tabel.0 perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak posisi sesuai dengan nilai variabel k. Tabel. Proses Pencocokan Algoritma Not So Naive Pada Percobaan Sebelas Pada Tabel. perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak posisi sesuai dengan nilai variabel k.
3 Tabel.2 Proses Pencocokan Algoritma Not So Naive Pada Percobaan Dua Belas Pada Tabel.2 perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak posisi sesuai dengan nilai variabel k. Tabel.3 Proses Pencocokan Algoritma Not So Naive Pada Percobaan Tiga Belas Pada Tabel.3 perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak posisi sesuai dengan nilai variabel k. Tabel.4 Proses Pencocokan Algoritma Not So Naive Pada Percobaan Empat Belas Pada Tabel.4 perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak posisi sesuai dengan nilai variabel k. Tabel.5 Proses Pencocokan Algoritma Not So Naive Pada Percobaan Lima Belas 4 2 3
4 Pada Tabel.5 perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak 2 posisi sesuai dengan nilai variabel ell. Tabel.6 Proses Pencocokan Algoritma Not So Naive Pada Percobaan Enam Belas Pada Tabel.6 perbandingan karakter pertama (x[]!= y[j+]) sudah mengalami digeser sebanyak posisi sesuai dengan nilai variabel k. Namun dikarenakan sisa Teks lebih kecil daripada pola maka fase pencarian berhenti disini. 2.7 Algoritma Two Way Algoritma Two Way Algorithm atau Algoritma Dua Arah dipublikasikan Maxime Crochemore dan Dominique Perrin pada tahun 99. Algoritma ini memfaktorkan pattern menjadi dua bagian patternkiri, dan patternkanan sehingga pattern=patternkiripatternkanan. Fase pencocokan pada algoritma ini terdiri dari dua bagian, pertama mencocokkan karakter patternkanan dari kiri ke kanan, lalu mencocokkan karakter patternkiri dari kanan ke kiri [CHA0]. Hal ini diilustrasikan pada Gambar 2. Fase inisialisasi pada algoritma ini menghitung faktorisasi yang baik dari pattern atas patternkiri dan patternkanan. Jika (u, v) merupakan sebuah faktorisasi dari pattern, maka sebuah pengulangan di (u, v) adalah sebuah kata w, sehingga dua persyaratan ini terpenuhi:. w adalah akhiran dari u atau u adalah akhiran dari w 2. w adalah awalan dari v atau v adalah awalan dari w Dengan kata lain, kata w muncul di kedua sisi dari potongan u dan v dengan kemungkinan overflow di kedua sisi. Panjang dari pengulangan terkecil di (u, v) disebut periode lokal, dan dinotasikan dengan r (u, v). Setiap faktorisasi dari (u, v) paling tidak mempunyai satu pengulangan. Dapat dilihat dengan mudah bahwa r (u, v) x. Faktorisasi (u, v) dari x sehingga r (u, v) = per (x) disebut faktorisasi kritis dari x. Jika (u, v) adalah faktorisasi kritis dari x, maka pada posisi pada u di x,
5 periode lokal dan periode global akan sama. Algoritma Crochemore-Perrin memilih faktorisasi kritis (patternkiri, patternkanan) sehingga patternkiri < per(x) dan patternkiri mempunyai nilai minimal. (Crochemore, M & Perrin, D. 99) Fase inisialisasi pada algoritma ini mempunyai kompleksitas waktu dan ruang O (n), sedang fase pencocokan dapat dilakukan dengan kompleksitas waktu O (m), dan pada kasus terburuk, algoritma ini melakukan 2m-n pencocokan karakter. Contoh: Teks : NURUL HASANAH HARAHAP Pattern : ARAH Tabel 2. Proses Pencocokan Algoritma Two Way Pada Percobaan Satu Terlihat perbedaan pada index R sehingga geser pattern sebanyak Tabel 2.2 Proses Pencocokan Algoritma Two Way Pada Percobaan Dua Terlihat perbedaan pada index U sehingga geser pattern sebanyak Tabel 2.3 Proses Pencocokan Algoritma Two Way Pada Percobaan Tiga Terlihat perbedaan pada index L sehingga geser pattern sebanyak Tabel 2.4 Proses Pencocokan Algoritma Two Way Pada Percobaan Empat Terlihat perbedaan pada index (spasi) sehingga geser pattern sebanyak
6 Tabel 2.5 Proses Pencocokan Algoritma Two Way Pada Percobaan Lima Terlihat perbedaan pada index H sehingga geser pattern sebanyak Tabel 2.6 Proses Pencocokan Algoritma Two Way Pada Percobaan Enam 2 Terlihat persamaan pada index A dan terlihat perbedaan pada index S sehingga geser pattern sebanyak 2 Tabel 2.7 Proses Pencocokan Algoritma Two Way Pada Percobaan Tujuh 2 Terlihat persamaan pada index A dan terlihat perbedaan pada index N sehingga geser pattern sebanyak 2 Tabel 2.8 Proses Pencocokan Algoritma Two Way Pada Percobaan Delapan 3 4 2 Terlihat persamaan pada index A, H, A dan terlihat perbedaan pada index N sehingga geser pattern sebanyak 2 Tabel 2.9 Proses Pencocokan Algoritma Two Way Pada Percobaan Sembilan 2 Terlihat persamaan pada index A dan terlihat perbedaan pada index R sehingga geser pattern sebanyak 2
7 Tabel 2.0 Proses Pencocokan Algoritma Two Way Pada Percobaan Sepuluh 3 4 2 Teks dan Pattern cocok sehingga geser pattern sebanyak 4 Tabel 2. Proses Pencocokan Algoritma Two Way Pada Percobaan Sebelas Pada pola ini tidak perlu dilakukan pergeseran karena sudah pada indeks terakhir. 2.8 Kompleksitas Algoritma Suatu masalah dapat mempunyai banyak algoritma penyelesaian. Algoritma yang digunakan tidak saja harus benar, namun juga harus efisien. Efisiensi suatu algoritma dapat diukur dari waktu eksekusi algoritma dan kebutuhan ruang memori. Algoritma yang efisien adalah algoritma yang meminimumkan kebutuhan waktu dan ruang. Dengan menganalisis beberapa algoritma untuk suatu masalah, dapat diidentifikasi satu algoritma yang paling efisien. Besaran yang digunakan untuk menjelaskan model pengukuran waktu dan ruang ini adalah kompleksitas algoritma. Kompleksitas dari suatu algoritma merupakan ukuran seberapa banyak komputasi yang dibutuhkan algoritma tersebut untuk menyelesaikan masalah. Secara informal, algoritma yang dapat menyelesaikan suatu permasalahan dalam waktu yang singkat memiliki kompleksitas yang rendah, sementara algoritma yang membutuhkan waktu lama untuk menyelesaikan masalahnya mempunyai kompleksitas yang tinggi. Kompleksitas algoritma terdiri dari dua macam yaitu kompleksitas waktu dan kompleksitas ruang. Kompleksitas waktu, dinyatakan oleh T ( n ) diukur dari jumlah tahapan komputasi yang dibutuhkan untuk menjalankan algoritma sebagai fungsi dari ukuran masukan, di mana ukuran masukan ( n ) merupakan jumlah data yang diproses oleh sebuat algoritma. Sedangkan kompleksitas ruang S( n ) diukur dari memori yang digunakan oleh struktur data yang terdapat di dalam algoritma sebagai fungsi dari masukan. Dengan menggunakan kompleksitas waktu atau kompleksitas ruang,
8 dapat ditentukan laju peningkatan waktu atau ruang yang diperlukan algoritma, seiring dengan meningkatnya ukuran masukan ( n ). Kecenderungan saat ini, ruang (memori utama) yang disediakan semakin besar yang artinya kapasitas data yang diproses juga semakin besar. Namun, waktu yang diperlukan untuk menjalankan suatu algoritma harus semakin cepat. Karena kompleksitas waktu menjadi hal yang sangat penting, maka analisis kompleksitas algoritma deteksi tepi akan dilakukan terhadap running time algoritma tersebut. 2.9 Notasi O (Big-O) Notasi O menyatakan running time dari duatu algoritma untuk kemungkinan kasus terburuk. Notasi memiliki dari beberapa bentuk. Notasi O dapat berupa salah satu bentuk maupun kombinasi dari bentuk-bentuk tersebut. Bentuk O () memiliki arti bahwa algoritma yang sedang dianalisis merupakan algoritma konstan. Hal ini mengindikasikan bahwa running time algoritma tersebut tetap, tidak bergantung pada n. O (n) berarti bahwa algoritma tersebut merupakan algoritma linier. Artinya, bila n menjadi 2n maka running time algoritma akan menjadi dua kali running time semula. O ( ) berarti bahwa algoritma tersebut merupakan algoritma kuadratik. Algoritma kuadratik biasanya hanya digunakan untuk kasus dengan n yang berukuran kecil. Sebab, bila n dinaikkan menjadi dua kali semula, maka running time algoritma akan menjadi empat kali semula. O ( ) berarti bahwa algoritma tersebut merupakan algoritma kubik. pada algoritma kubik, bila n dinaikkan menjadi dua kali semula, maka running time algoritma akan menjadi delapan kali semula. O ( ) Bentuk berarti bahwa algoritma tersebut merupakan algoritma eksponensial. Pada kasus ini, bila n dinaikkan menjadi dua kali semula, maka running time algoritma akan menjadi kuadrat kali semula. O ( ) berarti algoritma tersebut merupakan algoritma logaritmik Pada kasus ini, laju pertumbuhan waktu lebih lambat dari pada pertumbuhan n. Algoritma yang termasuk algoritma logaritmik adalah algoritma yang memecahkan
9 persoalan besar dengan mentransformasikannya menjadi beberapa persoalan yang lebih kecil dengan ukuran sama. Basis algoritma tidak terlalu penting, sebab bila misalkan n dinaikkan menjadi dua kali semula, meningkat sebesar jumlah tetapan. Bentuk O (n ) terdapat pada algoritma yang membagi persoalan menjadi beberapa persoalan yang lebih kecil, menyelesaikan setiap persoalan secara independen, kemudian menggabungkan solusi masing- masing persoalan. Sedangkan O (n ) berarti bahwa algoritma tersebut merupakan algoritma faktorial. Algoritma jenis ini akan memproses setiap masukan dan menghubungkannya dengan n- masukan lainnya. Bila n menjadi dua kali semula, maka running time algoritma akan menjadi faktorial dari 2n Kompleksitas algoritma yang akan diuji adalah kompleksitas Algoritma Not So Naive dan Algoritma Two Way. Seperti dijelaskan pada Tabel 4.7 dan Tabel 4.8 berikut 2.0 Penelitian yang relevan Berikut ini beberapa penelitian yang terkait dengan Algoritma Not So Naive dan Two Way :. Cantone, D. & Faro, S. (2004) Menjelaskan bahwa Algoritma Not So Naive merupakan variasi simpel dari Algoritma Naive yang ternyata cukup efisien dalam beberapa kasus. Proses searching dari Algoritma Not So Naive dilakukan dengan mencocokan teks dan pola dari kiri ke kanan. Namun, Algoritma Not So Naive mempunyai dua kasus yang jikalau terpenuhi maka akhir dari pencocokan, pola bisa bergeser sebanyak 2 posisi ke kanan, daripada posisi yang terdapat di Algoritma Not So Naive. 2. Dwinanto, Cahyono. (2003) dalam penelitiannya menganalisa algoritma pencarian string dengan algoritma Algoritma Brute Force, Knuth Morris Pratt dan Algoritma Dua Arah (Two Way). Dalam penelitiannya Algoritma pencarian string merupakan salah satu komponen penting dalam pemrosesan string. Penelitian ini menghasilkan masing masing algoritma menggunakan metode pemeriksaan string yang berbeda dalam konteks arah.
20 3. Vina Sagita, Maria Irmina Prasetiyowati (203) dalam penelitiannya membandingkan algoritma Boyer Moore, Turbo Boyer Moore dan Tuned Boyer Moore. Dalam penelitiannya menggunakan kecepatan waktu untuk menentukan algoritma yang terbaik. Penelitian ini menghasilkan algoritma boyer moore merupakan algoritma tercepat. Algoritma Turbo Boyer Moore merupakan tercepat kedua dan yang paling lambat adalah Tuned Boyer Moore.