Algoritma Boyer-Moore Mobile Forensic Dalam Menemukan Sms Yang Telah Dihapus Pada Handphone Android Dengan Menggunakan Algoritma Boyer-Moore

shift ke kanan teks. Prosedur ini dilakukan secara berulang - ulang sampai window berada pada akhir teks, atau pada posisi terkanan teks. Gambar 2.7. Ilustarsi windows sliding Algoritma string matching mempunyai tiga komponen utama Crochemore et al, 1996, sebagai berikut : 1. Pattern, yaitu deretan karakter yang akan dicocokan dengan teks, pattern diasumsikan dengan x = x[0...m-1], dengan m adalah panjang pattern. 2. Teks, yaitu deretan karakter yang akan dicoba kecocokannya dengan pattern, teks diasumsikan dengan y=y[0...n-1], dengan y adalah panjang teks. 3. Alfabet, berisi semua simbol yang digunakan pada teks dan pattern, diasumsikan dengan ∑ , dan ASIZE sebagai ukurannya.

2.5. Algoritma Boyer-Moore

Algoritma Boyer Moore termasuk salah satu algoritma yang memiliki kinerja yang lebih baik dalam melakukan pencarian string khususnya dalam jenis data ASCII, biner dan heksadesimal Dermawan, 2001. Algoritma ini melakukan pencocokan string dari kanan ke kiri, karakter yang berada paling kanan pada string merupakan karakter pertama yang akan dicocokan dengan teks atau pattern Boyer et al, 1977. Algoritma ini menggunakan dua fungsi shift untuk mengambil jumlah langkah pergeseran berikutnya ketika terjadi Teks Window shift Window ketidakcocokan, dua fungsi shift tersebut adalah bad-character shift atau occurrence shift dan good-suffix shift atau heuristic shift Choudhary et al, 2012. 2.5.1. Deskripsi kerja algoritma Boyer-Moore Deskripsi kerja algoritma boyer moore dapat dijelaskan dengan membuat sebuah contoh kasus ketidakcocokan pada saat pencocokan karakter pada teks dan pattern berlangsung. Karakter pattern x[i]=a tidak cocok dengan karakter teks y[i+j]=b saat pencocokan pada posisi j. Maka x[i+l .. m-1]= y[i+j+1 .. j+m-1]=u dan x[i] ≠ y[i+j] Choudhary et al, 2012. Maka dari kasus ketidakcocokan tersebut diambil langkah pergeseran selanjutnya dengan memilih jumlah pergeseran yang paling besar antara bad-character shift dan good-suffix shift, hingga karakter pada teks y[i+j] memenuhi karakter yang ada pada pattern x[i]. 2.5.2 Bad-Character Shift Bad-character adalah karakter yang ada pada teks y[i+j] yang tidak cocok dengan karakter pada pattern x Crochemore et al, 1996. Sehingga jumlah pergeseran maksimum bad-character shift dapat diambil dari jumlah pattern x[i]. Konsep dari fungsi bad-character shift adalah sebagai berikut : 1. Jika bad-character y[i+j] terdapat pada pattern di posisi terkanan k yang lebih kiri dari x[i] maka pattern digeser ke kanan sejauh i-k. Seperti diberikan pada Gambar 2.8. y b u x a u shift x b Contains no b Gambar 2.8. Bad-character shift, b terdapat di pattern x 2. Jika bad-character y[i+j] tidak ada pada pattern sama sekali, maka pattern dapat digeser ke kanan sejauh jumlah i. Hal ini ditunjukan pada Gambar 2.9. y b u x a u shift x Contains no b Gambar 2.9. Bad-character shift, b tidak ada di pattern x 3. Jika bad-character y[i+j] terdapat pada pattern di posisi terkanan k yang lebih kanan dari x[i] maka pattern seharusnya digeser sejauh i-k yang hasilnya negatif. Maka bila kasus ini terjadi akan diabaikan, karena pergeseran selanjutnya dari algoritma boyer-moore akan diambil jumlah pergeseran yang baling besar Cantone et al, 2010. 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; 2.5.3. Good-suffix shift Good-suffix merupakan jumlah pergeseran yang dihitung berdasarkan posisi di mana ketidakcocokan terjadi. Aturan pada good-suffix shift dijelaskan sebagai berikut : 1. Good-suffix shift merupakan pergeseran yang dibutuhkan dari x[i]=a ke karakter lain yang letaknya lebih kiri dari x[i] dan terlektak di sebelah kiri segmen u seperti pada Gambar 2.10. y b u x a u shift x c u Gambar 2.10. Good-suffix shift, u terjadi lagi didahului karakter c berbeda dari a 2. Jika tidak ada segmen yang sama dengan u, maka cari u yang merupakan suffiks terpanjang u. Dalam hal ini ditunjukan pada Gambar 2.11. y b u x a u shift x v Gambar 2.11. Good-suffix shift, hanya suffix dari u yang terjadi ladi di pattern x 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 akhiransuffix 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. 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 preBmG 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 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 2.5.4. Cara kerja algoritma Boyer-Moore Pada kasus ketidakcocokan terjadi, algoritma akan membandingkan nilai pergeseran yang dimiliki oleh bad-character shift dan good-suffix shift, di mana nilai pergeseran yang memiliki nilai yang paling besar yang akan digunakan untuk melakukan pergeseran selanjutnya. Cara kerja dari algoritma Boyer-Moore dapat dijabarkan sebagai berikut : 1. Manjalankan terlebih dahulu prosedur preBmBc dan preBmGs untuk mendapatkan jumlah pergeseran. a. Menjalankan prosedur preprocessing Boyer-Moore bad-character preBmBc. Prosedur ini untuk menjalankan fungsi menentukan berapa jumlah pergeseran yang dibutuhkan untuk mencapai karakter tertentu pada teks dari karakter pattern terakhir atau terkanan. Hasil dari prosedur preBmBc disimpan pada tebel BmBc. b. Menjalankan prosedur suffix, prosesdur suffix dijalankan untuk memeriksa kecocokan sejumlah karakter yang berada di posisi terakhir atau terkanan dengan sejumlah karakter yang dimulai dari setiap karakter yang lebih kiri dari karakter yang terkanan tadi. Hasil dari prosedur disimpan dalam tabel suffix. Suffix[i] mencatat panjang dari suffix yang cocok dengan segmen dari pattern yang diakhiri karakter ke-i. c. Menjalankan prosedur preprocessing Boyer-Moore good-suffix preBmGs. Prosedur ini dijalankan untuk mengetahui berapa banyak langkah pada pattern dari sebuah segmen ke segmen yang lain yang sama yang letaknya lebih kiri dengan karakter di sebelah kiri segmen yang berbeda. Prosedur preBmGs menggunakan tabel hasil dari prosedur suffix untuk mengetahui pasangan segmen yang sama. 2. Melakukan proses pencarian string dengan menggunakan hasil dari prosedur BmBc dan BmGs yaitu tabel BmBc dan BmGs. Dan melakukan perbandingan untuk menentukan jumlah pergeseran selanjutnya.

2.6. Penelitian Terdahulu