BAB 2 LANDASAN TEORI
2.1 Kamus Menurut Lauder (2005:223), “Kamus adalah sebuah karya yang berfungsi sebagai referensi. Kamus pada umumnya berupa senarai kata yang disusun secara alfabetis. Selain itu, disertakan pula informasi mengenai ejaan, pelafalan, kelas kata, makna kata, kadang kala sejarah kata, dan contoh pemakaian kata dalam kalimat (Widayati, 2011). 2.2 Android Android adalah sistem operasi yang sangat populer, sistem operasi ponsel berbasis Linux yang dikembangkan oleh Google. Android adalah sebuah proyek open source. Google secara aktif mengembangkan platform Android dengan memberikan porsi secara gratis untuk produsen hardware dan operator telepon yang ingin menggunakan Android (Karch, 2016). 2.3 Sejarah Android Perjalanan Android dimulai sejak Oktober 2003 ketika 4 orang pakar IT, Andi Rubin, Rich Minner, Nick Sears dan Chris White mendirikan Android.Inc, di California US. Visi Android untuk mewujudkan mobile device yang lebih peka dan mengerti pemiliknya, kemudian menarik raksasa dunia maya Google. Google kemudian mengakui sisi Android pada Agustus 2005. OS Android dibangun berbasis platform Linux yang bersifat open source, senada dengan Linux, Android juga bersifat Open Source. Dengan nama besar Google dan konsep open source pada OS Android, tidak membutuhkan waktu lama bagi android untuk bersaing dan menyisihkan Mobile OS lainnya seperti Windos Mobile, Blackberry dan iOS. Kini siapa yang tak kenal Android yang telah menjelma menjadi penguasa Operating System bagi Smartphone (Lengkong, 2015). 2.5 Visual Basic Visual Basic adalah salah satu bahasa pemrograman komputer. Bahasa pemrograman adalah perintah perintah yang dimengerti oleh komputer untuk melakukan tugas-tugas tertentu.
Universitas Sumatera Utara
7 Bahasa pemrograman Visual Basic, yang dikembangkan oleh Microsoft sejak tahun 1991, merupakan pengembangan dari pendahulunya yaitu bahasa pemrograman BASIC (Beginner’s All-purpose Symbolic Instruction Code) yang dikembangkan pada era 1950-an. Visual Basic merupakan salah satu Development Tool yaitu alat bantu untuk membuat berbagai macam program komputer, khususnya yang menggunakan sistem operasi Windows. Visual Basic merupakan salah satu bahasa pemrograman komputer yang mendukung object (Object Oriented Programming = OOP) (Octovhiana, 2003). 2.6 Basic4Android Basic4android adalah development tool sederhana yang powerful untuk membangun aplikasi Android. Bahasa Basic4android mirip dengan Visual Basic dengan tambahan dukungan untuk objek. Aplikasi Android (APK) yang dicompile oleh Basic4Android adalah aplikasi Android native/asli dan tidak ada extra runtime seperti di Visual Basic yang ketergantungan file msvbvm60.dll, yang pasti aplikasi yang dicompile oleh Basic4Android adalah NO DEPENDENCIES (tidak ketergantungan file lain) (Seagrave, 2013). 2.7 Definisi Algoritma Algoritma adalah pola pikir yang terstruktur yang berisi tahapan penyelesaian suatu permasalahan, yang nantinya akan diimplementasikan ke dalam suatu bahasa pemograman (Kristanto, 2003). 2.7.1 Algoritma String Matching
2.7.1.1 Pentingnya Algoritma String Matching Pencocokan string adalah masalah klasik dalam ilmu Komputer. Pencocokan string dapat dijadikan sebagai solusi untuk banyak masalah. Misalnya dalam
mendeteksi plagiat,
keamanan informasi, pengenalan pola, dan pencocokan dokumen (Saikrishna, et al. 2012). 2.7.1.2 Pengertian String Matching (Pencocokan Karakter)
Pengertian string menurut Dictionary of Algorithms and Data Structures, National Institute of Standards and Technology (NIST) adalah susunan dari karakter-karakter (angka, alfabet atau karakter yang lain) dan biasanya direpresentasikan sebagai struktur dan array. String dapat berupa kata, frase, atau kalimat. Pencocokan string (string matching) merupakan bagian
Universitas Sumatera Utara
8 penting dari sebuah proses pencarian string (string searching) dalam sebuah dokumen. Hasil dari sebuah sebuah pencarian string dalam dokumen tergantung dari teknik dan cara pencocokan string yang digunakan (Buulolo, 2013). Pencocokan string secara garis besar dapat dibedakan menjadi dua yaitu pencocokan string secara eksak/sama persis (exact string matching) dan pencocokan string berdasarkan kemiripan (inexact string matching/fuzzy string matching). Pencocokan string berdasarkan kemiripan masih dapat dibedakan menjadi dua yaitu berdasarkan kemiripan penulisan (approximate string matching) dan berdasarkan kemiripan ucapan (phonetic string matching). Contoh phonetic string matching adalah kata step akan menunjukkan kecocokan dengan kata step, sttep, stepp, sstep, stepe, steb. Sedangkan bila kita menggunakan exact string matching kata step hanya akan menunjukkan kecocokan dengan kata step saja (Sagita & Prasetiyowati 2013). Pada proses algoritma pencocoka string (string matching) selalu terdapat pattern, teks, dan jendela yang mana pattern adalah sejumlah string yang akan dicari dalam teks, sedangkan teks adalah urutan dari simbol yang ingin dicari untuk mendapatkan pola, dan jendela adalah teks yang selaras dengan pola (Crochemore & Hancart 1998). Proses pencocokan antara teks dan pola tergantung pada perbandingan karakter dari jendela teks dan pola. Panjang jendela harus sama dengan panjang dari pola ketika melakukan perbandingan. Sebuah operasi perbandingan digunakan untuk menemukan kecocokan antara karakter jendela, teks dan pola. Proses pergeseran adalah gerakan karakter setelah operasi pencocokan dan akan berlanjut sampai karakter terakhir dari string teks. Algoritma pencocokan string yang tepat dibagi menjadi lima kelompok, yang telah ditandai dengan teknik yang berbeda. Kelompok-kelompok ini adalah : Clasic, Suffix automata, Bit paralelisme, Hashing dan Hybrid, (Abdulrazzaq, et al. 2013). Colussi merupakan kelompok dari Algoritma Classical Approach. Pendekatan ini menggunakan teknik klasik, yang membandingkan karakter dalam memecahkan masalah pencocokan string. Pendekatan klasik dikelompokkan menjadi enam jenis kelompok; Brute Force, Automata, Faktorisasi, Skip Search, Morris - Pratt, Boyer – Moore (Abdulrazzaq, et al. 2013).
Universitas Sumatera Utara
9 2.7.2 Algoritma Colussi Algoritma Colussi merupakan suatu pengembangan dari algoritma Knuth-Morris-Pratt. Algoritma Knuth-Morris-Pratt sendiri adalah algoritma pencocokan string dengan cara memelihara informasi karakter-karakter sebelumnya untuk melakukan jumlah pergesaran yang lebih jauh. Algoritma Knuth-Morris-Pratt diusulkan pada tahun 1977, perbandingan karakter dilakukan dari kiri ke kanan (Hussain, et al. 2013). Sedangkan Algoritma Colussi dipublikasikan oleh Livio Colussi pada tahun 1994 (Abdulrazzaq, et al. 2013). Pada algoritma colussi himpunan dari posisi pola dibagi menjadi dua sub himpunan terpisah. Lalu percobaan pencocokan berlangsung selama dua fase: • Fase pertama: Perbandingan dilakukan dari kiri ke kanan pada teks yang terletak pada posisi yang sama • Fase kedua: Membandingkan posisi-posisi yang tersisa (dari arah kanan ke kiri) (Alapati & Mannava 2011). Strategi ini memberikan dua kelebihan, yaitu: Ketika terjadi ketidak cocokan pada fase pertama, maka setelah terjadi pergeseran tidak perlu untuk membandingkan teks pada percobaan sebelumnya (Charras & Lecroq). 2.7.3 Proses pencarian Pattern menggunakan algoritma Colussi Secara sistematis, proses yang dilakukan algoritma Colussi pada saat mencocokkan string adalah sebagai berikut : 1. Pencocokan pattern dan teks dimulai dari karakter yang pertama. 2. Proses pencocokan akan dimulai sesuai dengan nilai pada nilai h[i], jika pada nilai h[i] dimulai dari angka 1 maka proses pencocokan dimulai dari kolom indeks yang ke 1 dan selanjutnya sampai nilai h[i] yang terakhir. 3. Jika karakter pada teks dan pattern sama, maka proses pencocokan akan berlanjut pada karakter selanjutnya, namun jika karakter pada teks dan pattern tidak sama maka proses pencocokan string akan berpindah pada langkah pencarian selanjutnya. 4. Jika karakter pada teks dan pattern sama dari kiri ke kanan, dan selalu sama sampai nilai indeks yang ke m-1, maka algoritma colussi akan melakukan penccokan kembali dari kanan ke kiri, sesuai dengan nilai h[i]. 5. Jika proses pencocokan menggunakan pergeseran melalui nilai h[i] mencapai nilai h[i] yang terakhir, maka pattern yang diinginkan telah didapat atau sesuai.
Universitas Sumatera Utara
10 Cara melakukan pergeseran dengan menggunakan algoritma Colussi adalah sebagai berikut : Teks : DIAN SARTINI Pattern (yang ingin dicari) : SARTINI. Tabel yang digunakan untuk proses pergeseran: Tabel 2.1 Tabel PreColussi I
0
1
2
3
4
5
6
7
x[i]
S
A
R
T
I
N
I
*
hmax[i]
0
1
2
3
4
5
6
7
kmin[i]
0
1
2
3
4
5
6
0
rmin[i]
7
0
0
0
0
0
0
h[i]
1
2
3
4
5
6
0
shift[i]
1
2
3
4
5
6
7
Tanda (*) pada tabel diatas adalah untuk mewakili string selain dari string yang ada pada teks dan pattern. Cara mendapatkan angka pada tabel diatas adalah sebagai berikut : Nilai hmax [i] Fungsi hmax disebut juga sebagai fungsi special position, yang mana fungsi ini menjadi patokan utama untuk mencari nilai dari fungsi yang lain seperti kmin, rmin, h, dan shift. Jika nilai dari fungsi hmax berubah maka semua nilai dari kmin, rmin, h, dan shift akan berubah. Cara mendapatkan nilai hmax adalah sebagai berikut Tabel 2.2 Proses Perhitungan hmax [i] i = k = 1 do while (x[i] == x[i - k]) i++ hmax[k] = i q = k + 1 while (hmax[q - k] + k < i) hmax[q] = hmax[q - k] + k q++ k = q if (k == i + 1) while (k<= m)
i = k = 1 do while (x[1] == x[1 - 1]) i++ hmax[1] = 1 q = 1 + 1 while (hmax[2 - 1] + 1 < 1) hmax[q] = hmax[q - k] + k q++ 2 = 2 if (2 == 1 + 1)
Universitas Sumatera Utara
11 i = k = 2 do while (x[2] == x[2 - 2]) i++ hmax[2] = 2 q = 2 + 1 while (hmax[3 - 2] + 2 < 2) hmax[q] = hmax[3 - 2] + 2 q++ 3 = 3 if (3 == 2 + 1)
i = k = 3 do while (x[3] == x[3 - 3]) i++ hmax[3] = 3 q = 3 + 1 while (hmax[4 - 3] + 3 < 3) hmax[q] = hmax[4 - ] + k q++ 4 = 4 if (4 == 3 + 1)
i = k = 4 do while (x[4] == x[4 - 4]) i++ hmax[4] = 4 q = 4 + 1 while (hmax[5 - 4] + 4 < 4) hmax[q] = hmax[q - k] + k q++ 5 = 5 if (5 == 4 + 1)
i = k = 5 do while (x[5] == x[5 - 5]) i++ hmax[5] = 5 q = 5 + 1 while (hmax[6 - 5] + 5 < 5) hmax[q] = hmax[q - k] + k q++ 6 = 6 if (6 == 5 + 1)
i = k = 6 do while (x[6] == x[6 - 6]) i++ hmax[6] = 6 q = 6 + 1 while (hmax[7 - 6] + 6 < 6) hmax[q] = hmax[q - k] + k q++ 7 = 7 if (7 == 6 + 1)
i = k = 7 do while (x[7] == x[7 - 7]) i++ hmax[7] = 7 q = 6 + 1 while (hmax[7 - 6] + 6 < 6) hmax[q] = hmax[q - k] + k q++ 7 = 7 if (7 == 6 + 1)
Nilai kmin[i] Fungsi kmin disebut juga sebagai fungsi pembantu untuk mendapatkan nilai non special position (rmin). Cara mencari kmin Tabel 2.3 Proses Perhitungan kmin [i] for (i = m, i >= 1, --i) if (hmax[i] < m) kmin[hmax[i]] = i
i = 7 if (hmax[7] < m) 7 < 7 ? TIDAK 0
Universitas Sumatera Utara
12 i = 6 if (hmax[6] < 7) 6 < 7 ? YA kmin[hmax[6]] = 7 kmin[6] = 6 i = 4 if (hmax[4] < 7) 4 < 7 ? YA kmin[hmax[4]] = 4 kmin[4] = 4 i = 2 if (hmax[2] < 7) 2 < 7 ? YA kmin[hmax[2]] = 2 kmin[2] = 2
i = 5 if (hmax[5] < 7) 5 < 7 ? YA kmin[hmax[5]] = 5 kmin[5] = 5 i = 3 if (hmax[3] < 7) 3 < 7 ? YA kmin[hmax[3]] = 3 kmin[3] = 3 i = 1 if (hmax[1] < 7) 1 < 7 ? YA kmin[hmax[1]] = 7 kmin[1] = 7
Nilai rmin[i] Fungsi rmin adalah untuk menampung nilai special position (hmax) Cara mencari nilai rmin adalah sebagai berikut Tabel 2.4 Proses Perhitungan rmin [i] for (i = m – 1, i >= 0, --i) if (hmax[i + 1] == m) r = i + 1 if (kmin[i] == 0) rmin[i] = r else rmin[i] = 0
i = 6 if (hmax[6 + 1] == 7) 7 == 7 r = 6 + 1 r = 7 if (kmin[6] == 0) 6 == 0 ? TIDAK rmin[6] = 0
i = 5 if (hmax[5 + 1] == 7) 6 == 7 ? TIDAK if (kmin[5] == 0) 5 == 0 ? TIDAK rmin[5] = 0
i = 4 if (hmax[4 + 1] == 7) 5 == 7 ? TIDAK if (kmin[4] == 0) 4 == 0 ? TIDAK rmin[4] = 0
i = 3 if (hmax[3 + 1] == 7) 4 == 7 ? TIDAK if (kmin[3] == 0) 3 == 0 ? TIDAK rmin[3] = 0
i = 2 if (hmax[2 + 1] == 7) 3 == 7 ? TIDAK if (kmin[2] == 0) 2 == 0 ? TIDAK rmin[2] = 0
i = 1 if (hmax[1 + 1] == 7) 2 == 7 ? TIDAK if (kmin[1] == 0) 1 == 0 ? TIDAK rmin[1] = 0
i = 0 if (hmax[0 + 1] == 7) 1 == 7 ? TIDAK if (kmin[0] == 0) 0 == 0 ? YA rmin[0] = 7
Universitas Sumatera Utara
13 Nilai h[i] Fungis dari nilai h digunakan untuk melakukan pengecekan dan pencocokan data, karna proses pengecekan dan pencocokan pada algoritma Colussi bergantung dengan nilai h yang didapat. Cara mencari nilai h[i] adalah : Tabel 2.5 Proses Perhitungan h [i] s := -1 r := m for (i = 0 i < m ++i) if (kmin[i] == 0) h[--r] := i else h[++s] := i nd := s
s = -1 r = 7 i = 0 if (kmin[0] == 0) 0 == 0 ? YA h[6] = 0
i = 1 if (kmin[1] == 0) 1 == 0 ? TIDAK h[-1 + -1] = 1 h[0] = 1 i = 3 if (kmin[3] == 0) 3 == 0 ? TIDAK h[1 + 1] = 2 h[2] = 3 i = 5 if (kmin[5] == 0) 5 == 0 ? TIDAK h[3 + 1] = 5 h[4] = 5
i = 2 if (kmin[2] == 0) 2 == 0 ? TIDAK h[0 + 1] = 1 h[1] = 2 i = 4 if (kmin[4] == 0) 4 == 0 ? TIDAK h[2 + 1] = 3 h[4] = 3 i = 6 if (kmin[6] == 0) 6 == 0 ? TIDAK h[4 + 1] = 6 h[5] = 6 nd = 5
Nilai shift[i] Nilai shift digunakan pada saat melakukan pergeseran nilai shift ditentukan menggunakan kmin [h[i]] dan rmin [h[i]] Tabel 2.6 Proses perhitungan nilai shift[i] [i] = 0
[i] = 1
[i] = 2
[i] = 3
Shift [0] = kmin[h0]
Shift [1] = kmin[h1]
Shift [2] = kmin[h2]
Shift [3] = kmin[h3]
=1
=2
=3
=4
[i] = 4
[i] = 5
[i] = 6
Shift [4] = kmin[h4]
Shift [5] = kmin[h5]
Shift [6] = rmin[h6]
=5
=6
=7
Universitas Sumatera Utara
14 Setelah mendapatkan hasil yang diperoleh dari tabel pergeseran maka pencocokan kata dapat dilakukan dengan langkah-langkah berikut :
Tabel 2.7 Langkah pertama pergeseran dan pencocokan karakter i
0
1
2
3
T
D
I
A
N
P
S
A
R
T
h[i]
4
I
5
6
7
8
9
10
11
S
A
R
T
I
N
I
N
I
1
i = Indeks , T = Text, P = Pattern
Proses pencocokan dimulai sesuai dengan nilai h[i ] yang mana pada tabel 2.1 yang dibahas sebelumnya nilai h[i] adalah 1,2,3,4,5,6,0. Maka proses pencocokan dilakukan pada nilai h(i) ke 1 yang terdapat pada indeks ke 1
Dikarenakan pada urutan pencocokan indeks ke 1 string antara teks dan pattern berbeda, maka langkah pertama berhenti sampai indeks ke 1 yaitu antara I dan A.
Pindah 1 karakter ke langkah selanjutnya, yang mana pada nilai shift, angka 1 berada pada indeks yang ke 0, maka langkah selanjutnya : Pindah 1 karakter (shift[0]).
Tabel 2.8 Langkah kedua pergeseran dan pencocokan karakter i
0
1
2
3
T
D
I
A
N
S
A
R
1
2
P h[i]
4
T
5
6
7
8
9
10
11
S
A
R
T
I
N
I
I
N
I
Pergeseran dimulai dari karakter selanjutnya yaitu antara I dan S, dan pencocokan dilakukan sesuai dengan nilai h[i] yaitu 1,2,3,4,5,6,0 yang mana pada tabel diatas ditunjukkan antara karakter A dan A, dikarenakan A dan A “SAMA” maka lanjut ke nilai h[i] selanjutnya yaitu pada karakter N dan R, dikarenakan N dan R adalah karakter yang berbeda, maka langkah kedua telah selesai.
Pindah 2 karakter ke langkah selanjutnya, yang mana pada nilai shift, angka 2 berada pada indeks yang ke 1, maka langkah selanjutnya : Pindah 2 karakter (shift[1]).
Universitas Sumatera Utara
15
Tabel 2.9 Langkah ketiga pergeseran dan pencocokan karakter i
0
1
2
3
T
D
I
A
N
P
S
h[i]
4
A
5
6
7
8
9
10
11
S
A
R
T
I
N
I
R
T
I
N
I
1
Dikarenakan pencocokan pada tabel diatas karakter antara teks dan pattern berbeda, maka langkah ketiga berhenti di spasi dan karakter A
Pindah 1 karakter ke langkah selanjutnya, yang mana pada nilai shift, angka 1 berada pada indeks yang ke 0, maka langkah selanjutnya : Pindah 1 karakter (shift[0]). Tabel 2.10 Langkah keempat pergeseran dan pencocokan karakter i
0
1
2
3
T
D
I
A
N
P
4
S
h[i]
5
6
7
8
9
10
11
S
A
R
T
I
N
I
A
R
T
I
N
I
1
Dikarenakan pencocokan pada tabel diatas karakter antara teks dan pattern berbeda, maka langkah keempat berhenti di karakter S dan A
Pindah 1 karakter ke langkah selanjutnya, yang mana pada nilai shift, angka 1 berada pada indeks yang ke 0, maka langkah selanjutnya : Pindah 1 karakter (shift[0]) Tabel 2.11 Langkah kelima pergeseran dan pencocokan karakter i
0
1
2
3
T
D
I
A
N
4
5
6
7
8
9
10
11
S
A
R
T
I
N
I
P
S
A
R
T
I
N
I
h[i]
7
1
2
3
4
5
6
Jika dilihat pada tabel 2.18 atau langkah kelima pattern telah ditemukan.
Pencocokan dimulai dari nilai h[i] yang pertama yaitu 1 pada tabel diatas nilai h[i] ke 1 terdapat di karakter antara A dan A, jika sama maka lanjut ke karakter selanjutnya dan akan diberi nilai h[i] 2 begitu seterusnya, sampai habis panjang pattern, jika
Universitas Sumatera Utara
16 belum ditemukan maka algoritma colussi melakukkan pencarian kembali yaitu dari kanan ke kiri yang dicontohkan pada tabel diatas yaitu karakter S dan S dengan posisi h[i] yang terakhir yaitu 0
Oleh karna itu proses pencocokan karakter menggunakan algoritma Colussi telah selesai dan berhenti pada langkah kelima. Dan berikut adalah pseudocode algoritma Colussi pada tahap pencarian.
Procedure ColussiSerach( input m,n : integer, input P : array[0..n-1] of char, input T : array[0..n-1] of char, output ketemu : array[0..n-1] of boolean ) Deklarasi : i, j, nd, last : integer h : array[0..n] of integer shift : array[0..n] of integer next : array[0..n] of integer Algoritma : i := j := 0 last := -1 while (j <= n - m) do while (i < m and last < j + h[i] and x[h[i]] == y[j + h[i]]) i++ if (i >= m || last >= j + h[i]) { ketemu(j) i = m } if (i > nd) last := j + m - 1 j := shift[i] i := next[i]
Universitas Sumatera Utara