Implementasi Algoritma Pecocokan String Colussi Pada Aplikasi Kamus Biologi Berbasis Android

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= 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 = 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