ALGORITMA PENCARIAN STRING DENGAN ALGORITMA BRUTE FORCE, KNUTH-MORRIS-PRATT DAN ALGORITMA DUA ARAH

dokumen-dokumen yang mirip
TECHNICAL REPORT PENGGUNAAN ALGORITMA PENCOCOKAN STRING BOYER-MOORE DALAM MENDETEKSI PENGAKSESAN SITUS INTERNET TERLARANG

PENGGUNAAN ALGORITMA APOSTOLICO-CROCHEMORE PADA PROSES PENCARIAN STRING DI DALAM TEKS

APLIKASI ALGORITMA KNUTH-MORRIS-PRATT PADA MESIN PENCARI KATA UNTUK LINGKUNGAN WEBSITE MAHASISWA INFORMATIKA 2005

Analisis Algoritma Knuth Morris Pratt dan Algoritma Boyer Moore dalam Proses Pencarian String

APLIKASI ALGORITMA PENCOCOKAN STRING KNUTH-MORRIS-PRATT (KPM) DALAM PENGENALAN SIDIK JARI

Aplikasi Algoritma Pencarian String Dalam Sistem Pembayaran Parkir

Penggunaan Algoritma Knuth-Morris-Pratt untuk Pengecekan Ejaan

BAB 2 LANDASAN TEORI

Aplikasi Algoritma Pencocokan String pada Mesin Pencari Berita

Penerapan Algoritma Pencocokan String Boyer-Moore untuk Keamanan Komputer

Penerapan Algoritma Pencocokan String Knuth-Morris-Pratt Sebagai Algoritma Pencocokan DNA

Algoritma Pencarian String Knuth-Morris-Pratt Dalam Pengenalan Tulisan Tangan

Penerapan Algoritma Pattern Matching untuk Mengidentifikasi Musik Monophonic

Penerapan Algoritma Knuth Morris Pratt dalam Aplikasi Penerjemah Teks

II. DASAR TEORI I. PENDAHULUAN

Aplikasi Algoritma String Matching dan Regex untuk Validasi Formulir

Penerapan Algoritma Brute Force pada permainan Countdown Number

Penerapan Pencocokan String pada Aplikasi Kamusku Indonesia

Penerapan Algoritma String Matching dalam Intelligent Personal Assistant Siri

Implementasi Algoritma Knuth Morris Pratt pada Alat Penerjemah Suara

Penggunaan String Matching Dalam Mencari Kata Dalam Permainan Mencari Kata Dari Sebuah Matriks Huruf

Pattern Matching dalam Aplikasi Pencarian Jodoh

Algoritma String Matching pada Mesin Pencarian

Pengaplikasian Algoritma Knuth-Morris-Pratt dalam Teknik Kompresi Data

Penggunaan Algoritma Pencocokkan Pola pada Sistem Barcode

Penilaian Ujian Tertulis Menggunakan Algoritma Pattern Matching IF3051 Strategi Algoritma

Algoritma Pencarian String dalam Pemilihan Anggota Sebuah Organisasi

BAB I PENDAHULUAN Latar Belakang

Penerapan Algoritma Pencocokan String Boyer-Moore dan Knuth-Morris-Pratt (KMP) dalam Pencocokkan DNA

BAB I PENDAHULUAN I.1. Latar Belakang [1] [2] [3] [4] [5]

BAB 2 TINJAUAN PUSTAKA

Penerapan Algoritma Pencocokan String dalam Perangkat Lunak Pemblokir Akses Situs Negatif

Penerapan Algoritma Transversal pada Graf dan Algoritma Pencocokan String dalam Sistem Jual-Beli Tiket Bioskop

BAB 2 LANDASAN TEORI

Perbandingan Penggunaan Algoritma BM dan Algoritma Horspool pada Pencarian String dalam Bahasa Medis

Kombinasi Algoritma Pattern Matching dan BFS-DFS pada aplikasi Music Discovery

Penerapan String Matching pada Fitur Auto Correct dan Fitur Auto Text di Smart Phones

ANALISIS STRING MATCHING PADA JUDUL SKRIPSI DENGAN ALGORITMA KNUTH-MORRIS PRATT (KMP)

Aplikasi Algoritma BFS dan String Matching pada Tag Suggestions di Facebook


String Matching Dalam Permainan The Hunt for Gollum

Aplikasi String Matching dalam Analisis Cap Bibir

BAB 2 TINJAUAN PUSTAKA

Penerapan Pencocokan String dalam Aplikasi Duolingo

Modifikasi String dan Pattern untuk Mempercepat Pencocokan Rantai Asam Amino pada Rantai DNA

PERANCANGAN APLIKASI TEXT EDITOR DENGAN MENERAPKAN ALGORITMA KNUTH-MORRIS-PRATT

Mencari Pola dalam Gambar dengan Algoritma Pattern Matching

Aplikasi String Matching Pada Fitur Auto-Correct dan Word-Suggestion

PERBANDINGAN ALGORITMA KNUTH-MORRIS-PRATT, STRING MATCHING ON ORDERED ALPHABET, dan BOYER-MOORE dalam PENCARIAN UNTAI DNA

BAB 2 LANDASAN TEORI

Pattern Matching dalam Aplikasi SimSimi

A. Pencocokan String Pencocokan string adalah cara untuk mencari sebuah teks

Aplikasi String Matching pada Plugin SMS Blocker untuk Validasi Pesan

Penerapan Algoritma Brute Force di Permainan Nonogram

Aplikasi Algoritma Pencocokan String dan Algoritma Runut Balik dalam Konversi Romaji ke Hangul

Pemanfaatan Algortima Boyer Moore dalam Penyaringan Teks Halaman Website Sederhana

Perbandingan Algoritma String Matching yang Digunakan dalam Pencarian pada Search Engine

Penerapan Algoritma Knuth-Morris-Pratt dalam Music Identification (Musipedia)

Pencocokan String dengan Algoritma Reverse Colussi

PENERAPAN ALGORITMA BACKTRACKING PADA PERMAINAN WORD SEARCH PUZZLE

Perbandingan Algoritma Knuth-Morris-Pratt dan Algoritma Boyer-Moore dalam Pencarian Teks di Bahasa Indonesia dan Inggris

Deteksi Plagiarisme Gambar menggunakan Algoritma Pencocokan Pola Rabin-Karp

Perbandingan Algoritma Brute Force dan Backtracking dalam Permainan Word Search Puzzle

Perbandingan dan Pengujian Beberapa Algoritma Pencocokan String

Penggunaan Algoritma Runut-balik Pada Pencarian Solusi dalam Persoalan Magic Square

BAB 2 LANDASAN TEORI

Artikel Ilmiah. Peneliti: Ditya Geraldy ( ) Prof. Dr. Ir. Eko Sediyono, M.Kom. Yos Richard Beeh., S.T., M.Cs.

PERBANDINGAN APLIKASI ALGORITMA BRUTE-FORCE DAN KOMBINASI ALGORITMA BREADTH FIRST SEARCH DAN GREEDY DALAM PENCARIAN SOLUSI PERMAINAN TREASURE HUNT

IMPLEMENTASI PROGRAM DINAMIS DENGAN ALGORITMA NEEDLEMAN-WUNSCH PADA PENSEJAJARAN DNA DAN PROTEIN

IMPLEMENTASI ALGORITMA BRUTE FORCE DALAM PENCARIAN DATA KATALOG BUKU PERPUSTAKAAN

Penerapan Algoritma Brute Force dan Backtracking pada Permainan Skycraper

BAB II LANDASAN TEORI

PENGGUNAAN EXHAUSTIVE SEARCH SEBAGAI SOLUSI PERMAINAN SCRAMBLE

Pengembangan Algoritma Boyer Moore

BAB 1 PENDAHULUAN. Universitas Sumatera Utara

BAB 1 PENDAHULUAN. 1.1 Latar Belakang

Menentukan Tingkat Kecocokan Teks Menggunakan Algoritma KMP

APLIKASI ALGORITMA KNUTH-MORRIS-PRATT DALAM CONTENT-BASED MUSIC INFORMATION RETRIEVAL

BAB 2 LANDASAN TEORI

Algoritma Exhaustive Search Dalam Permainan Congklak

Perbandingan Algoritma Brute Force dan Breadth First Search dalam Permainan Onet

BAB 2 LANDASAN TEORI

I. PENDAHULUAN II. DASAR TEORI. Contoh lainnya: Solusi: 0= V,1= I,2= O,3= R, 4= N,5= L,7= A,8= F,9= E.

Aplikasi Algoritma Brute Force Pada Knight s Tour Problem

Variasi-Variasi Algoritma Boyer-Moore dan perbandingannya dalam pencarian String

ALGORITMA RUNUT-BALIK UNTUK MENGGANTIKAN ALGORITMA BRUTE FORCE DALAM PERSOALAN N-RATU

ANALISIS PERBANDINGAN ALGORITMA BOYER-MOORE, KNUTH- MORRIS-PRATT, DAN RABIN-KARP MENGGUNAKAN METODE PERBANDINGAN EKSPONENSIAL

PERBANDINGAN ALGORITMA STRING SEARCHING BRUTE FORCE, KNUTH MORRIS PRATT, BOYER MOORE, DAN KARP RABIN PADA TEKS ALKITAB BAHASA INDONESIA

PERBANDINGAN ALGORITMA GREEDY DAN BRUTE FORCE DALAM SIMULASI PENCARIAN KOIN

Penggunaan Algoritma Boyer Moore untuk Memindai Berkas dari Virus

BAB I PENDAHULUAN. tanpa aturan-aturan yang baku. Sedangkan dalam pemasaran konvensional, barang

Strategi Algoritma Penyelesaian Puzzle Hanjie

DETEKSI PLAGIAT DOKUMEN MENGGUNAKAN ALGORITMA RABIN-KARP

Implementasi Algoritma KMP dan Boyer-Moore dalam Aplikasi Search Engine Sederhana

Implementasi Algoritma Greedy dalam Pembagian kerja pada Mesin yang Identik

APLIKASI PENENTUAN JENIS PART OF SPEECH MENGGUNAKAN METODE N-GRAM DAN STRING MATCHING

Analisis Plagiarisme dalam Dua Buah Lagu Yang Berbeda dengan Algoritma Pattern Matching

PENERAPAN ALGORITMA RUNUT BALIK DALAM PERMAINAN TEKA-TEKI SILANG

Kompleksitas Algoritma Pengurutan Selection Sort dan Insertion Sort

Penerapan Algoritma Greedy dalam Pencarian Rantai Penjumlahan Terpendek

Transkripsi:

ALGORITMA PENCARIAN STRING DENGAN ALGORITMA BRUTE FORCE, KNUTH-MORRIS-PRATT DAN ALGORITMA DUA ARAH Dwinanto Cahyo Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung Jalan Ganesha 10 Bandung dw_dn_cahyo@yahoo.com ABSTRAK Algoritma pencarian string (String Matching) 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 brute force yang merupakan algoritma paling sederhana, algoritma Knuth-Morris-Pratt, algoritma Boyer-Moore, algoritma dua jalur, algoritma Raita, algoritma quick search dan algoritma alpha skip. Kata kunci: algoritma pencarian string, brute force, Knuth-Morris-Pratt, algoritma dua jalur. 1. PENDAHULUAN 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. 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. 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 Boyer- Moore. 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 makalah ini dibahas tiga algoritma pencarian string, yaitu algoritma brute force, algoritma Knuth- Morris-Pratt dan algoritma dua jalur. 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 pada makalah ini : char* input, data teks sebagai sumber pencarian char* tes, pola string yang akan dicari int len_i, variabel jumlah karakter pada input MAKALAH IF2251 STRATEGI ALGORITMIK TAHUN 2007

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. 2. ALGORITMA BRUTE FORCE Algoritma brute force menggunakan metode pemeriksaan setiap karakter pada teks mulai dari posisi pertama hingga posisi ke (len_i len_t), jika terdapat kecocokan dengan awal pola yang dicari, maka dilakukan pergeseran pada pola satu karakter ke kanan. Kompleksitas waktu pada algoritma brute force secara umum adalah sebesar O(len_i*len_t), berikut bentuk implementasi algoritma brute force pada bahasa C: void BF2(char* input, char* tes) { int inp = 0; int ts; int found = 0; int len_i = getlenstr(input); /* pencarian */ while ((inp<=(len_i-len_t)) && (!found)) { ts = 0; while ((ts<len_t) && (tes[ts]==input[ts+inp])) { ts++; if (ts == (len_t)) { found = 1; else { inp++; kesamaan pola. Ketika ditemukan kesamaan dengan karakter pertama pada pola, pengulangan kedua dilakukan dengan while hingga akhir karakter pola atau tidak ditemukan lagi kesamaan karakter. Dengan tetap berpegang pada prinsip dasar algoritma brute force, kita dapat mempersingkat penulisan algoritma pencarian string tersebut menjadi: void BF(char *input, char *tes) { char *inp; /* pencarian */ for (inp=input; *input!=endstr; ++input) { if (memcmp(tes,input,len_t)==0){ output(input - inp); Implementasi di atas mempersingkat pengulangan yang sebelumnya dilakukan dengan dua buah while menjadi sebuah for. Dengan menggunakan fungsi memcmp() dan variabel inp, metode yang digunakan seruap dengan sebelumnya, namun kali ini yang dibandingkan adalah keseluruhan pola dengan tetap melakukan pergeseran ke satu posisi pemeriksaan pada data teks ke kanan jika belum ditemukan kesamaan. Perbedaan waktu eksekusi program antara implementasi pertama dengan kedua tidak terlalu besar pada jumlah data teks di bawah 10.000 karakter. Kekurangan bentuk implementasi tersebut adalah kurang bersifat umum, hal ini disebabkan penggunaan fungsi bawaan library bahasa C, yaitu memcmp() yang belum tentu tersedia di bahasa pemrograman lain. Serta bentuk pengulangan yang tidak biasa sehingga sedikit sulit dimengerti oleh beberapa orang yang belum memahami bahasa C. if (found) { output(inp); else { output(-1); Bentuk implementasi tersebut memberikan nilai posisi pertama yang merupakan awal kesamaan pola string pada data teks, dengan indeks pertama dimulai dari 0. Pemeriksaan dilakukan dengan melakukan pengulangan dari awal karakter teks menggunakan while hingga mencapai posisi (len_i-len_t) atau telah ditemukan Gambar 2.1 Ilustrasi pencarian string dengan algoritma brute force

3. ALGORITMA KNUTH-MORRIS- PRATT Algortima Knutt-Morris-Pratt dirancang dari hasil analisis terhadap algoritma Knutt-Morris dengan penambahan pada bagian prosedur awal atau yang juga dikenal dengan istilah fungsi pinggiran. Gambar 3.1 Ilustrasi pencarian string dengan algoritma Knutt-Morris-Pratt Dari gambar di atas tampak perbedaan jelas antara algoritma brute force dengan Knutt-Morris-Pratt dalam proses pencarian string, yaitu algoritma Knutt-Morris- Pratt tidak selalu melakukan pergeseran pola sebanyak satu karakter ke kanan, seperti yang dilakukan algoritma brute force. Karakteristik utama algoritma Knutt-Morris-Pratt adalah dibutuhkan sebuah tabel (array) yang berisi nilai pinggiran dari masing-masing karakter pada string tes. Tabel tersebut dibuat sebelum proses pencarian string dilakukan dengan sebuah prosedur terpisah. Nilai pinggiran suatu karakter pada sebuah string merupakan jumlah pengulangan susunan karakter dari awal string hingga karakter tersebut. Pembahasan mendetail mengenai nilai pinggiran berada di luar cakupan makalah ini sehingga tidak akan dibahas lebih lanjut. Selain itu, secara kompleksitas, algoritma Knutt-Morris- Pratt memiliki kompleksitas waktu yang lebih sedikit dibandingkan dengan algoritma brute force, yaitu untuk prosedur penyusunan tabel berisi nilai pinggiran adalah sebesar O(len_i)., sedangkan untuk prosedur pencarian string sebesar O(len_i+len_t). Berikut bentuk dasar implementasi dalam bahasa C: /* pembuatan array of nilai tepi */ void settepi2(char *tesx, int len_ix, int* arrkmp) { arrkmp[1] = 0 ; int q = 2; int k = 0; for (q=2; q<=len_ix; q++) { while ((k>0) && (tesx[q]!=tesx[k+1])) { k = arrkmp[k]; if (tesx[q] == tesx[k+1]) { k = k + 1; arrkmp[q] = k; /* pencarian string */ void finkmp2(char *input, char *tes) { int len_t = getlenstr(input); int len_i = getlenstr(tes); int inp, ts, found; int* arrkmp = (int*) malloc (len_t * sizeof(int)); settepi2(tes, len_i, arrkmp); ts = 0; inp = 1; found = 0; while ((inp<=len_t) && (!found)) { while ((ts>0) && (tes[ts+1]!=input[inp])) { ts = arrkmp[ts]; if (tes[ts+1] == input[inp]) { ts++; if (ts == len_i) { found = 1; else { inp++; if (found) { output(inp-len_i); else { output(-1); Secara garis besar, algortima Knutt-Morris-Pratt menggunakan tabel berisi nilai pinggiran untuk mengetahui nilai pergeseran pola. Setiap kali ditemui perbedaan karakter antara teks dengan karakter pola pada posisi ke (x+1), maka nilai pergeseran pola dihitung melalui pengurangan antara x dengan nilai pinggiran terbesar pada tabel dengan indeks [0..x], dengan posisi pergeseran dihitung dari posisi awal pola. x = posisi sebelum ditemukan perbedaan karakter b(x) = nilai pinggiran terbesar pada indeks [0..x] i = jumlah pergeseran i = x b(x) Kemudian, perbandingan selanjutnya dilakukan dimulai dari posisi ke i dihitung dari awal pola. Selanjutnya, dengan memberikan sedikit perubahan pada prosedur pencarian string dengan algoritma Knutt- Morris-Pratt, kita akan memperoleh bentuk implementasi sebagai berikut: /* pembuatan array of nilai tepi */ void prekmp(char *tes_x, int len_tx, int* arrkmp) { int i, j; i = 0; j = -1; arrkmp[0] = -1; while (i < len_tx) { while (j > -1 && tes_x[i]!= tes_x[j]) { j = arrkmp[j];

/* pencarian string */ void finkmp(char *input, char *tes) { int len_i = getlenstr(input); int i, j; int* arrkmp = (int*) malloc (len_t * sizeof(int)); /* pengisian array prekmp */ prekmp(tes, len_t, arrkmp); { /* algoritma pencarian */ i = 0; while (j < len_i) { while (i > -1 && tes[i]!= input[j]) i = arrkmp[i]; i++; j++; if (i >= len_t) { output(j-i+1); i = arrkmp[i]; Implementasi di atas memiliki sejumlah perbedaan metode dalam prosedur pengisian tabel nilai pinggir, kedua implementasi algoritma Knutt-Morris-Pratt tidak menggunakan fungsi atau prosedur dari library bahasa C, sehingga memungkinkan untuk diimplementasikan dalam bahasa pemrograman lain. Sama halnya seperti pada algoritma brute force, kedua bentuk implementasi tersebut tidak memberikan perbedaan yang besar dalam waktu eksekusi ketika digunakan pada karakter berjumlah di bawah 10.000. 4. ALGORITMA DUA JALUR Kedua algoritma yang dijelaskan sebelumnya, yaitu algoritma brute force dan algoritma Knutt-Morris-Pratt merupakan contoh algoritma pencarian string yang menggunakan metode pemeriksaan satu arah, yaitu dari kiri ke kanan. Algoritma dua jalur (Two Ways Algorythm) merupakan suatu bentuk algoritma pencarian string yang mengkombinasikan metode pemeriksaan dari kiri ke kanan dengan metode dari kanan ke kiri. Karakteristik algoritma dua jalan adalah bahwa pola x yang akan diperiksa dibagi menjadi dua bagian, yaitu xl dan xr, sehingga x = xl + xr. Oleh karena itu, diperlukan sebuah prosedur untuk menghasilkan pembagian pola yang baik dan memberikan efisiensi pada proses pencarian string. Sedangkan pada proses pencarian string itu sendiri, kedua bagian pola diproses secara bergantian, yaitu diawali dengan pemeriksaan pola bagian kanan (xr) dari arah kiri ke kanan, jika tidak ditemukan ketidakcocokan, proses akan dilanjutkan dengan pemeriksaan pola bagian kiri (xl) dari arah kanan ke kiri. Prosedur pembagian pola pada algoritma dua jalan memiliki kompleksitas waktu senilai O(len_i), sedangkan proses pencarian string memiliki kompleksias waktu O(len_t). Dengan total operasi perbandingan pada kasus terburuk adalah sejumlah 2len_i-len_t. Berikut implementasi algoritma dua jalan pada bahasa C /* prosedur pembagi pola */ int maxsuf(char *tesx, int len_tx, int *p) { int ms, j, k; char a, b; ms = -1; while (j + k < len_tx) { a = tesx[j + k]; b = tesx[ms + k]; if (a < b) { j += k; *p = j - ms; else if (a == b) { if (k!= *p) { ++k; else { j += *p; else { /* a > b */ ms = j; j = ms + 1; return(ms); int maxsuftilde(char *tesx, int len_tx, int *p) { int ms, j, k; char a, b; ms = -1; while (j + k < len_tx) { a = tesx[j + k]; b = tesx[ms + k]; if (a > b) { j += k; *p = j - ms; else if (a == b) { if (k!= *p) { ++k; else { j += *p; else { /* a < b */ ms = j; j = ms + 1; return(ms);

/* algoritma dua jalan */ void TW(char *inp, char *tes) { int i, j, ell, memory, p, per, q; int m = getlenstr(tes); int n = getlenstr(inp); /* Persiapan */ i = maxsuf(tes, m, &p); j = maxsuftilde(tes, m, &q); if (i > j) { ell = i; per = p; else { ell = j; per = q; /* Pencarian */ if (memcmp(tes, tes+per, ell+1)==0) { memory = -1; while (j <= n-m) { i = max(ell, memory) + 1; while (i<m && (tes[i]==inp[i+j])) { ++i; if (i >= m) { i = ell; while (i>memory && (tes[i]==inp[i+j])) { --i; if (i <= memory) { output(j); j += per; memory = m - per - 1; else { j += (i - ell); memory = -1; else { per = max(ell+1, m-ell-1) + 1; while (j <= n - m) { i = ell + 1; while (i<m && (tes[i]==inp[i+j])) { ++i; if (i >= m) { i = ell; while (i>=0 && tes[i]==inp[i+j]) { --i; if (i < 0) { output(j); j += per; else { j += (i - ell); w adalah akhiran xl atau xl adalah akhiran w w adalah awalan xr atau xr adalah awalan w Dengan kata lain,w akan muncul pada kedua sisi antara xl dan xr. Jumlah pengulangan minimum yang timbul disebut dengan periode lokal dan dinotasikan dengan per(xl,xr), ketika nilai pengulangan antara kedua hasil pembagian pola adalah sama dengan nilai per(xl,xr), maka kondisi tersebut disebut faktorisasi kritis dari x dan nilai tersebut yang dibutuhkan dalam pemrosesan algoritma dua jalan. Untuk menghitung nilai faktorisasi kritis, kita perlu menghitung maksimal akhiran dari x dengan arah dari kiri dan sebaliknya, kemudian baru dipilih nilai maksimum diantara keduanya sebagai faktorisasi kritis. Penggunaan algoritma dua jalan ini telah diuji cona dan hasilnya ketika menggunakan karakter lebih dari 10.000, diperlukan waktu yang mendekati waktu yang dbutuhkan oleh algoritma Knutt-Morris-Pratt. 5. KESIMPULAN Algoritma pencarian string merupakan salah satu komponen penting dalam pemrosesan string dan juga digunakan sebagai dasar dari berbagai aplikasi perangkat lunak khususnya sebagai bentuk dasar transfer data. menghasilkan posisi tempat terjadinya pengulangan suatu pola string dalam string yang lebih panjang. Beberapa algoritma yang dianggap mangkus dan tergolong sering dipelajari adalah algoritma Knutt-Morris- Pratt dan algoritma dua jalan, masing-masing menggunakan metode pemeriksaan string yang berbeda dalam konteks arah. Kemudian, terdapat pula algoritma dasar dan tergolong kurang efektif, yaitu algoritma brute force. REFERENSI [1] http://www-igm.univ,mlv.fr, diakses pada tanggal 14 Mei 2007 pukul 15.30. [2] http://en.wikipedia.org/wiki/algorythm, diakses pada tanggal 19 Mei 2007 pukul 12.30. [3] Rinaldi Muni. Diktat Kuliah Strategi Algoritmik. Program Studi Teknik Informatika ITB: 2007. Dengan pembagian xl dan xr, maka pengulangan antara xl dan xr yang berupa w akan ada jika dan hanya jika kondisi berikut terpenuhi: