Perbandingan Algoritma Knuth Morris Pratt dan Boyer Moore pada Aplikasi Kamus Bahasa Indonesia-Korea Berbasis Android
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