Algoritma Boyer-Moore Perancangan Fitur Autocomplete pada Aplikasi Kamus Istilah Teknologi Informasi Menggunakan Algoritma Boyer-Moore

text selanjutnya pada pencarian kedua algoritma akan memeriksa pada y 1 yang dilakukan dari kanan ke kiri seperti yang ditunjukkan pada gambar 2.5. Gambar 2.4 Pencocokan pada pattern y 2 dimulai dari karakter paling kiri Gambar 2.5 Pencocokan pada pattern y 1 dimulai dari karakter paling kanan

2.4 Algoritma Boyer-Moore

Algoritma Boyer-Moore dipublikasikan pada tahun 1977 oleh Robert S. Boyer dan J. Strother Moore pada tahun 1997. Algoritma Boyer-Moore dianggap sebagai algoritma pencocokan string yang paling efisien pada aplikasi umum, karena sering diimplementasikan pada text editors untuk perintah “ search ” dan “ subtitute ” Charras Lecroq, 2001. Algoritma ini kemudian dikembangkan menjadi beberapa varian, diantaranya Turbo Boyer-Moore, Tuned Boyer-Moore, Hoorspol dan Zhu-Takaoka. Dan dari hasil penilitan yang dilakukan oleh Sagita 2013, disimpulkan bahwa algoritma Boyer- Moore memiliki waktu pencarian tercepat dari varian Boyer-Moore lainnya. Dimana algoritma Turbo Boyer-Moore merupakan algoritma tercepat kedua dan yang paling lambat adalah algoritma Tuned Boyer-Moore. Algoritma Boyer-Moore melakukan pencocokan dimulai dari karakter yang paling kanan hingga karakter paling kiri pattern . Jika terjadi ketidakcocokan antara karakter paling kanan pattern dengan karakter pada text yang dicocokkan, maka Universitas Sumatera Utara karakter pada pattern akan diperiksa satu persatu untuk mendeteksi apakah ada karakter pada text tersebut yang sama dengan karakter pada pattern . Apabila terjadi kecocokan, maka pattern akan digeser sedemikian rupa sehingga posisi karakter yang sama antara pattern dan text terletak sejajar. Secara sistematis, langkah-langkah yang dilakukan algoritma Boyer-Moore pada saat mencocokkan string adalah sebagai berikut Soleh, 2011 : a. Algoritma mulai mencocokkan pattern pada awal text . b. Algoritma ini akan mencocokkan karakter per karakter dari kanan ke kiri pattern dengan karakter di text yang bersesuaian, sampai salah satu kondisi berikut dipenuhi : i. Karakter pada pattern dan pada text yang dibandingkan tidak cocok mismatch . ii. Semua karakter di pattern cocok. Kemudian algoritma akan memberitahukan penemuan di posisi ini. c. Algoritma kemudian menggeser pattern dengan memaksimalkan nilai pergeseran good-suffix dan pergeseran bad-character , lalu mengulangi langkah 2 sampai pattern berada diujung text . Tabel pergeseran bad-character dan good-suffix dapat dihitung dengan kompleksitas waktu dan ruang sebesar O n + σ dengan σ adalah besar ruang alfabet. Sedangkan pada fase pencarian, algoritma ini menemukan semua kemunculan dari pattern dengan panjang n di dalam text sepanjang m dengan waktu O nm . Pada kasus terburuk, algoritma ini akan melakukan 3 m pencocokan karakter, namun pada performa terbaiknya algortima ini hanya akan melakukan O n m pencocokan Charras Lecroq, 2001. 2.4.1 Pergeseran Bad-Character Misal, terjadi ketidakcocokan antara karakter y [ i ] = b pada pattern dengan karakter x [ i + j ] = a pada text selama pencocokan terjadi pada posisi j . Lalu, y [ i + 1 .. n – 1] = x [ i + j + 1 .. j + n – 1] = v dan y [ i ] ≠ x [ i + j ]. Pergeseran bad-character terdiri dari menyejajarkan karakter x [ i + j ] pada text dengan kemunculan paling kanan karakter tersebut pada pattern , proses ini dapat dilihat pada gambar 2.6. Apabila karakter a tidak muncul pada pattern dan tidak ada kemunculan salah satu karakter pada pattern di text termasuk karakter a , maka pattern akan digeser sampai karakter paling kiri Universitas Sumatera Utara pada pattern sejajar dengan karakter setelah x [ i + j ], yaitu x [ i + j + 1 ], seperti yang dapat dilihat pada gambar 2.7 Charras Lecroq, 2001. Gambar 2.6 Pergeseran bad-character , a muncul pada y Gambar 2.7 Pergeseran bad-character , tidak ada kemunculan a pada y Pada tabel bad-character , setiap karakter pada pattern diberi nilai sesuai dengan ukuran jauhnya karakter tersebut dari karakter paling kanan dari pattern dan untuk karakter yang tidak terdapat pada pattern akan diberi nilai sejumlah karakter pada pattern . Adapun pseudocode untuk pergeseran bad-character ini adalah sebagai berikut : Procedure preBmBc input y : array[0..n-1]of char, input n : integer, inputoutput bmBc : array of integer Deklarasi i:integer Algoritma for i=0; iASIZE; ++i bmBc[i]  n for i=0; i n - 1; ++i bmBc[y[i]]  n – i – 1; Universitas Sumatera Utara 2.4.2 Pergeseran Good-Suffix Misal, terjadi ketidakcocokan antara karakter y [ i ] = b pada pattern dengan karakter x [ i + j ] = a pada text selama pencocokan terjadi pada posisi j . Lalu, y [ i + 1 .. n – 1] = x [ i + j + 1 .. j + n – 1] = v dan y [ i ] ≠ x [ i + j ]. Pergeseran good-suffix terdiri dari menyejajarkan potongan x[i + j + 1.. j + n – 1] = y [ i + 1.. n – 1] dengan kemunculan paling kanan potongan tersebut pada y yang didahului oleh karakter yang berbeda dari y [ i ], dapat dilihat pada gambar 2.8. Apabila tidak ada potongan seperti itu, pergeseran dilakukan dengan menyejajarkan akhiran terpanjang u pada v dengan awalan dari y yang sama dengan akhiran u tersebut, seperti pada gambar 2.9 Charras Lecroq, 2001. Gambar 2.8 Pergeseran good-suffix , v muncul didahului oleh karakter c Gambar 2.9 Pergeseran good-suffix , hanya akhiran dari v yang muncul pada y Pada tabel pergeseran good-suffix , nilai pergeseran digunakan ketika ketidakcocokan ditemukan berdasarkan karakter pada posisi keberapa yang menyebabkan ketidakcocokan. Nilai dari setiap karakter yang ada pada pattern bergantung terhadap ada atau tidaknya perulangan akhiran suffix v dari text pada pattern . Semakin banyak perulangan, maka akan semakin kecil nilai pergeseran. Untuk menentukan nilai-nilai tersebut, lebih dahulu menghitung nilai tabel suffix yang bertujuan untuk memberi tanda adanya perulangan akhiran. Dari tabel suffix inilah tabel good-suffix akan didapat. Universitas Sumatera Utara Pada tabel suffix , berisi nilai dari tiap karakter yang ada pada pattern yang menunjukkan ada atau tidaknya perulangan akhiran suffix dan dimana posisi perulangan tersebut sehingga ketika proses perhitungan tabel good-suffix dapat diketahui seberapa banyak pergeseran yang akan dilakukan untuk pencocokan selanjutnya. Adapaun pseudocode untuk pergeseran good-suffix adalah sebagai berikut : Procedure suffixes input y: array[0..n-1] of char, input n: integer, inputoutput suff: array of integer Deklarasi f, g, i : integer Algoritma suff[n-1]  n; g  n-1 for i = n-2; i = 0; --i ifi g and suff[i + n – 1 - f] i-gdo suff[i]  suff[i + n – 1 - f]; else ifigdo g  i; f = i whileg = 0 and y[g] == y[g + n – 1 - f]do --g; suff[i]  f-g; endif endfor procedure preBmGs input y: array of char, input n:integer, inputoutput bmGs: array of integer Deklarasi i, j : integer suff : array [0..YSIZE] of integer Algoritma suffixesy, n, suff Universitas Sumatera Utara for i=0; i n; ++ido bmGs [i]  n for i= n-1; i = -1; --1 ifi == -1 or suff[i] == i+1 forj=0; j n-1-i; ++j ifbmGs[j] == n bmGs[j]  n-1-i for i=0; i = n-2; ++i bmGs[n-1-suff[i]]  n-1-i Setelah diperoleh nilai-nilai pada tabel bad-character dan tabel good-suffix , selanjutnya algoritma Boyer-Moore akan menggunakan nilai maximum antara nilai pergeseran bad-character dan nilai pergeseran good-suffix untuk melakukan pergeseran window pada saat pencocokan berlangsung. Proses pencocokan string dengan algoritma Boyer-Moore ini dapat dilihat dalam pseudocode berikut : procedure BM input y: array[0..n-1] of char, input n:integer, input x: array of[0..m-1] char, input m:integer Deklarasi i, j : integer bmGs : array [0..YSIZE] of integer bmBc : array [0..ASIZE] of integer Algoritma Preprocessing preBmGsy, n, bmGs preBmBcy, n, bmBc searching j = 0 whilej = m-n fori= n-1; i = 0 and y[i] == x[i+j]; --i ifi 0 OUTPUTj j  j + bmGs[0] else j  j + MAXbmGs[i], bmBc[x[i+j]]- n + 1 + i endif endwhile Universitas Sumatera Utara Perhitungan dengan algoritma Boyer-Moore dapat dilihat pada contoh berikut ini. Contoh : Pattern y = “comp”  n = 4 Text x = “host computer” a. Perhitungan pergeseran bad-character i 1 2 3 c c o m p BmBc [ c ] 3 2 1 4 Nilai pergeseran pada tabel didapat dengan perhitungan sebagai berikut : BmBc [ y [ i ]] = n – 1 – i BmBc [ y [0]] = 4 – 1 – 0 = 3 BmBc [ y [1]] = 4 – 1 – 1 = 2 BmBc [ y [2]] = 4 – 1 – 2 = 1 BmBc [ y [3]] = 4 – 1 – 3 = 0 Dan untuk karakter selain yang terdapat pada pattern , karakter tersebut bernilai sejumlah karakter pattern yaitu 4. b. Perhitungan pergeseran good suffix Berdasarkan perhitungan sesuai pseudocode pergeserannya, didapat nilai untuk tabel good-suffix sebagai berikut : i 1 2 3 c c o m p suff [ i ] 4 BmGs [ i ] 4 4 4 1 c. Pencocokan pattern dengan text i 1 2 3 c c o m p BmBc [ c ] 3 2 1 4 BmGs [ i ] 4 4 4 1 - Universitas Sumatera Utara Pencocokan 1 : c o m p BmBc [t] = 4 BmGs [3] = 1 Maka pergeserannya, max1, 4 = 4 Pencocokan 2 : c o m p BmBc [ m ] = 1 BmGs [3] = 1 Maka pergeserannya, max1, 1 = 1 Pencocokan 3 : c o m p Pada pencocokan ke-3, pattern ditemukan pada indeks ke-5 pada text .

2.5 Penelitian Terdahulu