• Tidak ada hasil yang ditemukan

Implementasi Algoritma Reverse Colussi Pada Kamus Bahasa Indonesia Karo Berbasis Android

N/A
N/A
Protected

Academic year: 2017

Membagikan "Implementasi Algoritma Reverse Colussi Pada Kamus Bahasa Indonesia Karo Berbasis Android"

Copied!
84
0
0

Teks penuh

(1)

LISTING PROGRAM

/*** UtamaActivity***/

private SearchView searchView = null;

private SearchView.OnQueryTextListener queryTextListener; SQLiteOpenHelper helper;

SQLiteDatabase db; Cursor cursor;

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

private ListView listView;

private CustomListAdapter adapter; String hh = "";

int state = 1;

double startTime, finisTime, totalTime;

long comp;

String yangdicari;

int jumlahTotal; @Override

public boolean onQueryTextSubmit(String query) { String pat = query;

totalTime = 0; resultList.clear(); try {

helper = new

DatabaseOpenHelper(UtamaActivity.this); cursor = null; comp = 0;

yangdicari = pat; jumlahTotal = 0; String tb_name; if (state == 1) {

tb_name = "Indonesia"; } else {

tb_name = "Karo"; }

db = helper.getReadableDatabase();

//cursor = db.rawQuery("SELECT * FROM Bank Order by " + tb_name + " ASC ;", null);

//cursor = db.rawQuery("SELECT * FROM Bank where "+tb_name+ " like '%"+query+"%' Order by " + tb_name + " ASC ;", null);

cursor = db.rawQuery("SELECT * FROM Bank ORDER BY LENGTH("+tb_name+") ASC ;", null);

if (cursor != null) { cursor.moveToFirst(); do {

String indo; String karo; if (state == 1) {

indo = cursor.getString(1); karo = cursor.getString(2); } else {

indo = cursor.getString(2); karo = cursor.getString(1); }

(2)

startTime = System.currentTimeMillis();

RC_start(query.toLowerCase(), indo.toLowerCase(), karo.toLowerCase());

/*Result r = new Result(); r.setIndo(indo); r.setKaro(karo); r.setPat(query); r.setPos(0); resultList.add(r); jumlahTotal++; */

finisTime = System.currentTimeMillis();

totalTime = totalTime + (finisTime-startTime);

} while (cursor.moveToNext()); }

db.close();

adapter = new

CustomListAdapter(UtamaActivity.this, resultList); listView.setAdapter(adapter); } catch (Exception e) {

}

//totalTime = finisTime - startTime;

DialogInfo("Waktu = " + totalTime + " ms\nBanyak Komparasi = " + comp + "\nYang didapat = " + jumlahTotal);

return true; }

};

searchView.setOnQueryTextListener(queryTextListener); }

return true; }

@Override

public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) {

case R.id.action_search: return false;

case R.id.action_putar: if (state == 1) { state = 2;

getSupportActionBar().setTitle("KARO-INDONESIA"); } else {

state = 1;

getSupportActionBar().setTitle("INDONESIA-KARO"); }

;

return false; default:

break; }

searchView.setOnQueryTextListener(queryTextListener); return super.onOptionsItemSelected(item);

}

public void DialogInfo(String m) {

AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Hasil Pencarian dari kata \"" + yangdicari + "\"");

builder.setMessage(m);

(3)

DialogInterface.OnClickListener() { @Override

public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.show(); //super.onBackPressed(); } @SuppressWarnings("StatementWithEmptyBody") @Override

public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here.

int id = item.getItemId();

if (id == R.id.nav_bantuan) {

Intent inn = new Intent(UtamaActivity.this, BantuanActivity.class); startActivity(inn);

}

else if (id == R.id.nav_info) {

Intent inf = new Intent(UtamaActivity.this, InformasiActivity.class); startActivity(inf);

}

else if (id == R.id.nav_perpus) {

Intent i = new Intent(UtamaActivity.this, PerpustakaanActivity.class); startActivity(i);

}

else if (id == R.id.nav_saya) {

Intent in = new Intent(UtamaActivity.this, activity_tentang.class); startActivity(in);

}

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START);

return true; }

String txt; String pat; String karo; char[] x; char[] y; int n; int m;

int[][] rcBc = new int[256][256]; int[] rcGs = new int[256];

int[] h = new int[256]; int[] locc = new int[256]; int[] link = new int[256]; int[] hmin = new int[256]; int[] kmin = new int[256]; int[] rmin = new int[256];

public void RC_start(String getPat, String indo, String getKaro) { txt = indo;

pat = getPat; karo = getKaro;

(4)

y = txt.toCharArray(); n = txt.length(); m = pat.length(); RC();

}

public void preRc() {

/* Computation of link and locc */

for (int a = 0; a < 256; ++a) locc[a] = -1;

link[0] = -1;

for (int i = 0; i < m - 1; ++i) { link[i + 1] = locc[x[i]]; locc[x[i]] = i;

}

/* Computation of rcBc */

int i, j;

for (int a = 0; a < 256; ++a) for (int s = 1; s <= m; ++s) { i = locc[a];

j = link[m - s];

while (i - j != s && j >= 0) if (i - j > s)

i = link[i + 1]; else

j = link[j + 1]; while (i - j > s)

i = link[i + 1]; rcBc[a][s] = m - i - 1; }

/* Computation of hmin */ int k = 1;

int q; i = m - 1; while (k <= m) {

while (i - k >= 0 && x[i - k] == x[i]) --i;

hmin[k] = i; q = k + 1;

while (hmin[q - k] - (q - k) > i) { hmin[q] = hmin[q - k];

++q; }

i += (q - k); k = q;

if (i == m) i = m - 1; }

/* Computation of kmin */ for (int a = 0; a < 256; ++a) kmin[a] = 0;

(5)

/* Computation of rmin */ int r = 0;

for (i = m - 1; i >= 0; --i) { if (hmin[i + 1] == i) r = i + 1;

rmin[i] = r; }

/* Computation of rcGs */ i = 1;

for (k = 1; k <= m; ++k)

if (hmin[k] != m - 1 && kmin[hmin[k]] == k) { h[i] = hmin[k];

rcGs[i++] = k; }

i = m - 1;

for (j = m - 2; j >= 0; --j) if (kmin[j] == 0) { h[i] = j;

rcGs[i--] = rmin[j]; }

rcGs[m] = rmin[0]; }

public void RC() { /* Preprocessing */

try {

preRc();

} catch (Exception e) {

//Log.d("IYU:", "recok kali pun PRERC"); }

/* Searching */ int i;

int j = 0; int s = m;

boolean error = false; while (j <= n - m) { error = false; try {

while (j <= n - m && (comp++ >= 0) && x[m - 1] != y[j + m - 1]) { s = rcBc[y[j + m - 1]][s];

j += s; }

} catch (Exception e) {

//Log.d("IYU:", "recok kali pun WHILE 1"); }

i = 1; try {

for (i = 1; i < m && (comp++ >= 0) && x[h[i]] == y[j + h[i]]; ++i) ;

} catch (Exception e) { error = true; }

if (!error) {

(6)

Result r = new Result(); r.setIndo(txt);

r.setKaro(karo); r.setPat(pat); r.setPos(j); resultList.add(r); jumlahTotal++; } } }

s = rcGs[i]; j += s; }

}

}

/*** Result***/ public class Result { String mInd, mKaro; int pos;

String pat;

public Result() { }

public Result(String mInd, String mKaro, int mPos, String mPat) { this.mInd = mInd;

this.mKaro = mKaro; this.pos = mPos; this.pat = mPat; }

public String getIndo() { return mInd;

}

public void setIndo(String mIndo) { this.mInd = mIndo;

}

public String getKaro() { return mKaro;

}

public void setKaro(String mKaro) { this.mKaro = mKaro;

}

public int getPos() { return pos; }

public void setPos(int mPos) { this.pos = mPos;

}

public String getPat() { return pat;

}

(7)

this.pat = mPat; }

/*** CustomListAdapter***/

@Override

public View getView(int position, View convertView, ViewGroup parent) {

String first, middle, last; try {

if (inflater == null)

inflater = (LayoutInflater)

activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (convertView == null)

convertView = inflater.inflate(R.layout.list_item, null); TextView indo = (TextView)

convertView.findViewById(R.id.tv_indo); TextView karo = (TextView) convertView.findViewById(R.id.tv_karo); // getting movie data for the row Result m = resultItems.get(position);

int pos = m.getPos();

int pLength = m.getPat().length(); String h = m.getIndo();

//Log.d("IYU:", "lokasi "+position+" isi: "+h); first = h.substring(0, pos);

//Log.d("IYU:", "first : "+first);

middle = h.substring(pos, pos + pLength); //Log.d("IYU:", "midle :"+middle);

last = h.substring(pLength + pos); //Log.d("IYU:", "last :"+last);

if (pLength == 0) indo.setText(h); else

indo.setText(Html.fromHtml(first + "<font color='#FF4081'><b>" + middle + "</b></font>" + last));

karo.setText(m.getKaro());

//Log.d("IYU:", "SUKSES"); } catch (Exception e) {

//Log.e("IYU:", "Fatal Error update list"); }

return convertView; }

}

/*** CustomListAdapterPerpustakaan***/

@Override

public View getView(int position, View convertView, ViewGroup parent) {

try {

if (inflater == null) inflater = (LayoutInflater)

activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (convertView == null)

(8)

String s;

Result m = resultItems.get(position); s = m.getIndo().substring(0,1); indo.setText(m.getIndo()); karo.setText(m.getKaro()); huruf.setText(s.toUpperCase());

} catch (Exception e) {

Log.e("ERROR:", "Fatal Error update list"); }

return convertView; }

}

/*** DatabaseOpenHelper***/

public class DatabaseOpenHelper extends SQLiteAssetHelper{ private static final String DATABASE_NAME = "KamusKaro.db"; private static final int DATABASE_VERSION = 2;

public DatabaseOpenHelper(Context context) {

super(context, DATABASE_NAME, null , DATABASE_VERSION); }

}

/*** PerpustakaanActivity***/

@Override

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

setContentView(R.layout.activity_perpustakaan); if (getSupportActionBar() != null){

getSupportActionBar().setTitle("Perpustakaan");

getSupportActionBar().setDisplayHomeAsUpEnabled(true); }

//new StartView().execute();

listView = (ListView) findViewById(R.id.list); adapter = new

CustomListAdapterPerpustakaan(PerpustakaanActivity.this, resultList); listView.setAdapter(adapter);

Read_Data(); }

@Override

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

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

return true; }

return super.onOptionsItemSelected(item); }

private void Read_Data() {

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

String h = "Indonesia\n"; String h1 = "Karo\n";

//TextView tv = (TextView) findViewById(R.id.textView); //TextView tv1 = (TextView) findViewById(R.id.textView1);

db = helper.getReadableDatabase();

(9)

cursor = db.rawQuery("SELECT * FROM Bank ORDER BY Indonesia ASC;", null);

if (cursor != null) { cursor.moveToFirst(); do {

Result r = new Result();

r.setIndo(cursor.getString(1)); r.setKaro(cursor.getString(2)); resultList.add(r);

} while (cursor.moveToNext()); }

db.close(); adapter = new

CustomListAdapterPerpustakaan(PerpustakaanActivity.this, resultList); listView.setAdapter(adapter);

}

private class StartView extends AsyncTask<Void, Void, Void> { @Override

protected void onPreExecute() { super.onPreExecute();

pDialog = new ProgressDialog(PerpustakaanActivity.this); pDialog.setMessage("Tunggu");

pDialog.setCancelable(false); pDialog.show();

pDialog.setProgress(0); }

@Override

protected Void doInBackground(Void... arg0) { Read_Data();

return null; }

@Override

protected void onPostExecute(Void result) { if (pDialog.isShowing())

pDialog.dismiss(); } } } /*** SplashActivity***/ @Override

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

setContentView(R.layout.activity_splash); getSupportActionBar().hide();

setSplash(); }

public void setSplash() { new Thread() {

@Override

(10)

try {

Thread.sleep(1500); }

catch (Exception e) { }

Intent i = new Intent(SplashActivity.this, UtamaActivity.class);

SplashActivity.this.finish(); startActivity(i); } }.start(); } } /*** Activity_Tentang***/

public class activity_tentang extends AppCompatActivity { @Override

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

setContentView(R.layout.activity_activity_tentang); getSupportActionBar().setTitle("Tentang Saya");

getSupportActionBar().setDisplayHomeAsUpEnabled(true); }

@Override

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

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

return true; }

return super.onOptionsItemSelected(item); }

}

/*** AndroidManifest.xml***/

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yogisulaiman.myapplication2">

<application

android:allowBackup="true"

android:icon="@mipmap/ic_launcher" android:label="Kamus Indonesia-Karo" android:supportsRtl="true"

android:theme="@style/AppTheme">

<activity android:name=".MainActivity" /> <activity android:name=".SplashActivity"> <intent-filter>

<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />

</intent-filter> </activity>

(11)

<activity

android:name=".UtamaActivity" android:label="INDONESIA-KARO"

android:theme="@style/AppTheme.NoActionBar">

</activity> </application> </manifest>

/*** Activity_Informasi.xml***/

<RelativeLayout

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" android:background="@drawable/ji"

tools:context="com.yogisulaiman.myapplication2.InformasiActivity">

</RelativeLayout>

/*** List_Item.xml***/

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ffffff" android:orientation="vertical" android:padding="5dp"> <TextView android:id="@+id/tv_indo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Indonesia" android:textColor="#000000" android:textSize="20sp" />

<TextView android:id="@+id/tv_karo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Karo" android:textColor="#000000" android:textSize="28sp" /> </LinearLayout>

/*** List_Item_Perpustakaan.xml***/

(12)

<ImageView

android:layout_width="60dp" android:layout_height="60dp" android:layout_marginRight="20dp" android:layout_marginLeft="10dp"

android:src="@drawable/ic_brightness_1_24dp" />

<TextView android:id="@+id/tv_huruf" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="A" android:textColor="#FFFFFF" android:textSize="40sp" android:layout_centerVertical="true" android:layout_centerHorizontal="true" />

</RelativeLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/tv_indo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Indonesia" android:textColor="#000000" android:textSize="20sp" />

<TextView android:id="@+id/tv_karo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Karo" android:textColor="#000000" android:textSize="28sp" /> </LinearLayout>

</LinearLayout>

/*** Nav_Header_Utama.xml***/

(13)

<TextView

android:layout_width="match_parent" android:layout_height="wrap_content"

android:paddingTop="@dimen/nav_header_vertical_spacing" android:text="Kamus"

android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

<TextView

android:id="@+id/textView"

android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="INDONESIA-KARO" />

</LinearLayout>

/*** Activity_Utama_drawer.xml***/

<menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single">

<item

android:id="@+id/nav_bantuan" android:icon="@drawable/bantuan" android:title="Bantuan" /> <item

android:id="@+id/nav_info" android:icon="@drawable/info" android:title="Suku Karo" /> <item

android:id="@+id/nav_perpus" android:icon="@drawable/per" android:title="Perpustakaan" /> <item

android:id="@+id/nav_saya" android:icon="@drawable/me" android:title="Tentang Saya" /> </group>

</menu>

/*** Main_Menu.xml***/

<menu xmlns:tools="http://schemas.android.com/tools"

xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item

android:id="@+id/action_search"

android:icon="@android:drawable/ic_menu_search" android:title="Cari..."

app:actionViewClass="android.support.v7.widget.SearchView" app:showAsAction="always" />

<item

android:id="@+id/action_putar"

android:icon="@android:drawable/stat_notify_sync_noanim" android:title="Putar"

app:showAsAction="always" />

(14)

CURRICULLUM VITAE

Nama Lengkap : Yogi Sulaiman Nama Panggilan : Yogi

Tempat / Tanggal Lahir : Namorambe / 21 Juni 1994 Jenis Kelamin : Pria

Agama : Islam

Warga Negara : Indonesia

Alamat : Jl. Karya Jaya , Namorambe Mobile Phone : 0878 6737 2145

E-mail : yogisulaiman21@gmail.com

PENDIDIKAN

Perguruan Tinggi

Universitas Sumatera Utara

Fakultas Ilmu Komputer dan Teknologi Informasi Program Studi S1 Ilmu Komputer

IPK 3.46 2012 – 2016

Sekolah Menengah Atas

SMA N 1 NAMORAMBE 2009-2012

Sekolah Menengah Pertama

SMP N 1 NAMORAMBE 2006-2009

Sekolah Dasar

SD NEGERI 107406 NAMORAMBE 2000-2006

Programming: Java, C# Database : MySQL

Software : Ms. Office, Adobe Photoshop , Proshow Produser

OS : Windows

(15)

PROJEK YANG PERNAH DIKERJAKAN

Sistem Informasi DESA JATIKESUMA - Php,Html, MySQL Tugas Mata Kuliah Sistem Database lanjutan

Aplikasi Kamus Bahasa Indonesia-Karo dengan Metode Reverse Collusi Java, Sqlite

Tugas Akhir Skripsi

PENGALAMAN KERJA

No Instansi/Lembaga Jabatan/Posisi Tahun

1 Program Studi S1 Ilmu Komputer Fasilkom-TI USU

Asisten Laboratorium Pengajaran Sistem Manajemen

Database

2013-2016 2 UKMI Al-Khuwarizmi

Fasilkom-TI Kompetensi Akademik 2013

PENGALAMAN PELATIHAN

No .

Pelatihan Tahun

1 Kader BNN 2010

2 Training Kewirausahaan 2011

3 Seminar Motivasai Dakwah Expo 2012

4 Academy Syiar Media 2012

5 Mentoring Akbar Universitas 2012

6 Training Islam Ceria Kreatif 2012

7 Dakwah Expo 2012

(16)

No Organisasi Jabatan Tahun

1 Sahabat Beasiswa Untuk Negeri Wakil Ketua 2014

2 TRICK Peralatan 2013

3 Dakwah Expo PDD 2013

4 Academy Syiar Media Tentor 2013

5 Sahur On The Road Humas 2013

6 KPU Fasilkom TI Dokumentasi 2013

7 Alkhuwarizmi Festival Peralatan 2013

8 Ilkom goes To School Konsumsi 2013

9 Dies Natalis ILKOM USU Keamanan 2012

10 PASKIBRAKA Namorambe Anggota 2011

11 MOS SMA N I Namorambe Panitia 2011

12 Osis SMAN 1 Namorambe Keagamaan 2011

SEMINAR

No .

Seminar Tahun

1 Seminar Nasional Literasi Informasi(SENARAI) 2014

2 Young People Of Character-The Hope of the Future 2014 Demikian riwayat hidup ini saya perbuat dengan sebenar-benarnya.

Medan, Juni 2016

(17)

DAFTAR PUSTAKA

Admizan, R.P. 2014. Perbandingan Algoritma Reverse Colussi Dengan Algoritma Karp-Rabin Dalam Mencari dan Mencocokkan String Pada Word Game. Skripsi. Universitas Komputer Indonesia.

Bangun, K . 1999. Kata Tugas Bahasa Karo. Pusat Pembinaan dan Pengembangan Bahasa Departemen Pendidikan dan Kebudayaan : Jakarta.

Charras, C. & Lecroq, T. 2004. Handbook of Exact String-Matching Algorithms. (E-Book). College Publications: English.

Gaspersz, V. 1997. Manajemen Kualitas: Penerapan konsep-konsep kualitas dalam manajemen isnis total. Gramedia Pustaka Utama: Jakarta

Haryadi, D. 2011. Pencocokan string dengan algoritma reverse collusi. (Online).https://informatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2010-2011 Stima2010-034.pdf. (Diakses 17 Februari 2016).

Hasibuan, H. N. 2005. Perangkat Tindak Tutur dan Siasat Kesantunan Berbahasa (Data Bahasa Mandailing). Universitas Sumatera Utara : Medan.

(18)

Munir, R. & Syahroni, M. 2005. Pencocokan String Berdasarkan Kemiripan Ucapan (Phonetic String Matching) Dalam Bahasa Inggris. Institut Teknologi Bandung : Bandung.

Panggabean. A. I. R. 2015. Implementasi Hybrid Cryptosystem Dengan Algoritma One Time Pad dan Algoritma Rabin Cryptosystem Dalam Pengamanan Data Teks. Skripsi. Universitas Sumatera utara

Pressman, R. S. 2010. Software Engineering: A Practitioner’s Approach. 7th Edition. McGraw-Hill: New York.

Thatoo, R., Virmani, A., Lakshmi, S. & Balakrishnan, N. 2006. TVSBS: A fast exact pattern matching algorithm for biological sequences. Current Science 91(1) : 47-53.

Safaat. N. 2012. Pemrograman Aplikasi Mobile Smartphone dan Tablet PC Berbasis Android. Informatika Bandung : Bandung.

Yusmaniar, A. , Lubis, H. & Surbakti, B. 1987. Struktur Bahasa Karo.

Pusat Pembinaan dan Pengembangan Bahasa Departemen Pendidikan dan Kebudayaan : Jakarta.

(19)

BAB 3

ANALISIS DAN PERANCANGAN SISTEM

3.1. Analisis Sistem

Analisis sistem merupakan tahapan untuk memahami sistem dan komponen-komponen bagian dalam sistem dengan maksud mengidentifikasi dan mengevaluasi permasalahan serta hambatan yang terjadi. Ada dua tahapan analisis dalam penelitian ini yaitu analisis masalah dan analisis kebutuhan. Tahap analisis masalah merupakan tahap untuk memahami dan mempelajari penyebab masalah dari sistem yang digunakan. Kemudian dilanjutkan dengan tahap analisis kebutuhan yang menjelaskan proses kerja fungsi-fungsi yang digunakan sistem.

3.1.1. Analisis Masalah

Permasalahan utama pada penelitian ini adalah budaya bahasa karo yang mulai ditinggalkan dan pengaruh budaya bahasa asing yang masuk kedalam lingkungan masyarakat serta masyarakat suku Karo yang kesulitan untuk berbahasa Karo terutama kalangan muda dan daerah perkotaan.

(20)

Gambar 3.1 Diagram Ishikawa

3.1.2. Analisis Kebutuhan

Analisis kebutuhan sistem ini meliputi analisis persyaratan fungsional dan analisis persyaratan nonfungsional.

3.1.2.1. Kebutuhan Fungsional

Kebutuhan fungsional adalah kebutuhan dimana sistem harus dapat melakukan proses-proses termasuk dalam melakukan pelayanan yang disediakan sistem dan reaksi sistem untuk mendapatkan hasil berdasarkan instruksi yang diberikan. Terdapat beberapa hal yang menjadi syarat kebutuhan fungsional yang harus dipenuhi: (Pangabean, 2015)

1. Fungsi Pencarian Kata

Sistem dapat melakukan pencarian string pada aplikasi Kamus bahasa Indonesia-Karo agar mendapatkan arti kata yang mengandung string tersebut dengan mengimplementasikan algoritma Reverse Colussi

2. Fungsi Pencatat Waktu dan Banyak Komparasi

(21)

kepada user seberapa cepat algoritma Reverse Colussi dalam menyelesaikan proses kerja.

3.1.2.2. Kebutuhan Nonfungsional

Kebutuhan nonfungsional adalah kebutuhan yang mendeskripsikan sistem dari segi karakterisitik, fitur dan batasan lainnya seperti performa, penggunaan, dan ekonomi. Terdapat beberapa hal yang menjadi syarat kebutuhan nonfungsional antara lain: (Pangabean, 2015)

1. Performa

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

2. Mudah dipelajari dan digunakan

Sistem yang akan dibangun harus memiliki interface yang user friendly sehingga pengguna dapat mengakses sistem dengan mudah

3. Hemat biaya

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

3.2. Pemodelan

(22)

3.2.1. Use-Case Diagram

Use-case Diagram adalah gambaran skenario penggunaan aplikasi sistem tentang bagaimana cara sistem bekerja dengan pengguna (Pressman, 2010). Use case diagram digunakan untuk menggambarkan hubungan antara Actor atau user dengan fungsi atau layanan yang disediakan oleh sistem. Actor berperan untuk melakukan komunikasi dengan sistem dimana actor bekerja diluar dari sistem itu sendiri. Hubungan antar actor dengan use-case dihubungkan dengan garis lurus. Sedangkan hubungan dimana

satu use-case digunakan untuk meredudansi use-case lainnya digunakan garis putus-putus dengan keterangan include. Untuk extend digunakan untuk mensimplifikasi satu use-case dengan use-case lainnya. Berikut adalah Use case diagram untuk aplikasi yang akan dibangun , Use case diagram dapat dilihat pada gambar 3.2 berikut ini

Gambar 3.2 Use-Case Diagram

(23)

Tabel 3.1. Tabel Use Case Pencarian string pada kamus bahasa Indonesia-Karo

menggunakan algoritma Reverse Colussi

Name Pencarian string pada pada kamus bahasa Indonesia-Karo menggunakan algoritma Reverse Colussi

Actors User

Description Use Case ini mendeskripsikan proses pencarian dengan

Algoritma Reverse Colussi

Basic Flow User memasukkan string berupa satu kata

Alternate Flow User dapat melakukan sub menu seperti menu bantun, perpustakaan, i-Karo, tentang, dan melihat komparasi. Pre Condition -

Post Condition User mengetahui hasil pencarian string pada kamus bahasa Indonesia-Karo

Pada Proses Pencarian, dapat dinyatakan dalam Tabel 3.2.

Tabel 3.2. Tabel Use Case Proses Pencarian

Name Proses Pencarian

Actors User

Description Use Case ini mendeskripsikan proses pencarian seluruh

string yang akan dicari

Basic Flow User memasukkan satu kata yang akan dicari

Alternate Flow User dapat melihat arti kata atau string Indonesia-Karo

(24)

Pada Proses Hasil, dapat dinyatakan dalam Tabel 3.3.

Tabel 3.3. Tabel Use Case Proses Hasil

Name Proses Hasil

Actors User

Description Use Case ini mendeskripsikan proses menampilkan hasil pencarian string pada kamus Indonesia-Karo

Basic Flow User dapat memilih bahasa pada menu awal sistem

Alternate Flow User dapat menghapus kata atau memilih button refresh untuk mencari kata yang lain

Pre Condition User dapat melihat menu awal lagi untuk kembali ke kamus Post Condition User mengetahui hasil pencarian pada kamus bahasa

Indonesia-Karo

3.2.2. Sequence Diagram

Sequence Diagram menggambarkan interaksi antar objek dan menggambarkan komunikasi antar objek –objek tersebut. Secara khusus menjabarkan behavior sebuah skenario tunggal. Sequence diagram pada pencarian data kamus indonesia-karo dengan menggunaka algoritma reverse colussi. Berikut diagram Sequence pada penelitian ini dapat dilihat pada Gambar 3.3.

(25)

Pada tahap ini, user sebagai pengguna sistem membuka sebuah kamus lalu masuk ke dalam menu utama. Yang akan dilakukan oleh user adalah user mamasukkan kata yang akan dicari dengan satu kata, kemudian setelah proses memasukan teks selesai selanjutnya akan diproses kedalam database, kemudian database membaca seluruh data dan melakukan proses pencocokan kata dengan algoritma Reverse Colussi dengan hasil menampilkan proses dari pencarian kata pada database ke dalam terjemahan kamus.

3.2.3. Activity Diagram

Activity Diagram adalah diagram yang menggambarkan alur kerja proses sistem menggunakan notasi nodes. Activity nodes digunakan untuk menjelaskan alur kontrol kerja sistem seperti sinkronisasi dan keputusan dari awal sampai berakhirnya proses. Nodes bulat penuh adalah nodes awal proses, sedangkan nodes bulat penuh ditengah

adalah akhir proses. Activity diagram pada sistem dapat ditunjukkan pada gambar 3.4

(26)

3.3. Kamus Data

Kamus data merupakan sebuah daftar yang mengatur semua komponen data yang berhubungan terhadap sistem dengan definisi singkat dan sejelas-jelasnya sehingga pengguna dan analisis sistem dapat sama-sama mengerti tentang data masukan, keluaran, komponen penyimpanan, dan kalkulasi lanjutan. Komposisi string yang digunakan dalam kamus bahasa Indonesia-Karo menggunakan sumber referensi buku Kata Tugas Bahasa Karo (Bangun, 1999) dan Struktur Bahasa Karo (Yusmaniar,et al.1987). Kamus data pada aplikasi dapat dilihat pada Tabel 3.4 berikut.

Tabel 3.4 Kamus Data

Data Kolom tipe Deskripsi

Kamus Karo Id Primary Key Int auto increment Indonesia Text Teks bahasa Indonesia

Karo Text Teks bahasa Karo

3.4. Flowchart

(27)

3.4.1. Flowchart System

Flowchart dari sistem yang akan dibangun dapat di lihat pada Gambar 3.5

(28)

3.4.2. Flowchart Algoritma

Pada gambar 3.6 berikut ini merupakan flowchart dari algoritma Reverse Colussi (Charras & Lecroq 2004).

(29)

3.5. Perancangan Antarmuka (Interface)

Perancangan antarmuka digunakan untuk memudahkan penggunaan aplikasi sistem yang ditujukkan kepada pengguna (user) sehingga sistem dapat berjalan sesuai dengan fungsinya secara optimal berdasarkan instruksi yang diberikan oleh user. Tampilan Interface harus dirancang dengan memperhatikan faktor pengguna sehingga sistem yang dibangun dapat memberikan kenyamanan dan kemudahan bagi user. Aplikasi yang dibangun pada penelitian ini menggunakan bahasa pemograman java.

3.5.1. Splash Screen

Splash Screen atau tampilan sementara ditunjukkan pada gambar 3.7 adalah tampilan yang digunakan untuk menunjukkan/menampilkan logo dari aplikasi.

Gambar 3.7 Rancangan Splash Screen Aplikasi

Keterangan:

1. Adalah gambar yang menampilkan Icon aplikasi kamus

(30)

3.5.2. Menu Utama

[image:30.612.122.526.135.407.2]

Perancangan Menu Utama dapat dilihat pada gambar 3.8.

Gambar 3.8 Rancangan Menu Utama

Keterangan:

1. adalah Action bar untuk menampilkan judul menu utama 2. adalah Search Text untuk menampilkan menu input kata 3. adalah Search Menu untuk menampilkan menu pencarian

4. adalah Action Putar untuk menampilkan tombol pergantian kondisi pencarian 5. adalah TextView untuk menampilkan hasil dari kata pencarian kamus

(31)

3.5.3. Menu Navigasi

[image:31.612.232.418.180.457.2]

Menu navigasi dirancang untuk memudahkan user dalam memilih menu tujuan. konsep dari navigasi menggunakan menu drawer atau slider. Perancangan Menu navigasi dapat dilihat pada gambar di bawah ini

Gambar 3.9 Rancangan Menu Navigasi

Keterangan:

1. adalah Menu drawer Bantuan untuk menampilkan informasi kepada user tentang cara menggunakan sistem kamus Indonesia-Karo

2. adalah Menu drawer i-Karo untuk menampilkan informasi tentang suku karo 3. adalah Menu drawer Perpustakaan untuk menampilkan seluruh data dari database 4. adalah Menu drawer Tentang Saya berisi halamanyang berisi informasi penulis 5. adalah Text View untuk menampilkan kata Kamus Indonesia-Karo

(32)

3.5.4. Menu Bantuan

[image:32.612.264.408.138.345.2]

Perancangan Menu Bantuan dapat dilihat pada gambar di bawah ini

Gambar 3.10 Rancangan Menu Bantuan

Keterangan:

1. adalah ActionBar untuk menampilkan activity yang sedang berjalan

2. adalah TextView untuk menampilkan seluruh kata yang ada pada kalimat bantuan

3.5.5. Menu i-Karo

Perancangan Menu i-Karo dapat dilihat pada gambar di bawah ini

[image:32.612.259.375.524.691.2]
(33)

Keterangan:

1. adalah ActionBar untuk menampilkan activity yang sedang berjalan 2. adalah Image gallery untuk menampilkan informasi budaya suku Karo

3.5.6. Menu Perpustakaan

[image:33.612.216.397.259.525.2]

Perancangan Menu perpustakaan dapat dilihat pada gambar di bawah ini

Gambar 3.12 Rancangan Menu Perpustakaan

Keterangan:

1. adalah ActionBar untuk menampilkan activity yang sedang berjalan 2. adalah TextView1 untuk menampilkan data bahasa karo

(34)

3.5.7. Menu Tentang

[image:34.612.200.414.157.468.2]

Perancangan Menu tentang berisi tentang informasi penulis, rancangan dapat dilihat pada gambar 3.13

Gambar 3.13 Rancangan Menu Tentang

Keterangan:

1. adalah ActionBar untuk menampilkan activity yang sedang berjalan

(35)

3.5.8. Menu Hasil Pencarian

Perancangan Menu hasil pencarian dapat dilihat pada gambar 3.14

[image:35.612.230.418.147.421.2]

Gambar 3.14 Rancangan Menu Hasil Pencarian

Keterangan:

1. adalah Search Text untuk menampilkan kata pada saat melakukan pencarian 2. adalah TextView1 untuk menampilkan hasil dari kata pencarian kamus

indonesia-Karo dan sebaliknya .

3. adalah DialogBox untuk menampilam imformasi hasil waktu dan komparasi 4. adalah SubDialogBox 1 untuk menampilkan hasil dari kata yang telah dicari 5. adalah SubDialogBox 2 untuk menampilkan hasil dari waktu pencarian kata 6. adalah SubDialogBox 3 untuk menampilkan hasil dari komparasi perbandingan

(36)

BAB 4

IMPLEMENTASI DAN PENGUJIAN SISTEM

4.1. Implementasi Sistem

Tahap implementasi sistem merupakan langkah lanjutan dari tahap analisis dan perancangan. Tahap ini dilakukan setelah melalui tahap Analisis dan Perancangan sistem yang telah diuraikan pada bab sebelumnya. Adapun perangkat lunak yang digunakan dalam membangun kamus bahasa Indonesia-Karo offline adalah dengan menggunakan Android Studio dan perangkat lunak database yang digunakan untuk menyimpan kunci adalah SQLite.

4.1.1. Implementasi Algoritma Reverse Colussi

Penerapan algoritama Reverse Colussi dalam sistem yang dibangun adalah pada proses pencarian dengan menggunakan Reverse Colussi dalam melakukan pencarian data kamus.

Adapun langkah pertama yang dilakukan adalah pembuatan data berupa kata kedalam database SQLite, kata tersebut merupakan Bahasa Indonesia – Karo sebanyak 1000 kata. Selanjutnya pencarian kata pada kamus akan melakukan proses kedalam database sesuai dengan pencarian algoritma Reverse Colussi . Kata yang sesuai dengan database akan muncul terjemahan sesuai kata yang dicari. Jika kata dalam database tidak ada maka terjemahan tidak ditemukan.

(37)

pengecekan random pada pattern berdasarkan nilai tabel h. Semakin panjang pattern yang dicari akan semakin kecil komparasi yang dibutuhkan,namun apabila pattern yang diinputkan mempunyai ukuran pendek maka komparasi akan semakin besar. Dalam pencarian algoritma Reverse Colussi data kamus yang dicari adalah berupa satu kata sesuai dengan bahasa yang diinginkan yakni Indonesia-Karo, dan Karo-Indonesia. Berikut contoh proses pencarian kata menggunakan algoritma Reverse Colussi.

Pattern yang akan dicari : TAMAT

[image:37.612.140.510.296.641.2]

Teks : SIAPA YANG TAMAT

Tabel 4.1 Pencarian nilai rcBc (1)

Pattern : TAMAT Panjang : 5

A

A A 5

M A 3

A A 3

T A 1

* A 1

Pattern : TAMAT Panjang : 5

M

A M 2

M M 5

A M 2

T M 2

(38)

Pattern : TAMAT Panjang : 5

T

A T 4

M T 4

A T 4

T T 4

* T 4

Pattern : TAMAT Panjang : 5

*

A * 5

M * 5

A * 5

T * 5

* * 5

Tabel 4.3 Hasil nilai rcBc

1 2 3 4 5

A 5 3 3 1 2

M 2 5 2 2 2

T 4 4 4 4 4

[image:38.612.140.508.139.462.2]

* 5 5 5 5 5

Tabel 4.2 Pencarian nilai rcBc (2)

Character

(39)

Tabel 4.4 Hasil nilai rcGs

i 0 1 2 3 4 5

p(i) T A M A T

link(i) -1 -1 -1 1 0

hmin(i) 0 4 4 4 3 4

kmin(i) 0 0 0 4 1 0

rmin(i) 4 4 4 4 5 0

rcGs(i) 0 4 4 4 4 4

[image:39.612.122.526.96.620.2]

h(i) 3 0 1 2

Tabel 4.5 Percobaan pencocokan string (1)

Percobaan 1

S I A P A Y A N G T A M A T

T A M A T

1

rcBc[A] [s], s= 5 , Maka pergeseran selanjutnya adalah 2

Tabel 4.6 Percobaan pencocokan string (2)

Percobaan 2

S I A P A Y A N G T A M A T

T A M A T

1

(40)

Tabel 4.7 Percobaan pencocokan string (3)

Percobaan 3

S I A P A Y A N G T A M A T

T A M A T

2 1

rcGs [1] , Maka pergeseran selanjutnya adalah 4

Tabel 4.8 Percobaan pencocokan string (4)

Percobaan 4

S I A P A Y A N G T A M A T

T A M A T

3 4 5 2 1

rcGs [5] , Maka pergeseran selanjutnya adalah 4

Algoritma Reverse Colussi melakukan pergeseran yang dimulai dari akhir pattern setelah itu dilanjutkan dengan pola random yang sudah ditentukan oleh nilai tabel h.dan banyaknya karakter pattern yang dicari akan berpengaruh dengan banyaknya

(41)

4.2. Antarmuka Sistem

Pada Aplikasi Kamus dalam pencarian menggunakan algoritma Reverse Colussi terdapat 7 tampilan menu, yaitu :

1. Splash Screen

2. Menu Utama

3. Menu Navigasi

4. Menu Bantuan

5. Menu i-Karo

6. Menu perpustakaan

7. Menu Tentang

4.2.1. Splash Screen

Splash Screen adalah tampilan awal sementara yang menampilkan icon aplikasi.

[image:41.612.264.385.449.656.2]

Durasi tampilan Splash Screen adalah 1500 milidetik. Setelah itu, secara otomatis Splash Screen akan berpindah ke Form Utama. Splash Screen ditunjukkan pada gambar 4.1.

(42)

4.2.2. Menu Utama

[image:42.612.124.527.192.431.2]

Menu utama merupakan antarmuka awal saat aplikasi dijalankan setelah spalshscrean. Pada halaman ini terdapat dua kondisi, yaitu pencarian Indonesia-Karo dan Karo-Indonesia. Menu utama juga menampilkan keseluruhan data yang telah dimasukkan dalam database dalam bentuk listview. Menu utama dapat dilihat pada gambar 4.2

Gambar 4.2 Menu Utama Aplikasi

4.2.3. Menu Navigasi

(43)
[image:43.612.263.384.78.288.2]

Gambar 4.3 Menu Navigasi Aplikasi

4.2.4. Menu Bantuan

Pada menu Bantuan menampikan kalimat bantuan untuk memberikan arahan kepada user dalam menggunakan kamus. Menu bantuan dapat dilihat pada gambar 4.4.

[image:43.612.258.385.409.608.2]
(44)

4.2.5. Menu i-Karo

[image:44.612.265.384.157.363.2]

Pada menu i-Karo menampikan informasi tentang 5 induk suku Karo. Menu i-Karo dapat dilihat pada gambar 4.5

Gambar 4.5 Menu i-Karo

4.2.6. Menu Perpustakaan

Pada menu perpustakaan terdapat TextView untuk menampilan data bahasa Indonesia-Karo. Menu Pengaturan dapat dilihat pada gambar 4.6

[image:44.612.265.382.483.682.2]
(45)

4.2.7. Menu Tentang

[image:45.612.259.389.158.376.2]

Pada menu Tentang terdapat Image gallery untuk menampilkan gambar tentang informasi penulis, Menu tentang dapat dilihat pada gambar 4.7

(46)

4.3. Pengujian

Pengujian sistem dilakukan untuk memastikan sistem setelah dibangun dapat berjalan dengan baik sesuai dengan analisis dan perancangan yang telah dirancang. Fokus utama pada pengujian penilitian ini adalah mengetahui bagaimana kinerja sistem dalam pencarian string pada kamus bahasa Indonesia-Karo menggunakan algoritma Reverse Colussi

4.3.1. Pengujian Pencarian string pada kamus

Pada Tabel dibawah terlihat hasil pencarian string pada kamus bahasa Indonesia-Karo menggunakan algoritma Reverse Colussi, dengan waktu pencarian sebanyak rata-rata adalah 143.0 milidetik dan besar komparasi dipengaruhi oleh panjang pattern.

Tabel 4.9 Hasil percobaan pencarian string pada kamus (1)

No String yang dicari Hasil Pencarian Gambar Hasil Pencarian

1 Dapat Ditemukan string

sebanyak : 1 Hasil banyak

Komparasi:1920 kali Waktu proses: 173.0 milidetik

[image:46.612.123.530.334.639.2]
(47)

Tabel 4.10 Hasil percobaan pencarian string pada kamus (2)

No String yang dicari Hasil Pencarian Gambar Hasil Pencarian

2 Dat Ditemukan string

sebanyak : 5 Hasil banyak

Komparasi:2844 kali Waktu proses: 103.0 milidetik

Pencarian di menu Karo-Indonesia

3 Makan Ditemukan string

Sebanyak : 2 Hasil banyak

komparasi :1999 kali Waktu proses: 145.0 milidetik

[image:47.612.120.527.98.661.2]
(48)
[image:48.612.123.528.96.665.2]

Tabel 4.11 Hasil percobaan pencarian string pada kamus (3)

No String yang dicari Hasil Pencarian Gambar Hasil Pencarian

4 Belang Ditemukan string

sebanyak : 0 Hasil banyak Komparasi: 1175 kali

Waktu proses: 141.0 milidetik

Pencarian di menu Indonesia - Karo

5 Man Ditemukan string

Sebanyak : 17 Hasil banyak komparasi : 2989 kali

Waktu proses: 145.0 milidetik

(49)

Tabel 4.12 Hasil percobaan pencarian string pada kamus (4)

No String yang dicari Hasil Pencarian Gambar Hasil Pencarian

6 Gelar Ditemukan string

sebanyak : 1 Hasil banyak Komparasi: 1839 kali

Waktu proses: 123.0 milidetik

Pencarian di menu Karo-Indonesia

7 Terang Ditemukan string

Sebanyak : 1 Hasil banyak komparasi : 1208 kali

Waktu proses: 171.0 milidetik

[image:49.612.120.528.101.677.2]
(50)

KESIMPULAN DAN SARAN

5.1 Kesimpulan

Berdasarkan pembahasan dan hasil dari penelitian, maka diperoleh beberapa kesimpulan sebagai berikut:

1. Algoritma Reverse Colussi berhasil diimplemetasikan pada aplikasi kamus bahasa Indonesia-Karo berbasis android.

2. Besar perbandingan karakter ( komparasi ) dalam algoritma Reverse Colussi dipengaruhi oleh panjang pattern.

3. Waktu dalam proses pencarian string pada kamus Indonesia-Karo rata-rata 143.0 milidetik.

5.2 Saran

Berikut ini adalah saran yang dapat digunakan untuk tahap pengembangan penelitian sistem ini yaitu:

1. Untuk pengembangan selanjutnya, diharapkan aplikasi ini menyediakan menu pilihan algoritma pencarian string dalam proses pencarian seperti Colussi dan Booyer-Moore, karena algoritma Reverse Colussi merupakan perbaikan dari Booyer-Moore dan idenya sendiri beasal dari Colussi . Sehingga memberi pengetahuan pengguna tentang perbedaan peforma dari setiap algoritma yang disebutkan.

(51)

BAB 2

TINJAUAN PUSTAKA

2.1. Algoritma

String Matching

Algoritma

string matching

merupakan komponen dasar dalam pengimplementasian

berbagai perangkat lunak praktis yang sudah ada.

String

matching digunakan untuk

menemukan satu atau lebih

string

yang disebut dengan

pattern

(

string

yang akan

dicocokkan ke dalam

text

) dalam

string

yang disebut dengan

text

(

string

yang diinput)

(Charras & Lecroq 2004).

Pengertian

string

menurut

Dictionary of Algorithms and Data Structures, National

Institute of Standards and Technology (NIST)

adalah susunan dari karakter-karakter

(angka, alfabet atau karakter yang lain) dan biasanya direpresentasikan sebagai struktur

data

array

.

String

dapat berupa kata, frase, atau kalimat. Pencocokan

string

merupakan

bagian penting dari sebuah proses pencarian

string

(

string searching

) dalam sebuah

dokumen. Hasil dari pencarian sebuah

string

dalam dokumen tergantung dari teknik atau

cara pencocokan

string

yang digunakan. Pencocokan

string (string matching)

menurut

Dictionary of Algorithms and Data Structures, National Institute of Standards and

Technology (NIST),

diartikan sebagai sebuah permasalahan untuk menemukan pola

susunan karakter

string

di dalam

string

lain atau bagian dari isi teks (Munir & Syahroni

2005). Setiap algoritma string matching memiliki kelebihan serta kekurangan dalam

(52)

2.2. Algoritma

Reverse Colussi

Algoritma merupakan urutan langkah-langkah untuk menyelesaikan masalah yang

disusun secara sistematis. Algoritma

Reverse Colussi

merupakan satu dari sekian banyak

algoritma

string matching

atau sering disebut pencocokan string. Algoritma

Reverse

Colussi

merupakan perbaikan dari algoritma

Boyer – Moore

dan idenya berasal dari

Colussi

. Proses pencocokan tiap-tiap karakter pada algoritma

Reverse Collusi

menggunakan sepasang karakter yang telah didefinisikan pada tabel

rcBc

dan

rcGs

.

Algoritma

Reverse Colussi

mempunyai posisi ke dalam dua kategori yakni

special

position

dan

non-special position.

Dimana

special position

akan diproses terlebih dahulu.

Algoritma

Reverse Colussi

terdiri dari dua fase, yaitu fase pemrosesan awal dan fase

pencarian. Pada fase pemrosesan awal dilakukan pencarian sepasang karakter,

special

position,

dan

non-special position

untuk menentukan pergeseran

pattern

. Pada fase

pencarian, dilakukan operasi pencocokan

pattern

terhadap teks.

Reverse Colussi

mempunyai 2 tabel untuk menentukan dan menemukan dalam

pencocokan string, yakni tabel rcBc, dan rcGs (Admizan, 2014). Perbandingan dilakukan

dalam urutan tertentu yang diberikan oleh fase pemrosesan awal .Waktu dari algoritma

Reverse Colussi

pada fase

preprocessing

adalah O(m

2

) dan fase pencarian adalah O(n)

(Hussain, et al. 2013).

Proses inti pencarian Algoritma

Reverse Colussi

yaitu dilakukan dengan teknik

random

dimana teknik ini memungkinankan pengecekan karakter selalu dari ujung kanan

karakter dan pengecekan selanjutnya ditentukan oleh nilai tabel

h

yang sudah

didefinisikan (Charras & Lecroq 2004).

Langkah pertama yang dilakukan adalah tahapan

preprocessing

yaitu meciptakan

dua buah tabel

shif /

pergesaran

rcBc (

Reverse Colussi Bad Character)

&

rcGs

(Reverse

Colussi Good Suffixes).

Kedua tabel ini diciptakan merujuk kepada

pattern

yang akan

dicari oleh karena itu jika

pattern

berubah maka tabel juga akan berubah. Hasil

preprocessing

untuk

pattern

TAMAT

dari teks

TATOMATAMATANGGA

terlihat

(53)

2.2.1. Fase Pemrosesan Awal

Fase ini bertujuan untuk menetukan

special positition

dan juga

non-special position

menggunakan tabel

rcGs

(

Reverse Colussi Get suffix

), pencarian sepasang karakter

menggunakan tabel

rcBc

(

Reverse Colussi Bad character

). Untuk melakukan pencarian

sepasang karakter , langkah yang harus dilakukan pertama kali adalah membuat tabel

loccated.

2.2.1.1. Tabel loccated

Tabel ini berfungsi untuk melakukan perwakilan karakter dari setiap pattern yang

dimasukkan , setelah itu karakter yang di dapat akan menjadikan karakter tersebut ke

dalam tabel rcBc. Syarat menentukan tabel

loccated

adalah sebagai berikut :

1.

Mengambil perwakilan karakter dari pattern , dan dimulai dari kiri tabel.

2.

Nilai awal dari tiap-tiap karakter adalah (-1) , sebelum angka tersebut

digantikan oleh index, index dimulai dari 0.

3.

Menentukan tabel loccated dimulai dari panjang

pattern

(m) dikurangi 1

Tabel 2.1 Nilai

loccated

indeks 0 1 2 3 4 char A M T *

pattern T A M A T locc 3 2 0 -1

2.2.1.2. Tabel rcBc

Dalam membuat tabel r

cBc

, tabel ini berfungsi untuk menampung pencarian sepasang

karakter, dengan syarat :

1.

Karakter (

present matched charcter

) yang digunakan adalah perwakilan dari

(54)

3.

Bila ditemukan sepasang karakter , ambil jumlah sisa karakter dari pattern tersebut

untuk mengisi nilai .

[image:54.612.138.548.158.531.2]

4.

Dimulai dari m-1( 5-1), berarti dimulai dari karakter ke 4

Tabel 2.2 Pencarian nilai rcBc (1)

Pattern : TAMAT Panjang : 5

A

A A 5

M A 3

A A 3

T A 1

* A 1

Pattern : TAMAT Panjang : 5

M

A M 2

M M 5

A M 2

T M 2

(55)

Pattern : TAMAT Panjang : 5

T

A T 4

M T 4

A T 4

T T 4

* T 4

Pattern : TAMAT Panjang : 5

*

A * 5

M * 5

A * 5

T * 5

* * 5

[image:55.612.137.547.97.480.2]

Ketika proses pencarian sepasang karakter selesai , langkah selanjutnya adalah

melakukan pengisian dari nilai tabel diatas ke dalam tabel rcBc.

Tabel 2.4 Nilai

tabel

rcBc

1

2

3

4

5

A

5

3

3

1

2

M

2

5

2

2

2

T

4

4

4

4

4

*

5

5

5

5

5

Character

[image:55.612.135.520.562.673.2]

Length

(56)

Setelah tabel

rcBc

terbentuk proses selanjutnya adalah membuat tabel

rcGs

. Sebelum

tabel

rcGs

terbentuk ada beberapa tabel yang harus dibuat, yakni tabel

link, hmin , kmin,

rmin,

dan terakhir adalah

rcGs

beserta tabel

h,

dimana tabel

h

berfungsi untuk

menentukan atau melakukan pengecekan karakter pertama kali yang harus di cek pada

saat fase pencocokan

pattern

(Haryadi, 2011).

2.2.1.3. Tabel link

Untuk mengisi tabel

link

ada bebrapa point yang harus diperhatikan adalah sebagai

berikut:

1.

link

dari 0 adalah (-1)

2.

Bila belum pernah jumpa ,nilai link diberi nilai (-1)

[image:56.612.147.504.391.719.2]

3.

link

(n) adalah loccated dari nilai terakhir .

4.

located

awal proses dimulai dari 0

Tabel 2.5 Pencarian nilai tabel

link

Pattern : TAMAT

Panjang : 5

Ada 4 pasangan yaitu[ [TA] [AM] [MA] [AT] ]

T A M A T

0 1 2 3 4

TA

Link [A] = -1

Locc [T] = 0

AM

Link [M] = -1

Locc [A] = 1

MA

Link [A] = 1

Locc [M] = 2

AT

Link [T] = 0

Locc [A] = 3

i 0 1 2 3 4 5

p (i) T A M A T

(57)

2.2.1.4. Tabel hmin

Tabel

hmin

berfungsi untuk menampung atau menyimpan jumlah pergeseran untuk

setiap

special position

, berikut persyaratannya :

1.

Nilai indeks 0 adalah 0

2.

Proses ini bertujuan mencari karakter yang tidak sama , lalu nilai diambil dari

indek karakter tersebut.

3.

Apabila karakter yang dicari selalu sama atau tidak dapat maka nilai akan

[image:57.612.107.545.310.675.2]

diberikan dari panjang pattern, yakni 4.

Tabel 2.6 Pencarian nilai tabel

hmin

Pattern : TAMAT

Panjang : 5

Mencari karakter yang sama

T A M A T

0 1 2 3 4

I 0 1 2 3 4 5

p (i) T A M A T

hmin (i) 0 4 4 4 3 4

Indek/

posisi

1

2

3

4

5

4

(58)

2.2.1.5

. Tabel kmin

Fungsi dari tabel

kmin

untuk membantu mengambil nilai dari

rmin

nanti , dimana syarat

dari tabel ini adalah :

1.

Proses dari kanan ke kiri , dan isi semua nilai dengan nilai 0,

2.

Panjang

pattern

(m) = 5 , k (

kmin

) , 5

1,

3.

kmin

[

hmin

[k]] = k ,

[image:58.612.106.548.256.617.2]

4.

Ambil

kmin

dari terakhir kali dieksekusi.

Tabel 2.7 Pencarian nilai tabel

kmin

Pattern : TAMAT

Panjang : 5

Mencari nilai

kmin

K=5

kmin[hmin[k]] = k

kmin[hmin[5]] = 5

kmin [4] = 5

K=4

kmin[hmin[k]] = k

kmin[hmin[4]] = 4

kmin [3] = 4

K=3

kmin[hmin[k]] = k

kmin[hmin[3]] = 3

kmin [4] = 3

K=2

kmin[hmin[k]] = k

kmin[hmin[2]] = 2

kmin [4] = 2

K=1

kmin[hmin[k]] = k

kmin[hmin[1]] = 1

kmin [4] = 1

(59)

2.2.1.6

. Tabel rmin

Tabel

rmin

berfungsi untuk menampung nilai pergeseran dari

non-special position

,

dimana proses ini dilakukan dari kiri ke kanan dengan syarat :

1.

i = m-1 , i >=0

2.

hmin [i +1] == i

[image:59.612.136.576.149.672.2]

r = i + 1

rmin [i] = r

Tabel 2.8 Pencarian nilai tabel

rmin

Pattern : TAMAT

Panjang : 5

Mencari nilai

rmin

indeks 0 1 2 3 4 5

p (i) T A M A T

rmin (i) 4 4 4 4 5 0

Jadi langkah awal dimulai dari i(indeks)

m-1 = 5-1=4 ; m=4

0

i= 4

(hmin [i +1] == i)

hmin [4+1] == 4

hmin [5] == 4

isi rmin dengan nilai r

rmin [4] = 5

r = i + 1

r = 5

i= 3

(hmin [i +1] == i)

hmin [3+1] == 3

hmin [4] == 3

isi rmin dengan nilai r

rmin [3] = 4

r = i + 1

r = 4

i= 2

hmin [i +1] == i

hmin [2+1] == 2

hmin [3] == 2

rmin [2] = 4

i= 1

hmin [i +1] == i

hmin [1+1] == 1

hmin [2] == 1

rmin [1] = 4

i= 0

hmin [i +1] == i

(60)

2.2.1.7

Tabel rcGs dan h

Tabel

rcGs

ini berfungsi untuk menampung nilai pergeseran atupun pencocokan karakter.

Nilai

rcGs

didapat bersamaan dengan nilai

h

, tabel

h

bertujuan untuk melakukan

pengecekan

Special

karakter yang harus pertama kali dicek pada saat melakukan

[image:60.612.126.526.222.723.2]

pencocokan

string

(Haryadi, 2011). Berikut persyaratan komputasi dari tabel

rcGs

dan

h

.

Tabel 2.9 Pencarian nilai tabel

rcGs dan h

Komputasi untuk mengambil nilai tabel rcGs (Charras & Lecroq 2004)

i = 1

for (k = 1 , k <= m , ++k)

if (hmin[k] != m-1 && kmin[hmin[k]] == k ) {

h[i] = hmin [k]

rcGs [i++] = k

}

i = m-1

for ( j= m-2 , j>= 0, --j)

if (kmin[j] == 0 ) {

h [i] = j

rcGs [i--] = rmin[j]

}

rcGs[m] = rmin [0]

}

Proses Dimulai dari indeks =1 K = 1 5

K=1 hmin [k] != m-1 hmin [1] != 4 4 != 4

FALSE , lanjut ke langkah selanjutnya K=2 hmin [k] != m-1

hmin [2] != 4 4 != 4

FALSE , lanjut ke langkah selanjutnya K=3 hmin [k] != m-1

hmin [3] != 4 4 != 4

FALSE , lanjut ke langkah selanjutnya K=4 hmin [k] != m-1

hmin [4] != 4 3 != 4

Ubah nilai h[i] h[i] = hmin [k] h[1]= hmin [4]

(61)

Kmin [hmin[k]]== k Kmin[3]==4

4 == 4

True , masuk ke langkah pemberian nilai rcgs dan h

rcGs[i++] =k

rcGs [1] = 4 // nilai rcGs 1 sudah terisi

i = i +1= 2 K=5 hmin [k] != m-1

hmin [5] != 4 4 != 4

Kmin [hmin[k]]== k Kmin[4]==5

1 == 5

False,Lanjut ke kondisi selanjutnya

Lanjut ke kondisi selanjutnya Proses i =m-1 i = 4 m =5 j== m-2

--j = 3 0 J=3 Kmin [j]==0

Kmin[3] == 0 4 == 0

False, lanjut kelangkah selanjutnya J=2 Kmin [j]==0

Kmin[2] == 0 0 == 0

True, lanjut kelangkah selanjutnya

h[i] = j

h[4] = 2 // nilai h dari 4 adalah 2

rcGs = [i--] rcGs[4] = rmin [j] rcGs[4] = rmin [2]

rcGs[4] = 4 // nilai rcGs 4 adalah 4

J=1 Kmin [j]==0 Kmin[1] == 0 0 == 0

True, lanjut kelangkah selanjutnya

h[i] = j

h[3] = 1 // nilai h dari 3 adalah 1

rcGs = [i--] rcGs[3] = rmin [j] rcGs[3] = rmin [1]

rcGs[3] = 4 // nilai rcGs 3 adalah 4

J=0 Kmin [j]==0 Kmin[0] == 0 0 == 0

True, lanjut kelangkah selanjutnya

h[i] = j

h[2] = 0 // nilai h dari 2 adalah 0

rcGs = [i--] rcGs[2] = rmin [j] rcGs[2] = rmin [0]

rcGs[2] = 4 // nilai rcGs 2 adalah 4

rcGs rcGs (m) = rmin [0]

rcGs 5= 4

Notes:

(62)

Setelah proses fase pemrosesan awal selesai maka didapat tabel

rcGs

beserta

tabel

h

[image:62.612.169.481.488.688.2]

seperti tabel 2.8 berikut :

Tabel 2.10 Tabel

rcGs

i 0 1 2 3 4 5

p(i) T A M A T

link(i) -1 -1 -1 1 0

hmin(i) 0 4 4 4 3 4

kmin(i) 0 0 0 4 1 0

rmin(i) 4 4 4 4 5 0

rcGs(i) 0 4 4 4 4 4

h(i) 3 0 1 2

2.2.2

Fase pencocokan pattern

Setelah tabel rcBc dan rcGs selesai terbentuk , pencocokan pattern dilakukan berdasarkan

nilai dari kedua tabel tersebut. Pada algoritma

Reverse Colussi ,

perbandingan karakter

dilakukan dengan menggunakan urutan tertentu yang didapat dari tabel

h

.

Untuk

menentukan pengecekan pada lompatan pada saat melakukan pencocokan string

membutuhkan tabel

h,

gambaran pengecekan karakter dapat dilihat pada gambar 2.

Gambar

Gambar 3.8 Rancangan Menu Utama
Gambar 3.9 Rancangan Menu Navigasi
Gambar 3.11 Rancangan Menu i-Karo
Gambar 3.12 Rancangan  Menu Perpustakaan
+7

Referensi

Dokumen terkait

Adapun media yang cocok digunakan untuk menjawab semua permasalahan diatas adalah dengan membangun aplikasi kamus berbasis android dengan menerapkan algoritma

Tujuan penelitian ini adalah Mengimplementasikan sebuah algoritma yaitu algoritma Colussi kedalam sebuah kamus biologi dan Menciptakan Aplikasi yang dapat

1 Peserta terbaik putri dalam acara TRICK VIII 2012 2 Peserta terbaik putri dalam acara TRAP VIII 2012 3 Juara III Lomba Menghafal Al-Quran tingkat Se-Universitas (USU)

Penelitian ini menyimpulkan algoritma Rabin - Karp dapat digunakan dalam memberikan rekomendasi dokumen teks terkait yang memiliki kesamaan kata secara otomatis dengan hasil

Halaman pencarian adalah halaman yang menampilkan semua hasil dari satu kata yang di- input-kan dan hasil yang muncul adalah semua kata-kata yang terkandung dari

Pada Tampilan menu kata ditemukan pada gambar dibawah ini, pengguna telah memasukan kata atau istilah di list inputan kemudian ditekan button “CARI”, apabila

Knuth-Morris-Pratt, metode ini mencari kehadiran sebuah kata dalam teks dengan melakukan observasi awal (preprocessing) dengan cara mengecek ulang kata

Saat pertama kali membuka aplikasi kamus yang berbasis Android Mobile ini, maka user akan masuk ke menu utama yang dimana urutan nya pling atas adalah bahasa