Perbandingan Algoritma Knuth Morris Pratt dan Boyer Moore pada Aplikasi Kamus Bahasa Indonesia-Korea Berbasis Android

(1)

LAMPIRAN

LISTING PROGRAM <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.vici.kamusindo_korea.PencarianFragment"> <!-- TODO: Update blank fragment layout -->

<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#e0ddff"> <View android:id="@+id/view" android:layout_width="match_parent" android:layout_height="2dp" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/textView" android:layout_marginLeft="30dp" android:layout_marginRight="80dp"

android:background="@color/colorPrimaryDark" /> <View android:id="@+id/view2" android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true"

android:background="@color/colorPrimary" /> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/textView2" android:layout_centerHorizontal="true" android:layout_marginBottom="20dp" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="35dp" android:background="@drawable/bg_edit_text" android:hint="Ketik disini..." android:inputType="text" android:textAlignment="center" fragment_pencarian.xml


(2)

android:textColor="@android:color/white" android:textColorHint="#b4b4b4"

android:textSize="22sp" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/view" android:layout_alignStart="@+id/view" android:layout_marginBottom="7dp" android:layout_marginTop="7dp" android:text="Indonesia" android:textColor="#b4cdff" android:textSize="34sp" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignEnd="@+id/view" android:layout_alignRight="@+id/view" android:layout_below="@+id/textView" android:text="Korea" android:textColor="@color/colorPrimaryDark" android:textSize="30sp" />

<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/editText" android:orientation="horizontal"> <Button android:id="@+id/bt_kmp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="2dp" android:layout_weight="1" android:background="@drawable/bg_button" android:text="KMP" android:textColor="@android:color/white" android:textSize="18sp" />

<Button android:id="@+id/bt_bm" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="2dp" android:layout_weight="1" android:background="@drawable/bg_button" android:text="BM" android:textColor="@android:color/white" android:textSize="18sp" />


(3)

<android.support.design.widget.FloatingActionButton android:id="@+id/fab1"

android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right|top"

android:src="@android:drawable/stat_notify_sync" /> </FrameLayout>

package com.vici.kamusindo_korea; import android.app.Fragment;

import android.app.ProgressDialog; import android.content.Intent; import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.Bundle;

import android.support.design.widget.FloatingActionButton; import android.util.Log;

import android.view.LayoutInflater; import android.view.View;

import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast;

public class PencarianFragment extends Fragment { View view;

SQLiteOpenHelper helper; SQLiteDatabase db;

Cursor cursor;

private ProgressDialog pDialog; String state = "Indo-Korea"; public PencarianFragment() {

// Required empty public constructor }

@Override

public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {

// Inflate the layout for this fragment view =

inflater.inflate(R.layout.fragment_pencarian,container,fal se);

final TextView tv_indo =(TextView) view.findViewById(R.id.textView); final TextView tv_korea = (TextView) view.findViewById(R.id.textView2); final EditText et_input = (EditText) view.findViewById(R.id.editText);

Button bt_kmp = (Button) view.findViewById(R.id.bt_kmp); PencarianFragment.java


(4)

Button bt_bm = (Button) view.findViewById(R.id.bt_bm); helper = new

DatabaseOpenHelper(getActivity().getBaseContext()); cursor = null;

bt_kmp.setOnClickListener(new View.OnClickListener() { @Override

public void onClick(View view) {

String pat = et_input.getText().toString(); if (pat.equals("")) {

Toast.makeText(getActivity(), "Masukan Masih Kosong", Toast.LENGTH_SHORT).show();

} else {

Intent i = new Intent(getActivity(), Hasil_KMP_Activity.class);

et_input.setText(""); i.putExtra("pat", pat); i.putExtra("state", state); startActivity(i);

} });

bt_bm.setOnClickListener(new View.OnClickListener() { @Override

public void onClick(View view) {

String pat = et_input.getText().toString(); if (pat.equals("")) {

Toast.makeText(getActivity(), "Masukan Masih Kosong", Toast.LENGTH_SHORT).show();

} else {

Intent i = new Intent(getActivity(), Hasil_BM_Activity.class);

et_input.setText(""); i.putExtra("pat", pat); i.putExtra("state", state); startActivity(i);

} });

FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab1);

fab.setOnClickListener(new View.OnClickListener() { @Override

public void onClick(View view) {

String temp = tv_indo.getText().toString(); tv_indo.setText(tv_korea.getText().toString());

tv_korea.setText(temp);

if (state.equals("Indo-Korea")) state = "Korea-Indo"; else state = "Indo-Korea";

} });


(5)

}

package com.vici.kamusindo_korea;

import android.content.DialogInterface; import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.Bundle;

import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar;

import android.support.v7.app.AlertDialog;

import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar;

import android.text.Html; import android.util.Log; import android.view.MenuItem; import android.view.View;

import android.widget.AdapterView; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; import java.util.List;

public class Hasil_KMP_Activity extends AppCompatActivity { View view;

SQLiteOpenHelper helper; SQLiteDatabase db;

Cursor cursor;

double wMulai, wSelesai, wTotal; public int jum = 0, jumB = 0; String pat, state;

List<Result> resultList = new ArrayList<>(); private ListView listView;

private CustomListAdapter adapter; String temp;

String[] TB = {"tbKamusFull"}; @Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_hasil__kmp_); getSupportActionBar().setDisplayHomeAsUpEnabled(true);//button balik

getSupportActionBar().setHomeButtonEnabled(true);//button balik getSupportActionBar().setTitle("Hasil Pencarian..."); pat = getIntent().getStringExtra("pat");

state = getIntent().getStringExtra("state"); getSupportActionBar().setSubtitle(pat);

listView = (ListView) findViewById(R.id.list); adapter = new CustomListAdapter(this, resultList); listView.setAdapter(adapter);

listView.setOnItemClickListener(new Hasil_KMP_Activity.java


(6)

AdapterView.OnItemClickListener() { @Override

public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String a, b;

String indonya = ((TextView)

view.findViewById(R.id.indonya)).getText().toString(); String koreanya = ((TextView)

view.findViewById(R.id.koreanya)).getText().toString(); ImageView imgnya = ((ImageView)

view.findViewById(R.id.imageView1));

ImageView imageView = new ImageView(getApplicationContext()); imageView.setImageDrawable(imgnya.getDrawable());

if (state.equals("Indo-Korea")) { a = "Indonesia \t: ";

b = "Korea \t\t: "; } else {

b = "Indonesia \t: "; a = "Korea \t\t: "; }

AlertDialog dialog = new

AlertDialog.Builder(Hasil_KMP_Activity.this) .setView(imageView)

.setTitle("Terjemahan") .setCancelable(false)

.setMessage(Html.fromHtml(a + "<b>" + indonya + "</b>" + "<br/>" + b + "<b>" + koreanya + "</b><br/>"))

.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override

public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).create(); dialog.show(); } });

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);

fab.setOnClickListener(new View.OnClickListener() { @Override

public void onClick(View view) {hasil(); }

});

pat = getIntent().getStringExtra("pat"); pat = pat.toLowerCase();

state = getIntent().getStringExtra("state"); wMulai = System.currentTimeMillis();

startSearch(pat, state);


(7)

temp = String.valueOf(wTotal); }

public void hasil() {

AlertDialog dialog = new

AlertDialog.Builder(Hasil_KMP_Activity.this) .setTitle("Hasil Knuth Morris Pratt") .setMessage(Html.fromHtml(

"\nWaktu \t: " + temp + " ms" + "<br>Jumlah \t: " + jumB + " ditemukan"

))

.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override

public void onClick(DialogInterface dialog, int which) { dialog.dismiss();

}

}).create(); dialog.show();

}

public void startSearch(String pattern, String states) { String txt, txtIndo, txtKorea;

helper = new DatabaseOpenHelper(this);//ambil dtbase cursor = null;

db = helper.getReadableDatabase();//read dibaca tnp dirubah

resultList.clear(); jumB = 0;

for (int nama_tabel = 0; nama_tabel < TB.length; nama_tabel++) {

cursor = db.rawQuery("SELECT * FROM " + TB[nama_tabel] + " ORDER BY INDO ASC; ", null); if (cursor != null) {

try {

cursor.moveToFirst(); do {

if (states.equals("Indo-Korea")) {

txtIndo = txt = cursor.getString(1); txtKorea = cursor.getString(2); } else {

txtIndo = txt = cursor.getString(2); txtKorea = cursor.getString(1); }

//start

KMP_start(txt, pattern, txtIndo, txtKorea, cursor.getBlob(3));

} while (cursor.moveToNext()); } catch (Exception e) {

Log.d("Print", "catch startSearch"); }

} } try {

adapter = new CustomListAdapter(this, resultList); listView.setAdapter(adapter);


(8)

Log.d("Print", "catch update list"); }

db.close(); }

// Knuth Morris Pratt static String txt; static String patt; static String Indo; static String Korea; static byte[] Image; static char[] x; static char[] y; static int n; static int m;

static int[] kmpNext;

public void KMP_start(String getTxt, String getPatt, String getIndo, String getKorea, byte[] getImage) {

txt = getTxt; patt = getPatt; Indo = getIndo; Korea = getKorea; Image = getImage;

x = patt.toCharArray(); y = txt.toCharArray(); n = txt.length(); m = patt.length();

kmpNext = new int[m + 1]; KMP();

}

public static void preKmp() { int i, j;

i = 0;

j = kmpNext[0] = -1; while (i < m) {

while (j > -1 && x[i] != x[j]) { j = kmpNext[j];

} i++; j++;

if (i < m && j < m && x[i] == x[j]) { kmpNext[i] = kmpNext[j];

} else {

kmpNext[i] = j; }

} }

public void KMP() { int i, j;

/* Pre-processing */ preKmp();


(9)

i = j = 0; while (j < n) {

while (i > -1 && x[i] != y[j]) { i = kmpNext[i];

} i++; j++;

if (i >= m) {

// System.out.println(" Result = " + (j - i)); int pos = (j - i);

i = kmpNext[i]; jumB++;

Result m = new Result(); m.setIndo(Indo); m.setKorea(Korea); m.setImage(Image); m.setPos(pos); m.setPat(patt); resultList.add(m);

Log.d("Print", "masuk KMP"); }

} }

@Override

public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId();

if (id == android.R.id.home) { this.finish();

return true; }

return super.onOptionsItemSelected(item); }

}

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="com.vici.kamusindo_korea.Hasil_KMP_Activity"> <include layout="@layout/content_hasil__kmp_" />

<android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin"

android:src="@android:drawable/ic_dialog_info" /> </android.support.design.widget.CoordinatorLayout>


(10)

package com.vici.kamusindo_korea;

import android.content.DialogInterface; import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.Bundle;

import android.support.design.widget.FloatingActionButton; import android.support.v7.app.AlertDialog;

import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar;

import android.text.Html; import android.util.Log; import android.view.MenuItem; import android.view.View;

import android.widget.AdapterView; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; import java.util.List;

public class Hasil_BM_Activity extends AppCompatActivity { View view;

SQLiteOpenHelper helper; SQLiteDatabase db;

Cursor cursor;

double wMulai, wSelesai, wTotal; public int jum = 0, jumB = 0; String pat, state;

List<Result> resultList = new ArrayList<>(); private ListView listView;

private CustomListAdapter adapter; String temp;

String[] TB = {"tbKamusFull"}; @Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_hasil__bm_);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);//button balik

getSupportActionBar().setHomeButtonEnabled(true);//button balik getSupportActionBar().setTitle("Hasil Pencarian..."); pat = getIntent().getStringExtra("pat");

state = getIntent().getStringExtra("state"); getSupportActionBar().setSubtitle(pat);

listView = (ListView) findViewById(R.id.list); adapter = new CustomListAdapter(this, resultList);


(11)

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String a, b;

String indonya = ((TextView)

view.findViewById(R.id.indonya)).getText().toString(); String koreanya = ((TextView)

view.findViewById(R.id.koreanya)).getText().toString(); ImageView imgnya = ((ImageView)

view.findViewById(R.id.imageView1));

ImageView imageView = new ImageView(getApplicationContext()); imageView.setImageDrawable(imgnya.getDrawable());

if (state.equals("Indo-Korea")) { a = "Indonesia \t: ";

b = "Korea \t\t: "; } else {

b = "Indonesia \t: "; a = "Korea \t\t: "; }

AlertDialog dialog = new

AlertDialog.Builder(Hasil_BM_Activity.this) .setView(imageView) .setTitle("Terjemahan") .setCancelable(false)

.setMessage(Html.fromHtml(a + "<b>" + indonya + "</b>" + "<br/>" + b + "<b>" + koreanya + "</b><br/>")) .setPositiveButton("OK", new

DialogInterface.OnClickListener() { @Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss(); } }).create(); dialog.show(); } });

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);

fab.setOnClickListener(new View.OnClickListener() { @Override

public void onClick(View view) { hasil();

} });

pat = getIntent().getStringExtra("pat"); pat = pat.toLowerCase();


(12)

wMulai = System.currentTimeMillis(); startSearch(pat, state);

wSelesai = System.currentTimeMillis(); wTotal = wSelesai - wMulai;

temp = String.valueOf(wTotal); }

public void hasil() { AlertDialog dialog = new

AlertDialog.Builder(Hasil_BM_Activity.this) .setTitle("Hasil Boyer Moore") .setMessage(Html.fromHtml(

"\nWaktu \t: " + temp + " ms" + "<br>Jumlah \t: " + jumB + " ditemukan"

))

.setPositiveButton("OK", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) { dialog.dismiss();

}

}).create(); dialog.show();

}

public void startSearch(String pattern, String states) { String txt, txtIndo, txtKorea;

helper = new DatabaseOpenHelper(this); cursor = null;

db = helper.getReadableDatabase(); resultList.clear();

jumB = 0;

for (int nama_tabel = 0; nama_tabel < TB.length; nama_tabel++) {

cursor = db.rawQuery("SELECT * FROM " + TB[nama_tabel] + " ORDER BY INDO ASC; ", null); if (cursor != null) {

try {

cursor.moveToFirst(); do {

if (states.equals("Indo-Korea")) {

txtIndo = txt = cursor.getString(1); txtKorea = cursor.getString(2); } else {

txtIndo = txt = cursor.getString(2); txtKorea = cursor.getString(1); }

//start

BM_start(txt, pattern, txtIndo, txtKorea, cursor.getBlob(3));

} while (cursor.moveToNext()); } catch (Exception e) {

Log.d("Print", "catch startSearch"); }


(13)

try {

adapter = new CustomListAdapter(this, resultList); listView.setAdapter(adapter);

} catch (Exception e) {

Log.d("Print", "catch update list"); }

db.close(); }

//Boyer Moore

static String txtB; static String patB; static char[] xB; static char[] yB; static int nB; static int mB;

static String IndoB; static String KoreaB; static byte[] ImageB;

static int[] suf = new int[256]; static int[] bmBc = new int[256]; static int[] bmGs = new int[256];

public void BM_start(String getTxt, String getPat, String getIndo, String getKorea, byte[] getImage) {

txtB = getTxt; patB = getPat; IndoB = getIndo; KoreaB = getKorea; ImageB = getImage;

xB = patB.toCharArray(); yB = txtB.toCharArray(); nB = txtB.length(); mB = patB.length(); BM();

}

public static void preBmBc() { for (int i = 0; i < 256; ++i) { bmBc[i] = mB;

}

for (int i = 0; i < mB - 1; ++i) { bmBc[xB[i]] = mB - i - 1; }

}

public static void suffixes() { int f = 0;

int g;

suf[mB - 1] = mB; g = mB - 1;

for (int i = mB - 2; i >= 0; --i) {

if (i > g && suf[i + mB - 1 - f] < i - g) { suf[i] = suf[i + mB - 1 - f];

} else {


(14)

g = i; }

f = i;

while (g >= 0 && xB[g] == xB[g + mB - 1 - f]) { --g;

}

suf[i] = f - g; }

} }

public static void preBmGs() { suffixes();

for (int i = 0; i < mB; ++i) { bmGs[i] = mB;

}

int j = 0;

for (int i = mB - 1; i >= 0; --i) { if (suf[i] == i + 1) {

for (; j < mB - 1 - i; ++j) { if (bmGs[j] == mB) { bmGs[j] = mB - 1 - i; }

} } }

for (int i = 0; i <= mB - 2; ++i) { bmGs[mB - 1 - suf[i]] = mB - 1 - i; }

}

public void BM() { int i, j;

/* Pre-processing */ preBmGs();

preBmBc(); /* Searching */ j = 0;

while (j <= nB - mB) {

for (i = mB - 1; i >= 0 && xB[i] == yB[i + j]; --i) ;

if (i < 0) {

//System.out.println(" Result = " + j); int pos = j;

j += bmGs[0];//

jumB++;//menmpung nilai yg uda ditemukan Result m = new Result();

m.setIndo(IndoB); m.setKorea(KoreaB); m.setImage(ImageB); m.setPos(pos); m.setPat(patB);


(15)

} else {

j += Math.max(bmGs[i], bmBc[yB[i + j]] - mB + 1 + i);

} } }

@Override

public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId();

if (id == android.R.id.home) { this.finish();

return true;//true maka eksekusi nya berjalan }

return super.onOptionsItemSelected(item); }

}

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.CoordinatorLayout

xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"

android:layout_height="match_parent" android:fitsSystemWindows="true"

tools:context="com.vici.kamusindo_korea.Hasil_BM_Activity"> <include layout="@layout/content_hasil__bm_" />

<android.support.design.widget.FloatingActionButton android:id="@+id/fab"

android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end"

android:layout_margin="@dimen/fab_margin"

android:src="@android:drawable/ic_dialog_info" /> </android.support.design.widget.CoordinatorLayout>


(16)

DAFTAR RIWAYAT HIDUP

DATA PRIBADI

Nama Lengkap : Vici Indah Yana Jenis Kelamin : Perempuan

Tempat, Tanggal Lahir : Medan, 18 Agustus 1994

Alamat : Jl. Alumunium 2 No.11 Tanjung Mulia Medan

Agama : Islam

Telp/Hp : 0852 7627 4833

E-mail : indahyanavici@gmail.com

Pendidikan Terakhir : Universitas Sumatera Utara Medan, Fakultas Ilmu Komputer dan Teknologi Informasi. Jurusan S1 Ilmu Komputer

PENDIDIKAN FORMAL

1998 – 2000 : TK Swasta YWKA Medan 2000 – 2006 : SD Swasta YWKA Medan 2006 – 2009 : SMP Negeri 11 Medan 2009 – 2012 : SMA Negeri 7 Medan

2012 – 2016 : S1 Ilmu Komputer Universitas Sumatera Utara, Medan

PENDIDIKAN INFORMAL

2003 – 2007 : TPA/MDA Madrasah Al Mustaqiem, Medan 2005 – 2007 : Zahara English Course, Medan


(17)

PENGALAMAN ORGANISASI

 Wakil Ketua Pramuka SD Swasta YWKA Medan, 2002-2003

 Anggota Paduan Musik dan Suara SMP Negeri 11 Medan, 2006-2009

 Anggota PMR SMA Negeri 7 Medan, 2010-2011

 Anggota Kewirausahaan UKMI Al Khwarizmi Fasilkom-TI USU, 2012-2014

 Anggota KAM RABBANI, Fasilkom-TI USU, 2013-2014

PENGALAMAN KEPANITIAAN

 Anggota panitia konsumsi PORSENI, 2014

 Sekretaris panitia MEET AND GREET Kam Rabbani, 2014

 Anggota panitia konsumsi PMB, 2014

SEMINAR

 Seminar Nasional Literasi Informasi “SENARAI”, 2014

 Seminar Nasional (ILP2MI) IV “Pengenalan Kebudayaan Sumatera Utara”, 2013


(18)

Argakusumah, K.W. & Hansun, S. 2014. Implementasi Algoritma Boyer Moore Pada Aplikasi Kamus Kedokteran Berbasis Android. Jurnal Ultimatics 6(2): 71-72.

Bille, P. 2011. Fast searching in packed strings. Journal of Discrete Algorithm 9: 49-56.

Buulolo, E. 2013. Implementasi Algoritma String Matching dalam Pencarian Surat dan Ayat dalam Bible Berbasis Android. Jurnal Pelita Informatika

Budi Darma 3: 23-24.

Charras, C. & Lecroq, T. 2004. Handbook of Exact String-Matching Algorithms. King College Publications : Guernsey.

Cormen, T.H, Leiserson, C.E, Rivest, R.L. & Stein, C. 2009. Introduction to

Algorithms. 3th Edition. The MIT Press:England.

Effendi, D., Hartono, T. & Kurnaedi, A. 2013. Penerapan String Matching Menggunakan Algoritma Boyer-Moore pada Translator Bahasa Pascal ke C. Jurnal UNIKOM 11(2): 266.

Ervana, A. & Pertiwi, A. 2012. Implementasi Algoritma Pencocokan String pada Aplikasi Pengarsipan Berbasis Web. Jurnal Informatika 3(2): 3-4.

Franek, F., Jennings, C.G. & Smyth, W.F. 2007. A Simple fast hybrid pattern-matching algorithm. Journal of Discrete Algorithm 5: 628-695.

Hajar, T.I. 2015. Implementasi Algoritma Levenshtein Distance dan Boyer Moore untuk Fitur Autocomplete dan Autocorrect pada Aplikasi Katalog Perpustakaan Daerah Aceh Timur. Skripsi. Universitas Sumatera Utara. Kadir, A. & Heriyanto. 2005. Algoritma Pemograman menggunakan C++. Andi:

Yogyakarta.

Linhart, C. & Shamir, R. 2009. Faster pattern matching with character classes using prime number encoding. Journal of Computer and System Sciences 75: 155-162.

Nababan, A.A. 2015. Implementasi Algoritma Brute Force dan Algoritma Knuth Morris Pratt (KMP) dalam Pencarian Word Suggestion. Skripsi. Universitas Sumatera Utara.


(19)

Nugraha, D.W. 2012. Penerapan kompleksitas waktu Algoritma Prim untuk menghitung kemampuan komputer dalam melaksanakan perintah. Jurnal

Ilmiah Foristek 2(2):196-197.

Priyatna, R.D. 2015. Implementasi Algoritma Levenshtein Distance dan Knuth Morris Pratt dalam Fitur Word Completion Pada Search Engine. Skripsi. Universitas Sumatera Utara.

Safaat, N. 2015. Android Pemograman Aplikasi Mobile Smartphone dan Tablet

PC Berbasis Android. Revisi kedua. Informatika Bandung:Bandung.

Silitonga, Y. 2015. Implementasi Pembuatan Kamus Bahasa Batak Toba-Indonesia-Inggris menggunakan Algoritma Boyer-Moore pada Platform Android. Skripsi. Universitas Sumatera Utara.

Singla, N. & Garg, D. 2012. String matching algorithms and their applicability in various applications. International Journal of Soft Computing and

Engineering 1(6): 2231 – 2307.

Subandijo. 2011. Efisiensi Algoritma dan Notasi O-besar. Jurnal ComTech 2(2):850-858.

Suntoro, M. 2015. Implementasi Algoritma Pecocokan String Boyer-Moore dalam Pembuatan Contact Manager pada Platform Android. Skripsi. Universitas Sumatera Utara.

Susanto. 2014. Perancangan Aplikasi Kamus Istilah Latin Hewan dan Tumbuhan dengan Menerapkan Algoritma Boyer-Moore Berbasis Mobile. Jurnal

Informasi dan Teknologi Ilmiah (INTI) 4(3):88-90.

Wibowo, T., Wibowo, A. & Sari R.P. 2012. Pembuatan Aplikasi Untuk Mendeteksi Kebenaran Perintah Sql Query Menggunakan Metode Knuth-Morris Pratt (KMP). Jurnal Teknik Informatika 1(1):3-5.


(20)

ANALISIS DAN PERANCANGAN SISTEM

3.1 Analisis Sistem

Analisis sistem adalah sebuah teknik pemecahan masalah dimana sistem diuraikan menjadi komponen-kompenen dengan tujuan untuk mempelajari kinerja masing-masing komponen tersebut dalam mencapai tujuan sistem. Tahapan ini dilakukan agar pada saat proses perancangan aplikasi tidak terjadi kesalahan dan sistem dapat berjalan sesuai dengan tujuan utama. Ada dua tahapan analisis dalam tugas akhir ini yaitu analisis masalah dan analisis persyaratan. Analisis masalah untuk memahami kelayakan masalah dan analisis persyaratan untuk menjelaskan fungsi-fungsi yang ditawarkan dan mampu dikerjakan oleh sistem.

3.1.1 Analisis Masalah

Analisis masalah merupakan proses mengidentifikasi sebab dan akibat dibangunnya sebuah sistem agar sistem yang akan dibangun tersebut dapat berjalan sebagaimana mestinya sesuai dengan tujuan dari sistem itu. Selama ini jika seseorang ingin mempelajari bahasa asing,media yang digunakan untuk memperlancar penguasaan kosakatanya adalah melalui kamus. Aplikasi kamus didalam Smartphone tidak mencari kata secara manual. Tetapi dengan adanya fasilitas pencarian pada aplikasi kamus tersebut mempermudah user mendapatkan kata yang ingin dicarinya. Dengan memanfaatkan salah satu dari Algoritma String

Matching seperti Algoritma Knuth Morris Pratt dan Algoritma Boyer Moore, maka

mempermudah dan mempercepat pencarian kata dalam kamus.

Pencarian kata adalah masalah yang akan diselesaikan dengan menggunakan sistem ini. Untuk mengidentifikasi masalah tersebut digunakan diagram Ishikawa (fishbone diagram). Diagram Ishikawa berbentuk seperti ikan yang strukturnya terdiri dari kepala ikan (fish’s head) dan tulang-tulang ikan (fish’s


(21)

kepala ikan. Sedangkan tulang-tulang ikan menggambarkan penyebab-penyebab masalah tersebut. Diagram Ishikawa pada sistem ini dapat dilihat pada Gambar 3.1

Gambar 3.1 Diagram Ishikawa

Pada Gambar 3.1 dapat dilihat bahwa terdapat empat kategori penyebab masalah pada penelitian pencarian kata pada kamus Bahasa Asing dengan menggunakan Algoritma String Matching yang digambarkan dengan tanda panah yang mengarah ke tulang utama, yaitu berkaitan dengan pengguna (user), bahan (material), metode (method) dan media/alat yang terlibat (machine). Setiap detail penyebab masalah tersebut digambarkan dengan tanda panah yang mengarah ke masing-masing kategori.

3.1.2 Analisis Persyaratan

Untuk membangun sebuah sistem, perlu dilakukan sebuah tahap analisis persyaratan. Terdapat dua bagian pada analisis persyaratan, yaitu persyaratan fungsional dan persyaratan non-fungsional. Persyaratan fungsional mendeskripsikan aktivitas yang disediakan suatu sistem. Sedangkan Persyaratan nonfungsional mendeskripsikan fitur, karakteristik dan batasan lainnya.


(22)

3.1.2.1 Persyaratan Fungsional

Persyaratan fungsional disini mendeskripsikan tentang sistem yang disediakan. Terdapat beberapa hal yang menjadi persyaratan fungsional pada Aplikasi Kamus Bahasa Indonesia-Korea, antara lain :

1. Sistem melakukan pencocokan string melalui kata yang diinput oleh pengguna. 2. Sistem dapat menghasilkan kata terjemahan dari inputan yang dicari dengan

menggunakan Algoritma Knuth Morris Pratt dan Algoritma Boyer Moore 3. Sistem melakukan inputan dan hasil pencarian hanya berupa kata dan tidak

berupa kalimat

3.1.2.2 Persyaratan Non-Fungsional

Persyaratan non fungsional sistem merupakan karakteristik atau batasan yang menentukan kepuasan pada sebuah sistem seperti kinerja, kemudahan pengguna, biaya, dan kemampuan sistem bekerja tanpa mengganggu fungsionalitas sistem lainnya. Terdapat beberapa persyaratan non-fungsional yang harus dipenuhi diantaranya :

1. Performa

Sistem yang akan dibangun harus dapat menampilkan hasil pencarian yang sesuai dengan apa yang dicari.

2. Mudah digunakan

Sistem yang akan dibangun harus mudah digunakan (user friendly), artinya sistem ini akan mudah digunakan oleh user dengan tampilan yang sederhana dan dapat dimengerti.

3. Hemat biaya

Sistem yang dibangun tidak memerlukan perangkat tambahan ataupun perangkat pendukung lainnya yang dapat mengeluarkan biaya.

4. Kontrol

Sistem yang dibangun mampu menampilkan pesan ketika tidak ada inputan yang akan dicari.

5. Manajemen Kualitas

Sistem yang akan dibangun harus memiliki kualitas yang baik yaitu tidak mempersulit user untuk melakukan pencarian kata.


(23)

3.2 Pemodelan

Pemodelan sistem dilakukan untuk memperoleh gambaran cara kerja sistem dan tentang objek apa saja yang akan berinteraksi dengan sistem, serta hal-hal apa saja yang harus dilakukan oleh sebuah sistem sehingga sistem dapat berfungsi dengan baik sesuai dengan kegunaannya.

Pada penelitian ini digunakan UML (Unified Modeling Language) sebagai bahasa pemodelan untuk mendesain dan merancang aplikasi Kamus Bahasa Indonesia-Korea. Model UML yang digunakan antara lain Use Case Diagram,

Activity diagram, dan Sequence diagram.

3.2.1. Use Case Diagram

Use Case Diagram adalah sebuah diagram yang dapat merepresentasikan interaksi

yang terjadi antara user dengan sistem. Diagram use case ini mendeskripsikan siapa saja yang menggunakan sistem dan bagaimana cara mereka berinteraksi dengan sistem. Use Case Diagram dari sistem yang akan dibangun dapat ditunjukkan pada Gambar 3.2.


(24)

Didalam use case diagram dapat digambarkan bahwa terdapat 1(satu) orang aktor yang akan berperan yaitu user. Untuk memperoleh kata terjemahan maka user harus menentukan tipe terjemahan terlebih dahulu,seperti bahasa Indonesia-Korea atau bahasa Korea-Indonesia. Selanjutnya user harus memasukkan input berupa kata yang ingin diterjemahkan ke dalam search box. Selanjutnya user memilih Algoritma yang ingin digunakan antara Algoritma Knuth Morris Pratt dan Algoritma Boyer Moore. Setelah Algoritma dipilih lalu sistem akan melakukan pencarian dan menampilkan hasil terjemahan. Pada Proses Menentukan tipe terjemahan dapat dinyatakan dalam Tabel 3.1.

Tabel 3.1 Use Case Proses Menentukan tipe terjemahan

Name Menentukan tipe terjemahan

Actors User

Description Use Case ini mendeskripsikan proses menentukan tipe

terjemahan, seperti bahasa Indonesia-Korea atau bahasa Korea-Indonesia

Basic Flow User menentukan tipe terjemahan

Alternate Flow User dapat memilih bahasa Indonesia-Korea atau bahasa

Korea-Indonesia

Pre Condition User ingin menentukan tipe terjemahan

Post Condition User telah menetapkan tipe terjemahan

Pada Proses Input kata, dapat dinyatakan dalam Tabel 3.2 Tabel 3.2 Use Case Proses Input kata

Name Input kata

Actors User

Description Use Case ini mendeskripsikan penginputan kata yang ingin


(25)

Basic Flow User menginput kata

Alternate Flow -

Pre Condition User ingin menginput kata

Post Condition User mendapatkan hasil pencarian kata

Pada Proses Algoritma Knuth Morris Pratt, dapat dinyatakan dalam Tabel 3.3 Tabel 3.3 Use Case Proses Algoritma Knuth Morris Pratt

Name Algoritma Knuth Morris Pratt

Actors User

Description Use Case ini mendeskripsikan proses pencarian kata

menggunakan Algoritma Knuth Morris Pratt

Basic Flow User memilih Algoritma Knuth Morris Pratt

Alternate Flow User memilih Algoritma Boyer Moore

Pre Condition User ingin mencari kata

Post Condition User mendapatkan hasil pencarian kata

Pada Proses Algoritma Boyer Moore, dapat dinyatakan dalam Tabel 3.4 Tabel 3.4 Use Case Proses Algoritma Boyer Moore

Name Algoritma Boyer Moore

Actors User

Description Use Case ini mendeskripsikan proses pencarian kata

menggunakan Algoritma Boyer Moore

Basic Flow User memilih Algoritma Boyer Moore

Alternate Flow User memilih Algoritma Knuth Morris Pratt

Pre Condition User ingin mencari kata


(26)

3.2.2 Activity Diagram

Activity diagram adalah diagram aktivitas yang mendeskripsikan proses kerja

dalam sebuah sistem yang sedang berjalan. Activity diagram bertujuan untuk membantu memahami keseluruhan proses dan menggambarkan interaksi antara beberapa Use Case Diagram. Activity diagram dari sistem yang akan dibangun dapat ditunjukkan pada Gambar 3.3.

Gambar 3.3 Activity Diagram Sistem

Didalam Activity diagram dapat dijelaskan bahwa user harus menentukan tipe terjemahan terlebih dahulu,seperti bahasa Indonesia-Korea atau bahasa Korea-Indonesia. Lalu sistem menetapkan tipe terjemahan yang telah dipilih. Selanjutnya


(27)

user menginput kata yang ingin dicari. Lalu user memilih Algoritma untuk

melakukan pencarian kata. Maka sistem melakukan pemanggilan fungsi pada Algoritma yang telah dipilih. Lalu sistem akan menampilkan hasil pencarian sesuai dengan Algoritma yang telah dipilih.

3.2.3 Sequence Diagram

Sequence diagram adalah suatu diagram yang menggambarkan interaksi antar

objek pada sistem dalam sebuah urutan waktu atau rangkaian waktu. Sequence

diagram dari sistem yang akan dibangun dapat ditunjukkan pada Gambar 3.4

Gambar 3.4 Sequence Diagram Sistem

Pada tahap ini, yang dilakukan user adalah menentukan tipe terjemahan terlebih dahulu,seperti bahasa Indonesia-Korea atau bahasa Korea-Indonesia di tampilan menu. Lalu tampilan menu menetapkan tipe terjemahan yang telah dipilih. Selanjutnya yang dilakukan user adalah menginput kata yang ingin dicari dan memilih algoritma untuk melakukan pencarian, lalu akan memanggil fungsi Algoritma yang telah dipilih. Kemudian menampilkan hasil pencarian kata kepada


(28)

3.3 Pseudocode

3.3.1 Pseudocode Algoritma Knuth Morris Pratt

Algoritma Knuth Morris Pratt memiliki dua fungsi yaitu fungsi preKmp (pre Knuth

Morris Pratt) dan fungsi KMP (pencarian Knuth Morris Pratt). Pseudocode untuk

masing-masing fungsi ditunjukkan pada Tabel 3.5 dan Tabel 3.6 Tabel 3.5 Pseudocode preKmp

Tabel 3.6 Pseudocode KMP

procedure preKmp (x : array of char, m : integer, kmpNext : array of integer)

Deklarasi : i, j : integer

Algoritma : i := 0 j := -1

kmpNext[0] := -1; While (i < m)

While (j > -1 && x[i] <> x[j]) j := kmpNext[j]

EndWhile i := i + 1 j := j + 1 If (x[i] = x[j])

kmpNext[i] := kmpNext[j] Else

kmpNext[i] := j EndIf

EndWhile

procedure KMP (x:array of char, m:integer, y:array of char, n:integer)

Deklarasi : i, j : integer

kmpNext : array of integer

Algoritma :

preKmp(x, m, kmpNext) i := 0

j := 0

While (j < n)

While (i > -1 && x[i] <> y[j]) i := kmpNext[i] EndWhile

i := i + 1 j := j + 1 If (i >= m)

Write(j - i) i := kmpNext[i] EndIf


(29)

3.3.2 Pseudocode Algoritma Boyer Moore

Algoritma Boyer Moore memiliki empat fungsi yaitu fungsi suffix, fungsi prebmGs (pre Good-suffix shift), fungsi prebmBc (pre Bad-character suffix) dan fungsi BM (pencarian Boyer Moore). Pseudocode untuk masing-masing fungsi ditunjukkan pada Tabel 3.7, 3.8, 3.9, dan 3.10.

Tabel 3.7 Pseudocode suffix

Tabel 3.8 Pseudocode prebmGs

procedure suffixes (x:array of char, m:integer, suff:array of integer)

Deklarasi : f, g, i : integer

Algoritma :

suff[m - 1] := m g := m - 1

for i:= m-2 downto 0 do

If (i > g && suff[i + m - 1 - f] < i - g) suff[i] := suff[i + m - 1 - f] Else

If(i < g) g := i EndIf

f := i

While (g >= 0 && x[g] = x[g + m - 1 - f]) g := g - 1

EndWhile

suff[i] := f – g

EndIf EndFor

procedure preBmGs (x:array of char, m:integer, bmGs:array of integer)

Deklarasi : i, j : integer

suf : array of integer

Algoritma :

suffixes(x, m, suff)

For i := 0 to m-1 do bmGs[i] := m EndFor

j := 0

For i := m-1 downto -1 do

If (i = -1 || suff[i] = i+1) While (j < m-1-i)

If(bmGs[j] = m)

bmGs[j] := m-1-i EndIf

j := j + 1 EndWhile

EndIf EndFor

For i := 0 to m-2 do

bmGs[m - 1 - suff[i]] := m - 1 -i EndFor


(30)

Tabel 3.9 Pseudocode prebmBc

Tabel 3.10 Pseudocode BM

procedure preBmBc (x:array of char, m:integer, bmBc :array of integer)

Deklarasi : i : integer

Algoritma :

For i:= 0 to 255 do bmBc[i] := m EndFor

For i:= 0 to m-2 do

bmBc[x[i]] := m - i - 1 EndFor

procedure BM (x:array of char, m:integer, y:array of char, n:integer)

Deklarasi : i, j : integer

bmGs, bmBc : array of integer

Algoritma :

preBmGs(x, m, bmGs) preBmBc(x, m, bmBc)

j := 0

While (j <= n - m) i := m - 1

While( i >= 0 && x[i] = x[i + j] ) i := i - 1

EndWhile If (i < 0)

Write(j)

j := j + bmGs[0] Else

j := MAX(bmGs[i], bmbc[y[i + j]] - m + 1 + i) EndIf


(31)

3.4 Flowchart

Flowchart merupakan gambar atau bagan yang memperlihatkan urutan dan

hubungan antar proses beserta pernyataannya. Gambaran ini dinyatakan dengan simbol. Dengan demikian setiap simbol menggambarkan proses tertentu. Sedangkan antara proses digambarkan dengan garis penghubung. Flowchart yang akan dibangun dapat ditunjukkan pada Gambar 3.5, 3.6, dan 3.7

Gambar 3.5 Flowchart Gambaran Umum Sistem Kamus

Gambar 3.5 Menggambarkan alur sistem secara umum pada kamus Bahasa Indonesia-Korea, dimana user memilih tipe terjemahan seperti bahasa Indonesia-Korea atau bahasa Korea-Indonesia. Lalu user menginput kata yang ingin dicari. Selanjutnya user memilih Algoritma untuk pencarian kata. Maka sistem akan mencocokkan kata sesuai dengan Algoritma yang telah dipilih lalu sistem akan menampilkan hasil pencarian kata.


(32)

Gambar 3.6 Flowchart Algoritma Knuth Morris Pratt

Gambar 3.6 Menggambarkan alur pada proses pencarian Algoritma Knuth

Morris Pratt, dimana proses awal yang dilakukan yaitu memasukkan pola di dalam text yang tersedia. Proses pencarian dimulai dari karakter paling kiri ke kanan pattern. Setiap karakter akan dibandingkan satu per satu. Jika terjadi

ketidakcocokan, maka akan dicek nilai shift[i] dan bergeser sesuai dengan nilai

shift[i] seperti pada Tabel 2.1 Dan jika terjadi kecocokan maka mengeluarkan hasil


(33)

Gambar 3.7 Flowchart Algoritma Boyer Moore

Gambar 3.7 Menggambarkan alur pada proses pencarian Algoritma Boyer

Moore, dimana proses awal yang dilakukan yaitu memasukkan pola di dalam text

yang tersedia. Proses pencarian dimulai dari karakter paling kanan ke kiri pattern. Setiap karakter akan dibandingkan satu per satu. Jika terjadi ketidakcocokan, maka akan dicek nilai pergeseran yang dilakukan dengan melihat ke tabel bad-character

shift Tabel 2.4 dan good-suffix shift Tabel 2.3 Nilai terbesar yang didapat di antara

kedua tabel tersebut akan diambil dan pergeseran akan dilakukan sesuai dengan nilai tersebut. Dan jika terjadi kecocokan maka mengeluarkan hasil pencarian dan selesai.

Mulai

Masukkan pola

Pencocokan karakter dari kanan ke kiri

Apakah karakter cocok?

Bandingkan karakter per karakter

Geser pola berdasarkan tabel bmGs dan bmBc

Hasil pencarian kata

Selesai yes


(34)

3.5 Perancangan Antarmuka Sistem (Interface)

Proses perancangan antarmuka (interface) sebuah sistem adalah proses yang cukup penting dalam perancangan sebuah sistem. Merancang antarmuka merupakan bagian yang paling penting dari merancang sebuah sistem. Sebuah antarmuka harus dirancang dengan memperhatikan faktor pengguna sehingga sistem yang dibangun dapat memberikan kenyamanan dan kemudahan untuk digunakan oleh pengguna.

3.5.1 Rancangan Halaman Splash Screen

Halaman Splash Screen merupakan halaman yang pertama kali muncul pada saat sistem dibuka. Rancangan Splash Screen dapat dilihat pada Gambar 3.8

Gambar 3.8 Rancangan Splash Screen

Keterangan :

1. Splash Screen untuk menampilkan loading progress saat pertama kali membuka


(35)

3.5.2 Rancangan Navigation Drawer

Navigation Drawer terdiri dari Header, Beranda, Pencarian, Fitur, Bantuan,

Tentang, dan Keluar. Rancangan Navigation Drawer dapat dilihat pada Gambar 3.9

Gambar 3.9 Rancangan Navigation Drawer

Keterangan :

1. Header berisi Logo Kamus.

2. Menu Beranda berisi pembelajaran dasar huruf hangul. 3. Menu Pencarian untuk melakukan pencarian kata.

4. Menu Fitur berisi menu-menu untuk bahasa korea seperti alat makan,angka, buah, elektronik, hari, hewan, keluarga, profesi, dan sayuran.

5. Menu Bantuan untuk panduan user menggunakan aplikasi beserta penjelasan Algoritma.

6. Menu Tentang berisi judul Aplikasi dan pembuat aplikasi. 7. Menu Keluar untuk mengeluarkan user dari aplikasi.


(36)

3.5.3 Rancangan Halaman Beranda

Halaman Beranda terdapat beberapa button yang akan menampilkan pembelajaran dasar huruf hangul seperti cara penulisan dan pelafalan huruf hangul. Rancangan Beranda dapat dilihat pada Gambar 3.10

Gambar 3.10 Rancangan Beranda

Keterangan :

1. Navigation Drawer

2. Button untuk menampilkan huruf-huruf hangul beserta pelafalannya.

3.5.4 Rancangan Halaman Pencarian

Halaman pencarian berfungsi melakukan pencarian kata pada kamus sesuai dengan algoritma yang dipilih. Rancangan Pencarian dapat dilihat pada Gambar 3.11


(37)

Gambar 3.11 Rancangan Pencarian

Keterangan :

1. Navigation Drawer.

2. textView untuk menampilkan teks.

3. Floating action button sebagai shortcut dari menu yang digunakan untuk

mengganti bahasa.

4. textView untuk menampilkan teks.

5. editText untuk menangkap input yang diketik user.

6. button untuk melakukan pencarian kata menggunakan Algoritma Knuth Morris Pratt. Rancangan setelah diklik Button dapat dilihat pada Gambar

3.12

7. button untuk melakukan pencarian kata menggunakan Algoritma Boyer Moore. Rancangan setelah diklik Button dapat dilihat pada Gambar 3.12


(38)

Gambar 3.12 Rancangan Hasil Pencarian

Keterangan :

1. back untuk kembali ke halaman sebelumnya.

2. textView untuk menampilkan teks.

3. textView untuk menampilkan teks.

4. imageView untuk menampilkan gambar berupa huruf hangul. Rancangan

setelah diklik imageView akan muncul Alert dialog dapat dilihat pada Gambar 3.13

5. textView untuk menampilkan teks.

6. textView untuk menampilkan teks.

7. Floating action button sebagai shortcut dari menu yang digunakan untuk

melihat hasil Running Time. Rancangan setelah diklik Floating action


(39)

Gambar 3.13 Rancangan Alert Dialog Terjemahan

Keterangan :

1. textView untuk menampilkan teks.

2. textView untuk menampilkan teks.

3. textView untuk menampilkan teks.

4. imageView untuk menampilkan gambar berupa huruf hangul. 5. button untuk menutup Alert dialog.

Gambar 3.14 Rancangan Alert Dialog Hasil

Keterangan :

1. textView untuk menampilkan teks.

2. textView untuk menampilkan waktu pencarian.

3. textView untuk menampilkan jumlah teks yang ditemukan.


(40)

3.5.5 Rancangan Halaman Fitur

Halaman Fitur berisi menu-menu untuk bahasa korea berdasarkan katagori seperti alat makan, angka, buah, elektronik, hari, hewan, keluarga, profesi, sayuran. Rancangan Fitur dapat dilihat pada Gambar 3.15

Gambar 3.15 Rancangan Fitur

Keterangan :

1. Navigation Drawer.

2. listView untuk menampilkan item-item dari sekumpulan daftar fitur yang tersusun berbaris ke bawah dengan tampilan yang dapat scroll.

3.5.6 Rancangan Halaman Bantuan

Halaman Menu Bantuan merupakan panduan user untuk menggunakan aplikasi beserta penjelasan Algoritma yang dipakai pada kamus. Rancangan Bantuan dapat dilihat pada Gambar 3.16


(41)

Gambar 3.16 Rancangan Tampilan Bantuan

Keterangan :

1. Navigation Drawer.

2. button untuk melihat panduan pemakaian aplikasi.

3. button untuk melihat penjelasan algoritma yang digunakan pada aplikasi.

4. textView untuk menampilkan teks.

3.5.7 Rancangan Halaman Tentang

Halaman Tentang berisi judul dan nama dari pembuat Aplikasi. Rancangan Tentang dapat dilihat pada Gambar 3.17


(42)

Gambar 3.17 Rancangan Tentang

Keterangan :

1. Navigation Drawer.

2. ImageView menampilkan foto pembuat aplikasi.

3. ImageView menampilkan judul penelitian dan pembuat aplikasi.

3.5.8 Rancangan Halaman Keluar

Halaman Keluar berupa alert dialog ini merupakan untuk mengeluarkan user dari aplikasi Rancangan Keluar dapat dilihat pada Gambar 3.18


(43)

Keterangan :

1. textView untuk menampilkan teks.

2. textView untuk menampilkan teks. 3. Button untuk tidak keluar dari aplikasi. 4. Button untuk keluar dari aplikasi.


(44)

BAB 4

IMPLEMENTASI DAN PENGUJIAN SISTEM

4.1 Implementasi

Implementasi sistem merupakan lanjutan dari tahap analisis dan perancangan sistem. Sistem ini dibangun dengan menggunakan bahasa pemrograman Java dan menggunakan Software Android Studio. Pada sistem ini terdapat 8 (delapan) tampilan halaman, yaitu Halaman Splash Screen, Navigation Drawer, Halaman Beranda, Halaman Pencarian, Halaman Fitur, Halaman Bantuan, Halaman Tentang, dan Halaman Keluar

4.1.1 Halaman Splash Screen

Halaman Splash Screen merupakan halaman yang pertama kali muncul pada saat sistem dibuka. Halaman Splash Screen dapat dilihat pada Gambar 4.1


(45)

4.1.2 Navigation Drawer

Navigation Drawer terdiri dari Header, Beranda, Pencarian, Fitur, Bantuan,

Tentang, dan Keluar. Halaman Navigation Drawer dapat dilihat pada Gambar 4.2

Gambar 4.2 Halaman Navigation Drawer

4.1.3 Halaman Beranda

Halaman Beranda terdapat beberapa button yang akan menampilkan pembelajaran dasar huruf hangul seperti cara penulisan dan pelafalan huruf hangul. Halaman Beranda dapat dilihat pada Gambar 4.3


(46)

4.1.4 Halaman Pencarian

Halaman Pencarian berfungsi melakukan pencarian kata pada kamus sesuai dengan algoritma yang dipilih. Halaman Pencarian dapat dilihat pada Gambar 4.4. Terdapat Floating action button untuk melihat hasil Running Time. Tampilan setelah diklik Floating action button akan muncul Alert dialog dapat dilihat pada Gambar 4.5. Tampilan setelah diklik imageView akan muncul Alert dialog Terjemahan dapat dilihat pada Gambar 4.6

Gambar 4.4 Halaman Pencarian


(47)

Gambar 4.6 Alert dialog Terjemahan

4.1.5 Halaman Fitur

Halaman Fitur berisi menu-menu untuk bahasa korea berdasarkan kategori seperti Alat Makan, Angka, Buah, Elektronik, Hari, Hewan, Keluarga, Profesi, Sayuran. Halaman Fitur dapat dilihat pada Gambar 4.7.


(48)

4.1.6 Halaman Bantuan

Halaman Bantuan merupakan panduan user untuk menggunakan aplikasi beserta penjelasan Algoritma yang dipakai pada pencarian kamus. Halaman Bantuan dapat dilihat pada Gambar 4.8.

Gambar 4.8 Halaman Bantuan.

4.1.7 Halaman Tentang

Halaman Tentang berisi Judul Aplikasi dan Nama pembuat Aplikasi. Halaman Tentang dapat dilihat pada Gambar 4.9.


(49)

4.1.8 Halaman Keluar

Halaman Keluar berupa alert dialog ini berfungsi untuk mengeluarkan user dari aplikasi. Halaman Keluar dapat dilihat pada Gambar 4.10.


(50)

4. 2 Pengujian Sistem

Pengujian sistem dilakukan untuk mengetahui bagaimana kinerja sistem dalam pencarian kata pada kamus Bahasa Indonesia-Korea menggunakan Algoritma

Knuth Morris Pratt dan Algoritma Boyer Moore. Dalam pengujian yang akan

dicari adalah string sebagai inputannya. Semua hasil pencarian ditampilkan sesuai dengan inputan yang match pada pencarian.

4.2.1 Pengujian Pencarian kata pada Kamus Bahasa Indonesia-Korea dengan Algoritma Knuth Morris Pratt

Tabel 4.1 Hasil Pencarian kata “a” dengan Algoritma Knuth Morris Pratt

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.1 menjelaskan tentang hasil pencarian kata “a” match dengan teks yang

ada. Pencarian kata “a” dengan waktu pencarian 166.0 ms dan terdapat 1689 kata


(51)

Tabel 4.2 Hasil Pencarian kata “an” dengan Algoritma Knuth Morris Pratt

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.2 menjelaskan tentang hasil pencarian kata “an” match dengan teks yang

ada. Pencarian kata “an” dengan waktu pencarian 146.0 ms dan terdapat 349 kata

yang ditemukan didalam teks.

Tabel 4.3 Hasil Pencarian kata “ma” dengan Algoritma Knuth Morris Pratt

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.3 menjelaskan tentang hasil pencarian kata “ma” match dengan teks yang

ada. Pencarian kata “ma” dengan waktu pencarian 134.0 ms dan terdapat 116 kata


(52)

Tabel 4.4 Hasil Pencarian kata “perempuan” dengan Algoritma Knuth Morris

Pratt

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.4 menjelaskan tentang hasil pencarian kata “perempuan” match dengan

teks yang ada. Pencarian kata “perempuan” dengan waktu pencarian 133.0 ms dan

terdapat 8 kata yang ditemukan didalam teks.

Tabel 4.5 Hasil Pencarian kata “komput” dengan Algoritma Knuth Morris Pratt

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.5 menjelaskan tentang hasil pencarian kata “komput” match dengan teks

yang ada. Pencarian kata “komput” dengan waktu pencarian 124.0 ms dan


(53)

Tabel 4.6 Hasil Pencarian kata “ch” dengan Algoritma Knuth Morris Pratt

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.6 menjelaskan tentang hasil pencarian kata “ch” match dengan teks yang

ada. Pencarian kata “ch” dengan waktu pencarian 144.0 ms dan terdapat 218 kata

yang ditemukan didalam teks.

Tabel 4.7 Hasil Pencarian kata “imnida” dengan Algoritma Knuth Morris Pratt

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Mis Match

Tabel 4.7 menjelaskan tentang hasil pencarian kata “imnida” mis match dengan

teks yang ada. Pencarian kata “imnida” dengan waktu pencarian 115.0 ms dan


(54)

Tabel 4.8 Hasil Pencarian kata “keopyuteogong” dengan Algoritma Knuth Morris

Pratt

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.8 menjelaskan tentang hasil pencarian kata “keopyuteogong” match

dengan teks yang ada. Pencarian kata “keopyuteogong” dengan waktu pencarian

119.0 ms dan terdapat 1 kata yang ditemukan didalam teks.

Tabel 4.9 Hasil Pencarian kata “xy” dengan Algoritma Knuth Morris Pratt

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Mis Match

Tabel 4.9 menjelaskan tentang hasil pencarian kata “xy” mis match dengan teks

yang ada. Pencarian kata “xy” dengan waktu pencarian 120.0 ms dan terdapat 0


(55)

Tabel 4.10 Hasil Pencarian kata “samuso” dengan Algoritma Knuth Morris Pratt

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.10 menjelaskan tentang hasil pencarian kata “samuso” match dengan teks

yang ada. Pencarian kata “samuso” dengan waktu pencarian 120.0 ms dan


(56)

4.2.2 Pengujian Pencarian kata pada kamus bahasa Indonesia korea dengan Algoritma Boyer Moore

Tabel 4.11 Hasil Pencarian kata “a” dengan Algoritma Boyer Moore

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.11 menjelaskan tentang hasil pencarian kata “a” match dengan teks yang

ada. Pencarian kata “a” dengan waktu pencarian 151.0 ms dan terdapat 1689 kata


(57)

Tabel 4.12 Hasil Pencarian kata “an” dengan Algoritma Boyer Moore

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.12 menjelaskan tentang hasil pencarian kata “an” match dengan teks

yang ada. Pencarian kata “an” dengan waktu pencarian 131.0 ms dan terdapat 349

kata yang ditemukan didalam teks.

Tabel 4.13 Hasil Pencarian kata “ma” dengan Algoritma Boyer Moore

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.13 menjelaskan tentang hasil pencarian kata “ma” match dengan teks

yang ada. Pencarian kata “ma” dengan waktu pencarian 132.0 ms dan terdapat


(58)

Tabel 4.14 Hasil Pencarian kata “perempuan” dengan Algoritma Boyer Moore

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.14 menjelaskan tentang hasil pencarian kata “perempuan” match dengan

teks yang ada. Pencarian kata “perempuan” dengan waktu pencarian 144.0 ms dan

terdapat 8 kata yang ditemukan didalam teks.

Tabel 4.15 Hasil Pencarian kata “komput” dengan Algoritma Boyer Moore

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.15 menjelaskan tentang hasil pencarian kata “komput” match dengan teks

yang ada. Pencarian kata “komput” dengan waktu pencarian 152.0 ms dan


(59)

Tabel 4.16 Hasil Pencarian kata “ch” dengan Algoritma Boyer Moore

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.16 menjelaskan tentang hasil pencarian kata “ch” match dengan teks

yang ada. Pencarian kata “ch” dengan waktu pencarian 124.0 ms dan terdapat 218

kata yang ditemukan didalam teks.

Tabel 4.17 Hasil Pencarian kata “imnida” dengan Algoritma Boyer Moore

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Mis Match

Tabel 4.17 menjelaskan tentang hasil pencarian kata “imnida” mis match dengan

teks yang ada. Pencarian kata “imnida” dengan waktu pencarian 126.0 ms dan


(60)

Tabel 4.18 Hasil Pencarian kata “keopyuteogong” dengan Algoritma Boyer

Moore

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.18 menjelaskan tentang hasil pencarian kata “keopyuteogong” match

dengan teks yang ada. Pencarian kata “keopyuteogong” dengan waktu pencarian

128.0 ms dan terdapat 1 kata yang ditemukan didalam teks.

Tabel 4.19 Hasil Pencarian kata “xy” dengan Algoritma Boyer Moore

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Mis Match

Tabel 4.19 menjelaskan tentang hasil pencarian kata “xy” mis match dengan teks

yang ada. Pencarian kata “xy” dengan waktu pencarian 123.0 ms dan terdapat 0


(61)

Tabel 4.20 Hasil Pencarian kata “samuso” dengan Algoritma Boyer Moore

Hasil Pencarian

Gambar Hasil Pencocokan

Gambar Hasil Running Time dan Jumlah kata yang ditemukan

Match

Tabel 4.20 menjelaskan tentang hasil pencarian kata “samuso” match dengan teks

yang ada. Pencarian kata “samuso” dengan waktu pencarian 135.0 ms dan


(62)

4.3. Hasil Pengujian

Hasil pengujian dari penelitian ini adalah Running time dari pencarian kata dan jumlah kata yang ditemukan pada Algoritma Knuth Morris Pratt dan Algoritma

Boyer Moore yang dilakukan terhadap string yang berbeda. Untuk pengujian string Bahasa Indonesia-Korea dijelaskan pada No. 1 sampai 5. Sedangkan

pengujian string Bahasa Korea-Indonesia dijelaskan pada No. 6 sampai 10 Adapun hasil pengujian dari kedua Algoritma yang digunakan akan dijelaskan pada Tabel 4.21 dan Tabel 4.22.

Tabel 4.21 Hasil Pengujian Algoritma Knuth Morris Pratt

No Pola Running time

(ms)

Jumlah kata yang ditemukan

Kejadian

1 a 166.0 1689 Match

2 an 146.0 349 Match

3 ma 134.0 116 Match

4 perempuan 133.0 8 Match

5 komput 124.0 2 Match

6 ch 144.0 218 Match

7 imnida 115.0 0 Mis match

8 keopyuteogong 119.0 1 Match

9 xy 120.0 0 Mis match

10 samuso 120.0 1 Match

TOTAL 1321 ms


(63)

Tabel 4.22 Hasil Pengujian Algoritma Boyer Moore

No Pola Running Time

(ms)

Jumlah kata yang ditemukan

Kejadian

1 a 151.0 1689 Match

2 an 131.0 349 Match

3 ma 132.0 116 Match

4 perempuan 144.0 8 Match

5 komput 152.0 2 Match

6 ch 124.0 218 Match

7 imnida 126.0 0 Mis match

8 keopyuteogong 128.0 1 Match

9 xy 123.0 0 Mis match

10 samuso 135.0 1 Match

TOTAL 1346 ms

RATA-RATA 134.6 ms

Setelah mendapatkan Hasil Pengujian dari Tabel 4.21 dan Tabel 4.22 maka dibuat grafik perbandingan hasil pengujian dari kedua Algoritma tersebut. Grafik dapat dilihat pada Gambar 4.10.


(64)

Gambar 4.11 Perbandingan Hasil Running Time Algoritma Knuth Morris Pratt dan Algoritma Boyer Moore

Dari grafik diatas dapat dijelaskan bahwa Algoritma Knuth Morris Pratt mendapatkan Hasil Running Time yang relatif rendah dibandingkan dengan Algoritma Boyer Moore. Artinya bahwa Algoritma Knuth Morris Pratt lebih cepat untuk pencocokan kata dibandingkan dengan Algoritma Boyer Moore. Total Hasil Perbandingan dari kedua Algoritma tersebut dapat dijelaskan pada Gambar 4.12

Gambar 4.12 Perbandingan Total Running Time Algoritma Knuth Morris Pratt dan Algoritma Boyer Moore

0 20 40 60 80 100 120 140 160 180

Running Time

Knuth Morris Pratt Boyer Moore

1305 1310 1315 1320 1325 1330 1335 1340 1345 1350

TOTAL

Running Time


(65)

Dari grafik diatas dapat dijelaskan bahwa Algoritma Knuth Morris Pratt memiliki nilai Total Running Time yang rendah dibandingkan dengan Algoritma Boyer

Moore. Artinya bahwa Algoritma Knuth Morris Pratt lebih cepat untuk

pencocokan kata dibandingkan dengan Algoritma Boyer Moore. 4.4. Kompleksitas Algoritma

Kompleksitas algoritma yang akan diuji adalah kompleksitas Algoritma Knuth

Morris Pratt dan Algoritma Boyer Moore. Seperti dijelaskan pada Tabel 4.23,

4.24, 4.25, 4.26, 4.27, dan 4.28 berikut:

4.4.1 Kompleksitas Algoritma Knuth Morris Pratt

Tabel 4.23 Kompleksitas fungsi preKmp Algoritma Knuth Morris Pratt

public static void preKmp() { C # C.#

int i, j; C1 1 C1

i = 0; C2 1 C2

j = kmpNext[0] = -1; C2 1 C2

while (i < m) { C3 m C3m

while (j > -1 && x[i] != x[j]) C3 m C3m j = kmpNext[j];

}

C2 m C2m

i++; C2 m C2m

j++; C2 m C2m

if (i < m && j < m && x[i] == x[j]) { C4 m C4m kmpNext[i] = kmpNext[j]; C2 m C2m } else {

kmpNext[i] = j; }

}

C2 m C2m

FASE PRE-PROSES :

Tmax(n) = C1 + 2C2 + 5C2m + 2C3m + C4m


(1)

vii

THE COMPARISON BETWEEN KNUTH MORRIS PRATT

ALGORITHM AND BOYER MOORE ALGORITHM IN INDONESIAN - KOREAN DICTIONARY APPLICATION ON ANDROID

ABSTRACT

This research discusses about how to do a word searching in foreign language dictionary using string matching algorithm. This research is aimed to know which algorithm is better between Knuth Morrish Pratt algorithm and Boyer Moore algorithm in string matching process. String matching is an important parts of string searching process in a document. String matching algorithm that is used in this research are Knuth Morris Pratt algorithm and Boyer Moore algorithm. Knuth Morris Pratt algorithm performs the comparisons of the text and the pattern from left to right. Whereas Boyer Moore algorithm performs the comparisons of the text and the pattern from right to left, but the shifting of the window remains from left to right.The result of this research shows that Knuth Morris Pratt algorithm is faster than Boyer Moore algorithm in word searching process. The running time average of Knuth Morris Pratt algorithm is 132.1 ms and Boyer Moore algorithm is 134.6 ms

Keywords: String Matching, Knuth Morris Pratt Algorithm, Boyer Moore Algorithm.


(2)

DAFTAR ISI

Halaman

Persetujuan ii

Pernyataan iii

Penghargaan iv

Abstrak vi

Abstract vii

Daftar Isi viii

Daftar Tabel x

Daftar Gambar xi

Daftar Lampiran xii

Bab 1 Pendahuluan

1.1Latar Belakang 1

1.2Perumusan Masalah 3

1.3Ruang Lingkup Penelitian 3

1.4Tujuan Penelitian 3

1.5Manfaat Penelitian 4

1.6Metode Penelitian 4

1.7Sistematika Penulisan 5

Bab 2 Landasan Teori

2.1 Definisi Kamus 7

2.2 Definisi Algoritma 7

2.2.1 Algoritma String Matching (pencocokan kata) 7

2.2.1.1 Algoritma Knuth Morris Pratt 8

2.2.1.2 Algoritma Boyer Moore 13

2.2.1.2.1 Suffix 13

2.2.1.2.2 Good-Suffix Shift (Match Heuristic) 14 2.2.1.2.3 Bad-Character Shift (Occurance Heuristic) 16

2.3 Definisi Kompleksitas Algoritma 19

2.4 Definisi Android 20

2.5 Penelitian yang Relevan 21

Bab 3 Analisis dan Perancangan Sistem

3.1 Analisis Sistem 23

3.1.1 Analisis Masalah 23

3.1.2 Analisis Persyaratan 24

3.1.2.1 Persyaratan Fungsional 25

3.1.2.2 Persyaratan Non-Fungsional 25

3.2. Pemodelan 26


(3)

ix

3.2.2 Activity Diagram 29

3.2.3 Sequance Diagram 30

3.3 Pseudocode 31

3.3.1 Pseudocode Algoritma Knuth Morris Pratt 31 3.3.2 Pseudocode Algoritma Boyer Moore 32

3.4 Flowchart 34

3.5 Perancangan Antarmuka Sistem (Interface) 37

3.5.1 Rancangan Halaman Splash Screen 37

3.5.2 Rancangan Navigation Drawer 38

3.5.3 Rancangan Halaman Beranda 39

3.5.4 Rancangan Halaman Pencarian 39

3.5.5 Rancangan Halaman Fitur 43

3.5.6 Rancangan Halaman Bantuan 43

3.5.7 Rancangan Halaman Tentang 44

3.5.8 Rancangan Halaman Keluar 45

Bab 4 Implementasi dan Pengujian Sistem

4.1Implementasi 47

4.1.1 Tampilan Halaman Splash Screen 47

4.1.2 Tampilan Navigation Drawer 48

4.1.3 Tampilan Halaman Beranda 48

4.1.4 Tampilan Halaman Pencarian 49

4.1.5 Tampilan Halaman Fitur 50

4.1.6 Tampilan Halaman Bantuan 51

4.1.7 Tampilan Halaman Tentang 51

4.1.8 Tampilan Halaman Keluar 52

4.2 Pengujian Sistem 53

4.2.1 Pengujian pencarian kata pada Kamus Bahasa Indonesia-Korea dengan Algoritma Knuth Morris Pratt 53 4.2.2 Pengujian pencarian kata pada Kamus Bahasa Indonesia-Korea

dengan Algoritma Boyer Moore 59

4.3 Hasil Pengujian 65

4.4 Kompleksitas Algoritma 68

4.4.1 Kompleksitas Algoritma Knuth Morris Pratt 68

4.4.2 Kompleksitas Algoritma Boyer Moore 71

Bab 5 Kesimpulan dan Saran

5.1 Kesimpulan 76

5.2. Saran 77


(4)

DAFTAR TABEL

Nomor

Tabel Nama Tabel Halaman

2.1 2.2 2.3 2.4 2.5 2.6 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16 4.17 4.18 4.19 4.20 4.21 4.22 4.23 4.24 4.25 4.26 4.27 4.28

Hasil Perhitungan kmpNext[i] dan shift[i] Hasil Perhitungan Suffix

Hasil Perhitungan bmGs Hasil Perhitungan bmBc

Pergeseran karakter untuk bmBc Pergeseran posisi untuk bmGs

Use Case Proses Menentukan tipe terjemahan Use Case Proses Input kata

Use Case Proses Algoritma Knuth Morris Pratt Use Case Proses Algoritma Boyer Moore Pseudecode preKmp Pseudecode KMP Pseudecode suffix Pseudecode bmGs Pseudecode bmBc Pseudecode BM

Hasil Pencarian kata “a” dengan Algoritma Knuth Morris Pratt Hasil Pencarian kata “an” dengan Algoritma Knuth Morris Pratt Hasil Pencarian kata “ma” dengan Algoritma Knuth Morris Pratt

Hasil Pencarian kata “perempuan” dengan Algoritma Knuth Morris Pratt Hasil Pencarian kata “komput” dengan Algoritma Knuth Morris Pratt Hasil Pencarian kata “ch” dengan Algoritma Knuth Morris Pratt Hasil Pencarian kata “imnida” dengan Algoritma Knuth Morris Pratt

Hasil Pencarian kata “keopyuteogong” dengan Algoritma Knuth Morris Pratt Hasil Pencarian kata “xy” dengan Algoritma Knuth Morris Pratt

Hasil Pencarian kata “samuso” dengan Algoritma Knuth Morris Pratt Hasil Pencarian kata “a” dengan Algoritma Boyer Moore

Hasil Pencarian kata “an” dengan Algoritma Boyer Moore Hasil Pencarian kata “ma” dengan Algoritma Boyer Moore

Hasil Pencarian kata “perempuan” dengan Algoritma Boyer Moore Hasil Pencarian kata “komput” dengan Algoritma Boyer Moore Hasil Pencarian kata “ch” dengan Algoritma Boyer Moore Hasil Pencarian kata “imnida” dengan Algoritma Boyer Moore

Hasil Pencarian kata “keopyuteogong” dengan Algoritma Boyer Moore Hasil Pencarian kata “xy” dengan Algoritma Boyer Moore

Hasil Pencarian kata “samuso” dengan Algoritma Boyer Moore Hasil Pengujian Algoritma Knuth Morris Pratt

Hasil Pengujian Algoritma Boyer Moore

Kompleksitas fungsi preKmp Algoritma Knuth Morris Pratt Kompleksitas fungsi KMP Algoritma Knuth Morris Pratt Kompleksitas fungsi preBmBc Algoritma Boyer Moore Kompleksitas fungsi suffixes Algoritma Boyer Moore Kompleksitas fungsi preBmGs Algoritma Boyer Moore Kompleksitas fungsi BM Algoritma Boyer Moore

9 14 15 17 18 18 27 27 28 28 31 31 32 32 33 33 53 54 54 55 55 56 56 57 57 58 59 60 60 61 61 62 62 63 63 64 65 66 68 69 71 71 72 73


(5)

xi

DAFTAR GAMBAR

Nomor

Gambar Nama Gambar Halaman

3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 13.16 13.17 13.18 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 Diagram Ishikawa

Use Case Diagram Sistem Activity Diagram Sistem Sequence Diagram Sistem

Flowchart Gambaran Umum Sistem Kamus Flowchart Algoritma Knuth Morris Pratt Flowchart Algoritma Boyer Moore Rancangan Splash Screen

Rancangan Navigation Drawer Rancangan Beranda

Rancangan Pencarian Rancangan Hasil Pencarian

Rancangan Alert dialog Terjemahan Rancangan Alert dialog Hasil Rancangan Fitur

Rancangan Bantuan Rancangan Tentang Rancangan Keluar Halaman Splash Screen Halaman Navigation Drawer Halaman Beranda

Halaman Pencarian Alert dialog Hasil Alert dialog Terjemahan Halaman Fitur

Halaman Bantuan Halaman Tentang Halaman Keluar

Perbandingan hasil Running Time Algoritma Knuth Morris Pratt dan Algoritma Boyer Moore

Perbandingan total Running Time Algoritma Knuth Morris Pratt dan Algoritma Boyer Moore

24 26 29 30 34 35 36 37 38 39 40 41 42 42 43 44 45 45 47 48 48 49 49 50 50 51 51 52 67 67


(6)

DAFTAR LAMPIRAN

Halaman

A. Listing Program A-1