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); }
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);
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;
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;
/* 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) {
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;
}
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)
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();
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
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>
<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***/
<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***/
<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" />
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
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
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
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.
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.
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.
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
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
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
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
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.
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
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
3.4.1. Flowchart System
Flowchart dari sistem yang akan dibangun dapat di lihat pada Gambar 3.5
3.4.2. Flowchart Algoritma
Pada gambar 3.6 berikut ini merupakan flowchart dari algoritma Reverse Colussi (Charras & Lecroq 2004).
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
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
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
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]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
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
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
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.
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
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
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
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
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.
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
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]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]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
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]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]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
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]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.
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
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
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
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
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
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
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
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
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
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]
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:
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.