Perbandingan Algoritma Boyer-Moore Dan Algoritma Rabin Karp Pada Pencarian Teks Dalam Undang Undang Perlindungan Anak
LISTING PROGRAM
1. MainActivity.class
import android.content.Intent; import android.os.Handler;
import android.support.v7.app.AppCompatActivity; import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
int SPLASH_TIME_OUT = 3000; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); new Handler().postDelayed(new Runnable() { @Override
public void run() {
Intent i = new Intent(MainActivity.this, MenuActivity.class);
startActivity(i);
finish(); // no history }
}, SPLASH_TIME_OUT); }
}
2. MenuActivity.class
import android.content.Intent; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View;
import android.widget.Button;
public class MenuActivity extends AppCompatActivity {
private Button startButton; private Button aboutButton;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState);
(2)
startButton = (Button) findViewById(R.id.start_button); aboutButton = (Button) findViewById(R.id.about_button);
startButton.setOnClickListener(startClickListener);
aboutButton.setOnClickListener(aboutClickListener); }
View.OnClickListener startClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(MenuActivity.this, SearchActivity.class);
startActivity(i); }
};
View.OnClickListener aboutClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(MenuActivity.this, AboutActivity.class);
startActivity(i); }
}; };
3. AboutActivity.class
import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity;
public class AboutActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about); }
(3)
4. BoyerMoore.class
package com.tongam.uupa;
import java.util.HashMap; import java.util.Map;
public class BoyerMoore {
private String pattern; private String text;
private int foundedAt = 0; private long duration = 0;
public BoyerMoore(String pattern, String text) { this.pattern = pattern;
this.text = text; }
public int getFoundedAt() { return foundedAt;
}
public long getDuration() { return duration;
}
private static void preBmBc(char[] x, int m, int bmBc[]) { int i;
for (i = 0; i < bmBc.length; ++i) bmBc[i] = m;
for (i = 0; i < m - 1; ++i) bmBc[x[i]] = m - i - 1; }
private static int[] suffixes(char[] x, int m) { int f=0, g, i;
int suff[] = new int[m]; suff[m - 1] = m;
g = m - 1;
for (i = m - 2; i >= 0; --i) {
if (i > g && suff[i + m - 1 - f] < i - g) suff[i] = suff[i + m - 1 - f];
else {
if (i < g) g = i; f = i;
while (g >= 0 && x[g] == x[g + m - 1 - f]) --g;
(4)
} }
return suff; }
private static void preBmGs(char[] x, int m) { int i, j;
int suff[] = suffixes(x, m); for (i = 0; i < m; ++i) bmGs[i] = m;
j = 0;
for (i = m - 1; i >= 0; --i) if (suff[i] == i + 1)
for (; j < m - 1 - i; ++j) if (bmGs[j] == m)
bmGs[j] = m - 1 - i; for (i = 0; i <= m - 2; ++i)
bmGs[m - 1 - suff[i]] = m - 1 - i; }
static int[] bmGs; static int[] bmBc;
public boolean check2() {
long startMillis = System.currentTimeMillis(); long endMillis = 0;
boolean result = false; int n = text.length(); int m = pattern.length(); char[] y = text.toCharArray(); char[] x = pattern.toCharArray(); int i, j;
bmGs = new int[m]; bmBc = new int[256]; //Preprocessing preBmGs(x, m);
preBmBc(x, m, bmBc); //Searching
j = 0;
while (j <= n - m) {
for (i = m - 1; i >= 0 && x[i] == y[i + j]; --i); if (i < 0) {
j += bmGs[0];
(5)
endMillis = System.currentTimeMillis(); this.duration = endMillis - startMillis; result = true;
} else
j += java.lang.Math.max(bmGs[i], bmBc[y[i + j]] - m + 1 + i);
}
return result; }
}
5. RabinKarp.class
public class RabinKarp {
private int foundedAt = 0; private String pattern; private String text;
private long duration = 0;
public RabinKarp(String pattern, String text) { this.pattern = pattern;
this.text = text; }
// Mengambil posisi index public int getFoundedAt() { return foundedAt;
}
// Mengambil durasi pencarian public long getDuration() { return duration;
}
public boolean check() {
long startMillis = System.currentTimeMillis(); long endMillis = 0;
boolean result = false;
double patternHash = getHash(pattern); int patternLength = pattern.length(); int textLength = text.length();
int startIndex = 0;
int endIndex = patternLength; while(endIndex <= textLength) {
String matchText = text.substring(startIndex, endIndex); double matchTextHash = getHash(matchText);
(6)
// apakah hash sesuai?
if(patternHash == matchTextHash) {
// apakah seluruh karakter sesuai dengan pattern if(pattern.equals(matchText)){
this.foundedAt = startIndex;
// hitung durasi
endMillis = System.currentTimeMillis(); this.duration = endMillis - startMillis; // beritahu hasil pencarian ditemukan! result = true;
break; }
}
// maju per satu index posisi karakter startIndex += 1;
endIndex += 1; /*
OR...
startIndex += patternLength; endIndex += patternLength; */
}
return result; }
public double getHash(String text) {
double hashValue = 0; int base = 5;
// Log.i("AndroidRuntime HASH", text); for(long i = 0; i < text.length(); i++) {
char character = text.charAt((int) i); int ascii = (int) character;
int exponent = ((int) ((text.length()-1)-i)); double pow = Math.pow(base, exponent);
double hash = (ascii * pow);
// Log.i("AndroidRuntime RES", ascii + " * " + base + " ^ " + exponent + " = " + hash);
(7)
}
return hashValue; }
}
5. MenuActivity.class
import android.content.Intent; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View;
import android.widget.Button;
public class MenuActivity extends AppCompatActivity {
private Button startButton; private Button aboutButton;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
startButton = (Button) findViewById(R.id.start_button); aboutButton = (Button) findViewById(R.id.about_button);
startButton.setOnClickListener(startClickListener); aboutButton.setOnClickListener(aboutClickListener); }
View.OnClickListener startClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(MenuActivity.this, SearchActivity.class);
startActivity(i); }
};
View.OnClickListener aboutClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(MenuActivity.this, AboutActivity.class);
(8)
startActivity(i); } }; }; 6. UUAdapter import android.content.Context; import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; import android.widget.Toast; import java.util.List;
public class UUAdapter extends ArrayAdapter<UUModel> {
public UUAdapter(Context context, int resource, List<UUModel> objects) {
super(context, resource, objects); }
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final UUModel uuModel = getItem(position); if(convertView == null){
convertView =
LayoutInflater.from(getContext()).inflate(R.layout.list_item_layout, parent, false);
}
TextView nameTextView = (TextView) convertView.findViewById(R.id.name_text_view); nameTextView.setText(uuModel.name);
convertView.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) {
Intent contentIntent = new Intent(getContext(), ContentActivity.class);
contentIntent.putExtra("name", uuModel.name);
contentIntent.putExtra("pattern", uuModel.pattern); contentIntent.putExtra("content_lines",
uuModel.contentLines);
contentIntent.putExtra("pos", uuModel.pos); getContext().startActivity(contentIntent);
(9)
} }); return convertView; } } 7. UUModel
public class UUModel {
public String bab; public String name; public String pattern;
public String[] contentLines; public int[] pos;
public UUModel(String bab, String name, String pattern, String[] contentLines, int[] pos) {
this.bab = bab; this.name = name;
this.pattern = pattern;
this.contentLines = contentLines; this.pos = pos;
} } 8. SearchActivity.class package com.tongam.uupa; import android.content.res.Resources; import android.os.Bundle; import android.provider.MediaStore;
import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import org.w3c.dom.Text; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List;
(10)
public class SearchActivity extends AppCompatActivity {
private ListView listView;
private TextView statusTextView; private EditText searchEditText; private Button boyerMoreButton; private Button rabinKarpButton; private ArrayList<UUModel> uuModels; private UUAdapter uuAdapter;
private int MAX_CHAPTER = 14; @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search); // initialisasi view
listView = (ListView) findViewById(R.id.item_list_view); statusTextView = (TextView)
findViewById(R.id.status_text_view); searchEditText = (EditText) findViewById(R.id.search_edit_text); boyerMoreButton = (Button) findViewById(R.id.boyer_more_button); rabinKarpButton = (Button) findViewById(R.id.rabin_karp_button);
// initial variable array list dengan item UUModel uuModels = new ArrayList<UUModel>();
// initial adapter dengan data list uuModels uuAdapter = new UUAdapter(this, 0, uuModels); // pasangkan adapter ke listview
listView.setAdapter(uuAdapter);
// event saat tombol pencarian dengan boyer moore di klik boyerMoreButton.setOnClickListener(new
View.OnClickListener() { @Override
public void onClick(View view) { //ngasih status searching
statusTextView.setText("Searching..."); statusTextView.setVisibility(View.VISIBLE); //menghapus pencarian lama
uuModels.clear(); uuAdapter.clear();
//mengambil kata dari kata yg di input lali di konvert ke string
(11)
String pattern =
searchEditText.getText().toString().toLowerCase();
//jika tdk memasukkan kata maka beri peringatan "silahkan isi kata yang dicari."
if (pattern.isEmpty()) {
Toast.makeText(SearchActivity.this, "Silahkan isi kata yang dicari.", Toast.LENGTH_SHORT).show();
} else {
//inisialisasi running time awal long startMillis =
System.currentTimeMillis();
long endMillis = 0; int banyak_kata=0;
for (int i = 1; i <= MAX_CHAPTER; i++) { //membaca bab di folder resourse/raw dari bab1 smp dgn 14
InputStream inputStream = getResources().openRawResource(
getResources().getIdentifier("bab_" + i,
"raw", getPackageName()));
//baca isi file String content = readTextFile(inputStream);
//pisahkan content per baris String[] contentLines = content.split("\r\n");
//inisialisasi posisi
int[] pos = new int[contentLines.length];
// search per lines
boolean founded = false; //anggap belum ditemukan
for(int j = 0; j < contentLines.length; j++){
//inisial pencarian boyer moore BoyerMoore bm = new
BoyerMoore(pattern, contentLines[j].toLowerCase());
//inisial awal -1(anggap belum ditemukan
pos[j] = -1; // match found? if (bm.check2()) {
// set posisi dgn apa yg ditemukan oleh bm
pos[j] = bm.getFoundedAt(); //beritahu bahwa sdh ada yg ketemu
founded = true; banyak_kata++;
(12)
} }
//jika ketemu... if(founded){
//set data yg sdh ketemu pada UUmodel UUModel uuModel = new UUModel("" + i, "BAB " + i, pattern, contentLines, pos);
//tambah kan ke list UUModels uuModels.add(uuModel);
} }
endMillis = System.currentTimeMillis(); // update data
uuAdapter.notifyDataSetChanged(); // set status text
if(uuModels.size() > 0){
DecimalFormat formatter = new DecimalFormat("#,###");
statusTextView.setText("Terdapat " + uuModels.size() + " bab, "+banyak_kata+" kata dengan durasi " + formatter.format((endMillis-startMillis)) + "ms");
}else{
statusTextView.setText("Tidak ditemukan kata yang dicari");
} } } }); rabinKarpButton.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) {
statusTextView.setText("Searching..."); statusTextView.setVisibility(View.VISIBLE); uuModels.clear();
uuAdapter.clear(); String pattern =
searchEditText.getText().toString().toLowerCase(); if (pattern.isEmpty()) {
Toast.makeText(SearchActivity.this, "Silahkan isi kata yang dicari.", Toast.LENGTH_SHORT).show();
} else {
long startMillis = System.currentTimeMillis();
long endMillis = 0; int banyak_kata=0;
(13)
for (int i = 1; i <= MAX_CHAPTER; i++) { InputStream inputStream =
getResources().openRawResource(
getResources().getIdentifier("bab_" + i,
"raw", getPackageName()));
String content = readTextFile(inputStream);
String[] contentLines = content.split("\r\n");
int[] pos = new int[contentLines.length]; // search per lines
boolean founded = false;
for(int j = 0; j < contentLines.length; j++){
RabinKarp rk = new RabinKarp(pattern, contentLines[j].toLowerCase());
pos[j] = -1; // match found? if (rk.check()) {
pos[j] = rk.getFoundedAt(); founded = true;
banyak_kata++; }
}
if(founded){
UUModel uuModel = new UUModel("" + i, "BAB " + i, pattern, contentLines, pos);
uuModels.add(uuModel); }
}
endMillis = System.currentTimeMillis(); // update data
uuAdapter.notifyDataSetChanged(); // set status text
if(uuModels.size() > 0){
DecimalFormat formatter = new DecimalFormat("#,###");
statusTextView.setText("Terdapat " + uuModels.size() + " bab, "+banyak_kata+" kata dengan durasi " + formatter.format((endMillis-startMillis)) + "ms");
}else{
statusTextView.setText("Tidak ditemukan kata yang dicari");
} }
(14)
} }); }
private String readTextFile(InputStream inputStream) { ByteArrayOutputStream outputStream = new
ByteArrayOutputStream();
byte buf[] = new byte[1024]; int len;
try {
while ((len = inputStream.read(buf)) != -1) { outputStream.write(buf, 0, len);
}
outputStream.close(); inputStream.close(); } catch (IOException e) { } return outputStream.toString(); } } 9. ContentActivity.class import android.content.Intent; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.text.Spannable; import android.text.style.BackgroundColorSpan; import android.widget.LinearLayout; import android.widget.TextView;
public class ContentActivity extends AppCompatActivity {
private LinearLayout contentLinearLayout; @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState);
Intent intent = getIntent();
String name = intent.getStringExtra("name");
String pattern = intent.getStringExtra("pattern"); String[] contentLines =
intent.getStringArrayExtra("content_lines");
int[] pos = intent.getIntArrayExtra("pos"); setContentView(R.layout.activity_content);
(15)
contentLinearLayout = (LinearLayout) findViewById(R.id.content_linear_layout);
for(int i = 0; i < contentLines.length; i++){ TextView lineTextView = new TextView(this);
lineTextView.setLayoutParams(new ActionBar.LayoutParams( ActionBar.LayoutParams.MATCH_PARENT,
ActionBar.LayoutParams.WRAP_CONTENT)); if(pos[i] >= 0){
Spannable spanText =
Spannable.Factory.getInstance().newSpannable(contentLines[i]); spanText.setSpan(new
BackgroundColorSpan(0xFFFFFF00), pos[i], (pos[i] + pattern.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); lineTextView.setText(spanText);
}else{
lineTextView.setText(contentLines[i]); }
contentLinearLayout.addView(lineTextView); }
} }
(16)
CURRICULUM VITAE
Data Pribadi
Nama : Pradita Oktaviani
Tempat/Tanggal Lahir : PekanBaru/ 21 Oktober 1994 Tinggi/Berat Badan : 165 cm / 45 kg
Agama : Islam Kewarganegaraan : Indonesia
Alamat Sekarang : Jl. Stasiun Gg TriKarya No.10 Medan Alamat Orang Tua : Jl. Stasiun Gg TriKarya No.10 Medan
Telp/ Hp : 085361420720
Email : [email protected]
--- Riwayat Pendidikan
[2010 – 2014] : S1 Ilmu Komputer Universitas Sumatera Utara, Medan [2007 – 2010] : SMA KARTIKA I-1 Medan
[2004 – 2007] : SMP KARTIKA I-2 Medan [1998 – 2004] : SD KARTIKA I-2 Medan
(17)
Keahlian/Kursus
Keahlian Komputer : Pemrograman : PHP,
Database : Microsoft Access,MySQL Desain : Adobe Photoshop, Coreldraw Multimedia : Adobe Flash
Perkantoran : Microsoft Office
--- Pengalaman Organisasi
[2007 – 2009] Pramuka SMP KARTIKA I-2 MEDAN
[2010 – 2012] Palang Merah Indonesia SMA KARTIKA I-1 MEDAN --- Pengalaman Kepanitiaan
-
--- Seminar
[2014] Seminar Nasional Literasi I for asi SENARAI Prestasi
(18)
DAFTAR PUSTAKA
Abdullah, N. 2010. Kekerasan Terhadap Anak “Bom Waktu” Masa Depan.Jurnal Psikoligis. 1(5): 6
Andres, N., Christopher. & Saloko, H. 2010. Penelaahan Algoritma Rabin-Karp dan Perbandingan Prosesnya dengan Algoritma Knut-Morris-Pratt. Jurnal Informatika. 2(1): 4.
Atmopawiro, A. 2014. Pengkajian dan Analsis Tiga Algoritma Efisien Rabin-Karp, Knuth-Morris-Pratt, dan Boyer-Moore dalam Pencarian Pola dalam Suatu Teks. Jurnal Komputer dan Informatika. 5(3):10.
Barakbah, A.R., Karlita, T. & Ahsan, A.S. 2013. Logika dan Algoritma. Jurnal UNIKOM. 4(2): 1-2.
Charras, C., & Thierry L. 2004. Handbook of Exact String-Matching Algorithms. College Publication.
Efendi, D., Hartono, T. & Kurniadi, A. 2013. Penerapan String Matching Menggunakan Boyer-Moore Pada Translator Bahasa Pascal Ke C. JurnalInformatika. 11(2): 271. Mona. ( Editor ). 2015. Undang-Undang Republik Indonesia Nomor 35 Tahun 2014 Tentang
Perubahan Atas Undang-Undang Republik Indonesia Nomor 23 Tahun 2002 Tentang Perlindungan Anak. Pustaka Gramedia : Yogyakarta.
Rahman, Astriyani. 2010. Eksploitasi Orang Tua Terhadap Anak Dengan Memperkerjakan Sebagai Buruh. Skripsi. Universitas Gunadharma.
Safaat, N. 2015. Android: Pemrograman Aplikasi Smartphone dan Tablet PC berbasis Android. 2nd. Informatika : Bandung.
Saniman & Fathoni, M. Pengantar Algoritma dan Pemrograman. Jurnal Informatika. 4(1) : 124.
(19)
BAB III
ANALISIS DAN PERANCANGAN
3.1 Analisis Sistem
Tahapan ini dilakukan untuk memaparkan pemahaman tentang sistem yang dibuat secara keseluruhan. Baik kinerja sistem maupun proses perancangan aplikasi pada sistem. pemahaman yang menyeluruh terhadap kebutuhan sistem sehingga diperoleh tugas-tugas yang akan dikerjakan sistem. Tahapan ini dilakukan agar pada saat proses perancangan aplikasi tidak terjadi kesalahan.
3.1.1 Analisis Masalah
Seringnya terjadi tindak kekerasan baik secara fisik, mental maupun sosial kepada anak yang dilakukan oleh orang-orang terdekat serta lingkungan sekitar mereka, membuat anak-anak merasa tidak aman untuk bisa bersosialisasi secara optimal. Kurangnya pemahaman anak Indonesia tentang hak-hak dan perlindungan yang sepantasnya mereka dapatkan oleh Negara menjadi masalah yang akan diselesaikan. Pencarian kata dalam menemukan pola string yang sama, menampilkan pada bab, pasal berapa saja yang mengandung string yang dicari dan mencari algoritma mana yang lebih baik dalam pencarian string, menjadi masalah yang akan diselesaikan.
Untuk membantu mengidentifikasi masalah di atas, maka di gunakan diagram Ishikawa (fishbone diagram). Diagram Ishikawa adalah sebuah alat grafis yang digunakan untuk menampilkan pendapat tentang komponen inti suatu kondisi di dalam organisasi. diagram Ishikawa juga dapat menemukan dan mengatasi masalah-masalah yang akan di hadapi. Dapat dilihat melalui gambar 3.1 diagram Ishikawa :
(20)
Sulit Mencari Kata Yang Diinginkan User Metode String Matching
Apa Yang Baik Digunakan
Mesin Yang Dapat Meng- Materi Yang Mudah Compile Di Android Diakses
Gambar 3.1 Diagram Ishikawa
3.1.2 Analisis Persyaratan
Pada tahap analisis persyaratan ini dapat terbagi menjadi dua, yaitu : fungsional dan non-fungsional. Persyaratan fungsional dapat diartikan sebagai penyedia aktivitas-aktivitas yang ada dalam suatu sistem tersebut. Sedangkan, persyaratan non-fungsional dapat diartikan sebagai mendeskripsikan fitur, performa fitur, karakteristik dari fitur, dan batasan lainnya.
3.1.2.1 Kebutuhan Fungsional
Kebutuhan fungsional yang terdapat pada aplikasi pencarian teks undang-undang perlindungan anak terdiri atas :
METODE MANUSIA
MESIN MATERI
PENCARIAN TEKS UNDANG-UNDANG PERLINDUNGAN ANAK DENGAN ALGORITMA BOYER-MOORE & RABIN-KARP
(21)
Tabel 3.1 Kebutuhan Fungsional
SRS ID Fungsi
F-01 Sistem dapat menjalankan algoritma yang akan digunakan untuk mencari string (Boyer-Moore atau Rabin-Karp)
F-02 Menemukan string dengan algoritma yang sudah dipilih F-03 Mencari string dalam teks.txt
F-04 Masukkan string terdiri dari satu kosa kata atau lebih
F-05 Sistem dapat menampilkan hasil pencrian string dengan menggunakan algoritma yang sudah dipilih sebelumnya
3.1.2.2 Kebutuhan Non-Fungsional
Kebutuhan fungsional yang terdapat pada aplikasi pencarian teks undang-undang perlindungan anak terdiri atas :
Tabel 3.2 Kebutuhan Non-Fungsional
SRS ID Fungsi
NF-01 Menggunakan Interface yang mudah sehingga user cepat memahami aplikasi
NF-02 Menggunakan desain yang minimalis
NF-03 Menggunakan software Android Studio dalam pembuatannya
NF-04 Aplikasi ini hemat biaya karena tidak memerlukan perangkat tambahan dalam peng-operasiannya
3.1.3 Pemodelan
Pekerjaan-pekerjaan pemodelan spesifikasi kebutuhan pada dasarnya akan menghasilkan beberapa jenis model-model berikut :
o Model berbasis skenario, yang menggambar spesifikasi kebutuhan perangkat lunak dari berbagai sudut pandang “aktor” sistem/perangkat lunak. Contoh : Use Case. o Model data, yang menjelaskan ranah informasi untuk permasalahan yang akan
diselesaikan.
o Model berorientasi kelas, yang memperhatikan kelas-kelas dalam konteks pemrograman berorientasi objek ( yang memiliki atribut-atribut dan operasi-operasi
(22)
bekerjasama untuk mencapai sasaran-sasaran spesifikasi kebutuhan perangkat lunak. Contoh : diagram kelas.
o Model berorientasi aliran, yang menggambarkan elemen-elemen fungsional sistem/perangkat lunak dan yang akan menggambarkan bagaimana caranya mereka melakukan transformasi terhadap data saat data yang bersangkutan melintasi sistem. o Model perilaku, yang menggambarkan bagaimana perangkat lunak berperilaku
terhadap event-event yang datang dari luar sistem
Pada penelitian ini digunakan UML (Unified Modeling Language) sebagai bahasa pemodelan untuk mendesain dan merancang aplikasi pencarian teks undang-undang perlindungan anak. Model UML yang digunakan antara lain Use case diagram, Activity diagram, dan Sequence diagram.
3.1.3.1 Preprocessing
Preprocessing adalah tahapan awal dalam mengolah data yang di-input sebelum benar-benar memasuki proses tahapan utama pada suatu sistem.
3.1.3.1.1 Case Folding
Case Folding merupakan tahapan yang mengubah huruf kapital menjadi huruf kecil dalam tahap pencarian string pada database. Mengubah huruf “A” sampai dengan “Z” menjadi huruf “a” sampaidengan “z”. Untuk prosesnya dapat dilihat pada gambar 3.2 sebagai berikut.
(23)
Gambar 3.2 Preprocessing-Case Folding UpperCase to
LowerCase (function)
Sistem memproses string yang di-input user dan mencari pada teks .txt sebanyak 14 bab.
Sistem mencari string menggunakan
algoritma Rabin-Karp Sistem mencari string
menggunakan algoritma Boyer-Moore
Inputstring oleh user
Input teks undang-undang
perlindungan anaksebanyak 14 bab dengan format
Sistem
mengeluarkan hasil string yang dicari
(24)
3.1.3.2 Use Case Diagram
Use case diagram adalah gambaran yang dapat merepresentasikan interaksi antara aktor dan sistem itu sendiri. Use case diagram sangat membantu dalam memahami kebutuhan fungsional dalam suatu sistem yang dibangun. Use case diagram yang akan dibangung dapat digambarkan pada gambar 3.2 sebagai berikut.
Gambar 3.3 Use Case Diagram
(25)
Tabel 3.3 Use Case Memasukkan String
Name Memasukkan String
Actors User
Description Use case mendeskrisikan untuk meng-input string yang akan dicari di dalam teks undang-undang perlindungan anak
Basic Flow User meng-inputstring Alternate
Flow
-Pre Condition User dapat melihat tampilan menu utama
Post Conditon User dapat mengetahui string yang dicari pada teks undang-undang perlindungan anak
Pada proses memilih algoritma, dapat dinyatakan dalam tabel 3.4. Tabel 3.4 Use Case Memilih Algoritma
Name Memasukkan String
Actors User
Description Use Case ini mendeskripsikan pemilihan algoritma yang akan dipakai dalam pencarian teks undang-undang perlindungan anak
Basic Flow User memilih algoritma yang ingin digunakan Alternate
Flow
User dapat mengganti algoritma yang ingin digunakan
Pre Condition User dapat melihat tampilan button pemilihan algoritma Post Conditon User sudah memilih algoritma
3.1.3.3 Activity Diagram
Activity diagram menggambarkan berbagai alir aktivitas dalam sistem yang akan dibangun, bagaimana sistem itu berawal, kemungkinan decision yang akan terjadi, dan bagaimana sebuah sistem akan berakhir. Manfaat dari activity diagram ialah untuk membantu memahami proses secara keseluruhan dari sistem tersebut.
(26)
Activity diagram dibuat berdasarkan sebuah atau beberapa use case diagram. Proses pencarian dengan Algoritma Boyer-Moore dan algoritma Rabin-Karp, dapat dilihat Activity Diagrampada Gambar 3.3 berikut:
Gambar 3.4 Activity Diagram 3.1.3.4 Sequence Diagram
Sequence Diagram merupakan diagram yang berfungsi untuk menampilkan perilaku
sistem/aplikasi tersebut. Diagram ini menunjukkan bagaiman pesan dikirim dan diterima diantara objek, dan diurutan yang mana. Sequence Diagram dapat membantu dalam menggambarkan data yang masuk dan keluar dari sistem. Sequence diagram untuk proses pencarian teks undang-undag perlindungan anak menggunakan algoritma Boyer-Moore dan algoritma Rabin-Karp diperlihatkan pada Gambar 3.4 berikut :
(27)
Gambar 3.5 Sequence Diagram
Pada tahap ini, user membuka aplikasi, sistem mengembalikan feedback berupa intro sistem. Setelah itu, user masuk ke dalam menu utama sistem. User dapat melihat keseluruhan isi bab dan pasal yang terdapat pada sistem tersebut, sistem akan mengembalikan hasil ke user. User meng-input string dan memilih algoritma mana yang akan di pakai, sistem memproses algoritma tersebut dengan mencari file.txt yang terdapat undang-undang perlindungan anak, lalu sistem mengembalikan hasil pencarian untuk ditampilkan ke user.
3.1.3.5 Flowchart Sistem
Flowchart merupakan bagan yang memperlihatkan urutan maupun hubungan antar proses beserta keterangannya yang dinyatakan dengan simbol. Dengan demikian setiap simbol menggambarkan proses tertentu. Sedangkan antara proses digambarkan dengan garis penghubung. Untuk melihat Flowchart dari sistem yang akan dibangun perhatikan gambar 3.5 berikut:
(28)
Gambar 3.6 Flowchart Sistem MULAI
Input kata yang dicari
Input algoritma yang digunakan
Melakukan pencocokan
SELESAI Hasil
(29)
Tidak YA
Ya
Ya Tidak
Gambar 3.7 Flowchart Boyer-Moore MULAI
Masukkan Pattern yang dicari
For : i = 0 to Length - 1
Proses pencocokan pattern dengan teks
Apakah cocok ?
Pattern bergeser sejauh nilai terbesar hasil perbandingan BmGs dan BmBc Proses pencocokan ke
karakter berikutnya (kiri)
Apakah semua karakter match ?
Tampilkan hasil pencarian
(30)
Tidak
Ya
Gambar 3.8 Flowchart Rabin-Karp MULAI
Pattern/inputan, sumber string
Menghitung nilai hash dari pattern/inputan
apakah nilai h(si)=h(P) ?
Lakukan pencocokan antara string S dengan string P secara Brute Force
Penulusuran sampai string berakhir
SELESAI Melakukan Pencocokan nilai hash antara nilai hash pattern dengan nilai substring dari sumber string
String ditemukan
String tidak ditemukan
(31)
3.2 Perancangan Sistem
Proses perancangan antarmuka (interface) sebuah sistem adalah proses yang cukup penting dalam membuat aplikasi. Sebuah antarmuka harus dirancang dengan memperhatikan faktor pengguna sehingga sistem yang dibangun dapat memberikan kenyamanan dan kemudahan untuk digunakan oleh pengguna.
3.2.1 Menu Intro
Gambar 3.9 Rancangan Interface Menu Intro
Tabel 3.5 Keterangan Gambar Rancangan Interface Menu Intro
No Keterangan
1. Image View 1 untuk menampilkan intro pada aplikasi sebelum benar-benar masuk ke menu utama aplikasi.
Image View 1
Undang-undang perlindungan anak
(32)
Gambar 3.10 Rancangan Interface Menu Pemilihan
Tabel 3.6 Keterangan Gambar Rancangan Interface Menu Pemilihan
No Keterangan
1. Button 1 mulai untuk memulai aplikasi pencarian string 2. Button 2 tentang untuk menampilkan biodata diri
3.3.3 Menu Tentang
Gambar 3.11 Rancangan Interface Menu Tentang Button 1 Button 2
Label 1 Label 2
Image View 2
Label 3 Label 4 MULAI
TENTANG
JUDUL SKRIPSI NAMA & NIM
LOGO USU
PROGRAM STUDI TAHUN AJARAN
(33)
Tabel 3.7 Keterangan Gamber Interface Menu Tentang
No Keterangan
1. Label 1 untuk menampilkan judul skripsi
2. Label 2 untuk menampilkan nama dan nim
3. Image View 2 untuk menampilkan logo Universitas Sumatra Utara 4. Label 3 untuk menampilak program studi
5. Label 4 untuk menampilkan tahun ajaran dan tempat
3.3.4 Menu Utama
Gambar 3.12 Rancangan Interface Menu Utama
Tabel 3.8 Keterangan Rancangan Gambar Interface Menu Utama
No Keterangan
1. Text View 1 untuk menampilkan judul Undang-UndangPerlindungan anak
2. Text View 2 untuk menampilkan teks isi string 3. Button 3 untuk tombol algotima Boyer-Moore 4. Button 4 untuk tombol algortima Rabin-Karp 5. Text View 3 untuk menampilkan kata yang dicari 6. List Vuew 1 untuk menampilkan hasil pencarian string
Text View 1 Text View 2
Button 3 Button 4
List View 1 Undang-undang
perlindungan anak
Ketik kata
Boyer-moore Rabin-karp Bab 1
Bab 2 Bab 3 Bab 4
(34)
BAB 4
IMPLEMENTASI DAN PENGUJIAN
4.1 Implementasi
Implementasi sistem merupakan tahapan yang harus dilalui dalam proses pengembangan perangkat lunak dari suatu sistem. Tahap ini dilakukan setelah melalui tahap Analisis dan Perancangan sistem yang telah diuraikan pada bab sebelumnya.Sistem ini dibangun dengan menggunakanBasic4Android.Pada sistem initerdapat 5 menu, yaitu: Menu Intro,Menu
Pemilihan, Menu Tentang, dan Menu Utama.
4.1.1 Implementasi Algoritma Boyer-Moore dan Rabin-Karp
Penerapan algoritma Boyer-Moore dan algoritma Rabin-Karp dalam sistem yang dibuat adalah pada proses pencarian string dengan algoritma Boyer-Moore dan algoritma Rabin-Karp dalam mencari teks undang-undang perlindungan anak .
Adapun langkah pertama yang dilakukan adalah melakukan peng-inputan .txt teks undang-undang perlindungan anak dengan jumlah 14 bab. Lalu, User akan memasukkan string yang nantinya akan melakukan proses pencarian string dengan algoritma Boyer-Moore dan algoritma Rabin-Karp. Kata yang sesuai dengan string akan di tampilkan ke user. Jika tidak ada string yang sama pada saat proses pencarian string maka string tidak ditemukan.
Algoritma Boyer-Moore bekerja dengan cara memeriksa string dari kanan ke kiri teks dengan pola perlonjakan kata yang besar sesuai dengan tabel BmBc dan BmGs yang terbentuk. Algoritma Rabin-Karp melakukan pencocokan string dengan cara melakukan pencocokan nilai hash yang didapatkan dengan mendaftarkan semua string ke tabel ASCII dengan menggunakan bilangan prima.
(35)
4.2 Antarmuka Sistem
Pada Aplikasi pencarian teks dalam undang-undang perlindungan anak menggunakan algoritma Boyer-Moore dan Rabin-Karp ini terdapat lima menu, yaitu :
1. Menu Intro
2. Menu Pemilihan
3. Menu Tentang
4. Menu Utama
4.2.1 Menu Intro
Menu intro merupakan menu atau form yang pertama kali akan muncul ketika user membuka aplikasi pencarian teks undang-undang perlindungan anak.
Gambar 4.1 Menu Intro 4.2.2 Menu Pemilihan
Form ini berisikan button tentang dan button mulai, sehingga user dapat memilih akan memulai aplikasi atau akan melihat identitas penulis.
(36)
Gambar 4.2 Menu Pemilihan 4.2.3 Menu Tentang
Form ini berisi tentang identitas dari penulis
(37)
4.2.4 Menu Utama
Form ini merupakan menu utama pada aplikasi pencarian teks dalam undang-undang perlindungan anak. Dalam form ini akan melakukan pencarian string dengan menggunakan algoritma Boyer-Moore dan algoritma Rabin-Karp dalam menemukan string yang tepat.
User akan meng-input string, lalu user akan memilih algoritma mana yang akan digunakan (algoritma Boyer-Moore atau algoritma Rabin-Karp). Lalu sistem akan melakukan pencarian string dengan algoritma yang telah dipilih. Sistem akan menampilkan hasil pencarian string.
Contoh string : “perlindungan”
Gambar 4.4 Hasil Pencarian Algoritma Boyer-Moore (a)
Pada gambar di atas terdapat 9 bab dari 14 bab, 48 kata dengan durasi 80 ms dalam undang-undang perlindungan anak yang terdapat string “perlindungan” dengan menggunakan algoritma Boyer-Moore.
(38)
Gambar 4.5 Hasil Pencarian Algoritma Boyer-Moore (b)
Pada gambar 4.5 dapat dilihat teks yang berwarna kuning yang mengandung string “perlindungan” dengan menggunakan algoritma Boyer-Moore.
(39)
Gambar 4.6 Hasil Pencarian Algoritma Rabin-Karp (a)
Pada gambar di atas terdapat 9 bab dari 14, 48 kata denngan durasi 300 ms dalam undang-undang perlindungan anak yang terdapat string “perlindungan” dengan menggunakan algoritma Rabin-Karp.
(40)
Gambar 4.7 Hasil Pencarian Algoritma Rabin-Karp (b)
Pada gambar di atas dapat dilihat teks yang berwarna kuning yang mengandung string “perlindungan” dengan menggunakan algoritma Rabin-Karp.
4.3 Hasil Pengujian
Hasil pengujian pada dari peneletian ini adalah kompleksitas dari kedua algoritma ( Boyer-Moore dan Rabin-Karp) dan perbandingan running-time.
(41)
4.3.1 Kompleksitas Algoritma Big θ
Tabel 4.1 Komplesitas Boyer-Moore PreBmBc
Code C # C.#
public class BoyerMoore {
private String pattern;
C1 1 C1
private String text; C2 1 C2
private int foundedAt = 0; C2 1 C2
private long duration = 0; C2 1 C2
public BoyerMoore(String pattern, String text) { this.pattern = pattern;
C2 1 C2
this.text = text; }
C2 1 C2
public int getFoundedAt() { return foundedAt;
}
C1 1 C1
public long getDuration() { return duration; }
C1 1 C1
Code C # C.#
private static void preBmBc(char[] x, int m, int bmBc[]) {
C1 1 C1
int i; C3 1 C3
for (i = 0; i < bmBc.length; ++i) C4 m C4m
bmBc[i] = m; C2 m C2m
(42)
}
T(n) = 6C1+3C2+C3+C4m+2C2m+C4m = (6C1+3C2+C3)݉0+ (C4+2C2+C4)݉1 = ݉0+ ݉1= θ(m)
Tabel 4.1 adalah tabel kompleksitas algoritma Boyer-Moore , dimana proses pencarian kompleksitasnya menggunakan bahasa Java, C sebagai konstanta, # sebagai ukuran masukan, dan C. # (C kali #) adalah untuk mencari Theoritical Running Time (T(n)) atau kompleksitas waktu, sehingga dapat dijumlahkan hasil dari perkalian C kali #, maka diperoleh hasil θ(m) untuk pembentukan bad character-nya.
Tabel 4.2 Kompleksitas Boyer-Moore Suffixes
Code C # C.#
private static int[] suffixes(char[] x, int m) {
C1 1 C1
int f=0, g, i; C3 1 C3
int suff[] = new int[m]; C2 1 C2
suff[m - 1] = m; C2 m C2m
g = m - 1; C2 m C2m
for (i = m - 2; i >= 0; --i) { C4 m C4m
if (i > g && suff[i + m - 1 - f] < i - g)
C5 m C5m
suff[i] = suff[i + m - 1 - f];
C2 m C2m else { C6 m C6m
if (i < g) C6 m C6m
(43)
f = i; C2 m C2m while (g >= 0 && x[g] == x[g + m -
1 - f])
C7 m C7m
--g; C8 m C8m
suff[i] = f - g; }
}
C2 m C2m
return suff; }
C9 m C9m
T(n) = C1+C2+C3+2C2m+C4m+4C2m+C5m+2C6m+C7m+C8m+C9m = (C1+C2+C3)݉0+ (2C2+C4+4C2+C5+2C6+C7+C8+C9)݉1 = ݉0+ ݉1= θ(m)
Tabel 4.2 adalah tabel kompleksitas algoritma Boyer-Moore , dimana proses pencarian kompleksitasnya menggunakan bahasa Java, C sebagai konstanta, # sebagai ukuran masukan, dan C. # (C kali #) adalah untuk mencari Theoritical Running Time (T(n)) atau kompleksitas waktu, sehingga dapat dijumlahkan hasil dari perkalian C kali #, maka diperoleh hasil θ(m) untuk pembentukan suffixes-nya.
Tabel 4.3 Kompleksitas Boyer-Moore BmGs
Code C # C.#
private static void preBmGs(char[] x, int m) {
C1 1 C1
int i, j; C3 1 C3
int suff[] = suffixes(x, m); C2 1 C2
for (i = 0; i < m; ++i) C4 m C4m
bmGs[i] = m C2 m C2m
(44)
if (suff[i] == i + 1) C5 m C5m for ( j < m - 1 - i; ++j) C4 m C4m
if (bmGs[j] == m) C5 m C5m
bmGs[j] = m - 1 - i; C2 m C2m for (i = 0; i <= m - 2; ++i) C4 m C4m
bmGs[m - 1 - suff[i]] = m - 1 - i; C2 m C2m
}
static int[] bmGs; static int[] bmBc;
C3 m C3m
T(n) = C1+C2+C3+C4m+4C2m+ C3m+3C4m+2C5m = (C1+C2+C3)݉0+ (C4+4C2+C3+3C4+2C5)݉1 = ݉0+ ݉1= θ(m)
Tabel 4.3 adalah tabel kompleksitas algoritma Boyer-Moore , dimana proses pencarian kompleksitasnya menggunakan bahasa Java, C sebagai konstanta, # sebagai ukuran masukan, dan C. # (C kali #) adalah untuk mencari Theoritical Running Time (T(n)) atau kompleksitas waktu, sehingga dapat dijumlahkan hasil dari perkalian C kali #, maka diperoleh hasil θ(m) untuk pembentukan Good Suffix-nya
Tabel 4.4 Kompleksitas Boyer-Moore Check
Code C # C.#
public boolean check2() { C1 1 C1
long startMillis =
System.currentTimeMillis();
C2 1 C2
(45)
int n = text.length(); C2 1 C2
int m = pattern.length(); C2 1 C2
char[] y = text.toCharArray(); C2 1 C2 char[] x = pattern.toCharArray();
C2 1 C2
int i, j; C3 1 C3
bmGs = new int[m]; C2 1 C2
bmBc = new int[256]; C2 1 C2
preBmGs(x, m); C3 1 C3
preBmBc(x, m, bmBc); C3 1 C3
j = 0; C2 1 C2
while (j <= n - m) { C7 n C7n for (i = m - 1; i >= 0 && x[i] == y[i +
j]; --i);
C4 mn C4 mn
if (i < 0) { C5 n C5n
j += bmGs[0]; C10 n C10n
this.foundedAt = j-m; C2 n C2n endMillis =
System.currentTimeMillis();
C2 n C2n
this.duration = endMillis - startMillis;
C2 n C2n
result = true; }
C2 n C2n
else
j += java.lang.Math.max(bmGs[i], bmBc[y[i + j]] - m + 1 + i);
(46)
return result; }
}
T(n) = C1+10C2+4C3+4C2n+C5n+C7n+2C10n+C4mn = (C1+10C2+4C3)݉0+ (4C2+C5+C7+2C10)݊1+(C4mn) = ݉0+ ݊1+ m.n = θ(mn)
Tabel 4.4 adalah tabel kompleksitas algoritma Boyer-Moore , dimana proses pencarian kompleksitasnya menggunakan bahasa Java, C sebagai konstanta, # sebagai ukuran masukan, dan C. # (C kali #) adalah untuk mencari Theoritical Running Time (T(n)) atau kompleksitas waktu, sehingga dapat dijumlahkan hasil dari perkalian C kali #, maka diperoleh hasil θmn.
Maka untuk θ keseluruhan algoritma Boyer-Moore adalah sebagai berikut :
θ(m)(PreBmBc) + θ(m)(Suffixes) + θ(mn)(Check) = θmn. Maka, hasil kompleksitas algoritma Boyer-Mooreadalah θ(mn).
Tabel 4.5 Kompleksitas Rabin-Karp
Code C # C.#
public class RabinKarp { C1 1 C1
private int foundedAt = 0; C2 1 C2
private String pattern; C1 1 C1
private String text; C1 1 C1
private long duration = 0; C2 1 C2
public RabinKarp(String pattern, String text) {
C1 1 C1
this.pattern = pattern; C2 1 C2
this.text = text; }
C2 1 C2
public int getFoundedAt() { C1 1 C1
return foundedAt; }
(47)
return duration; }
C3 1 C3 public boolean check()
{
C1 1 C1
Long startMillis =
System.currentTimeMillis();
C2 1 C2
long endMillis = 0; C2 1 C2
boolean result = false; C2 1 C2
double patternHash = getHash(pattern); C2 1 C2
int patternLength = pattern.length(); C2 1 C2
int textLength = text.length(); C2 1 C2
int startIndex = 0; C2 1 C2
int endIndex = patternLength; C2 1 C2
while(endIndex <= textLength) {
C3 mn C3mn String matchText =
text.substring(startIndex, endIndex);
C2 1 C2 double matchTextHash =
getHash(matchText);
C2 1 C2 if(patternHash == matchTextHash)
{
C4 m C4m if(pattern.equals(matchText)){ C5 m C5m this.foundedAt = startIndex; C2 1 C2 endMillis =
System.currentTimeMillis();
C2 1 C2 this.duration = endMillis -
startMillis;
C2 1 C2 result = true;
break; }
}
C2 1 C2
startIndex += patternLength; C6 m C6m
endIndex += patternLength; C6 m C6m
}
return result;
(48)
T(n) = 7C1+19C2+2C3+C3mn+C4m+C5m+C6m+C7m
= (7C1+19C2+2C3+C7)݉0+(C4+C5+C6+C7)݉1+(C3mn) = ݉0+ ݉1+ m.n = θ(mn)
Tabel 4.5 adalah tabel kompleksitas algoritma Rabin-Karp , dimana proses pencarian kompleksitasnya menggunakan bahasa Java, C sebagai konstanta, # sebagai ukuran masukan, dan C. # (C kali #) adalah untuk mencari Theoritical Running Time (T(n)) atau kompleksitas waktu, sehingga dapat dijumlahkan hasil dari perkalian C kali #, maka diperoleh hasil θ(mn).
Tabel 4.6 Kompleksitas Rabin-Karp (a)
Code C # C.#
public double getHash(String text) {
C1 1 C1
double hashValue = 0; C2 1 C2
int base = 5; C2 1 C2
for(long i = 0; i < text.length(); i++) C8 n C8n {
char character = text.charAt((int) i);
C2 n C2n
int ascii = (int) character; C2 n C2n
int exponent = ((int) ((text.length()-1)-i));
C2 n C2n
double pow = Math.pow(base, exponent); C2 n C2n
double hash = (ascii * pow); C2 n C2n
hashValue += hash; }
C6 n C6n
return hashValue; }
}
(49)
T(n) = C1+2C2+5C2n+C6n+C7n+C8n = (C1+2C2)݉0+(5C2+C6+C7+C8)݊1 = ݉0+ n = θm+n
= θ(mn)+ θ(m+n) = θ(mn)
Tabel 4.6 adalah tabel kompleksitas algoritma Rabin-Karp , dimana proses pencarian kompleksitas nya menggunakan bahasa Java, C sebagai konstanta, # sebagai ukuran masukan, dan C. # (C kali #) adalah untuk mencari Theoritical Running Time (T(n)) atau kompleksitas waktu, sehingga dapat dijumlahkan hasil dari perkalian C kali #. Maka, diperoleh hasil θmn.
Maka untuk θ keseluruhan algoritma Boyer-Moore adalah sebagai berikut :
θ(mn)(Rabin-Karp) + θ(mn)(Rabin-Karp(a)) = θmn. Maka, hasil kompleksitas algoritma Rabin-Karpadalah θ(mn).
Maka kompleksitas algoritma Boyer-Moore dan kompleksitas algoritma Rabin-Karp bernilai sama, yaitu : θ(mn).
4.3.2 Real-Running-Time
Tabel 4.7 Running-Time Boyer-Moore
n String Boyer-moore(s)
5 Peril 0,070 s
10 Perlindung 0,060 s
20 perlindungan khusus 0,080 s
30 perlindungan khusus adalah perl 0,100 s
40 perlindungan khusus adalah perlindungan y
0,100 s
50 perlindungan khusus adalah perlindungan yang diberik
0,090 s
60 perlindungan khusus adalah perlindungan yang diberikan kepada
(50)
perlindungan yang diberikan kepada anak dalam
80 perlindungan khusus adalah perlindungan yang diberikan kepada
anak dalam situasi d
0,090 s
90 perlindungan khusus adalah perlindungan yang diberikan kepada
anak dalam situasi darurat, an
0,110 s
100 perlindungan khusus adalah perlindungan yang diberikan kepada anak dalam situasi darurat, anak yang
be
0,120 s
rata-rata 0,09181818181818 s
Pada tabel 4.7 n merupakan banyaknya string yang di ujicoba untuk menentukan hasil real-running-time dalam penemuan string-nya. n(5) artinya panjang string yang diuji sebanyak 5 karakter, dan real-running-time yang dibutuhkan untuk penemuan 5 karakter adalah: 0,070 s. n(10) artinya panjang string yang diuji sebanyak 10 karakter, dan real-running-time yang dibutuhkan untuk penemuan 10 karakter adalah: 0,060 s. n(20) artinya panjang string yang diuji sebanyak 20 karakter, dan real-running-time yang dibutuhkan untuk penemuan 20 karakter adalah: 0,080 s. n(30) artinya panjang string yang diuji sebanyak 30 karakter, dan real-running-time yang dibutuhkan untuk penemuan 30 karakter adalah: 0,100 s. n(40) artinya panjang string yang diuji sebanyak 40 karakter, dan real-running-time yang dibutuhkan untuk penemuan 40 karakter adalah: 0,100 s. n(50) artinya panjang string yang diuji sebanyak 50 karakter, dan real-running-time yang dibutuhkan untuk penemuan 50 karakter adalah: 0,080 s. n(60) artinya panjang string yang diuji sebanyak 60 karakter, dan real-running-time yang dibutuhkan untuk penemuan 60 karakter adalah: 0,090 s. n(70) artinya panjang string yang diuji sebanyak 70 karakter, dan real-running-time yang dibutuhkan untuk penemuan 70 karakter adalah: 0,100 s. n(80) artinya panjang string yang diuji sebanyak 80 karakter, dan real-running-time yang dibutuhkan untuk penemuan 5 karakter adalah: 0,090 s. n(90) artinya panjang string yang diuji sebanyak 90 karakter, dan real-running-time yang dibutuhkan untuk penemuan 90 karakter adalah: 0,110 s. n(100) artinya panjang string yang diuji sebanyak 100 karakter, dan real-running-time yang dibutuhkan untuk penemuan 100 karakter adalah: 0,120 s.
(51)
Gambar 4.8 Grafik Running-Time Boyer-Moore
Pada gambar 4.8 sumbu X merupakan waktu real-running-time untuk mencari string dimulai dari panjang sebanyak 5 karakter sampai dengan 100 karakter. Sumbu Y merupakan banyaknya karakter yang diuji, n merupakan banyak karakter.
Disimpulkan bahwa waktu running-time dalam mencari string n(5) = 0,070 s, dan menurun pada n(10) = 0,060 s, waktu running-time dalam mencari string n(100) = 0,530 s, dengan rata-rata pencarian setiap string 0,09181818181818 s. Nilai rata-rata didapat dari menjumlahkan semua waktu running-time dan membagi sebanyak berapa kali percobaan yang diuji. Grafik yang terbentuk berbentuk linear yang artinya kompleksitas yang terbentuk adalah θ(mn).
0 0.1 0.2 0.3 0.4 0.5
n(5) n(10) n(20) n(30) n(40) n(50) n(60) n(70) n(80) n(90) n(100)
Boyer-Moore
(52)
Tabel 4.8 Running-Time Rabin-Karp
n String Rabin-Karp(s)
5 peril 0,180 s
10 perlindung 0,240 s
20 perlindungan khusus 0,410 s
30 perlindungan khusus adalah perl 0,590 s
40 perlindungan khusus adalah perlindungan y
0,670 s
50 perlindungan khusus adalah perlindungan yang diberik
0,570 s
60 perlindungan khusus adalah perlindungan yang diberikan kepada
0,770 s
70 perlindungan khusus adalah perlindungan yang diberikan kepada
anak dalam
0,810 s
80 perlindungan khusus adalah perlindungan yang diberikan kepada
anak dalam situasi d
0,850 s
90 perlindungan khusus adalah perlindungan yang diberikan kepada
anak dalam situasi darurat, an
0,870 s
100 perlindungan khusus adalah perlindungan yang diberikan kepada anak dalam situasi darurat, anak yang
be
0,840 s
rata-rata 0,618181818282 s
Pada tabel 4.8 n merupakan banyaknya string yang di ujicoba untuk menentukan hasil real-running-time dalam penemuan string-nya. n(5) artinya panjang string yang diuji sebanyak 5 karakter, dan real-running-time yang dibutuhkan untuk penemuan 5 karakter adalah: 0,180 s. n(10) artinya panjang string yang diuji sebanyak 10 karakter, dan real-running-time yang dibutuhkan untuk penemuan 10 karakter adalah: 0,240 s. n(20) artinya panjang string yang diuji sebanyak 20 karakter, dan real-running-time yang dibutuhkan untuk penemuan 20 karakter adalah: 0,410 s. n(30) artinya panjang string yang diuji sebanyak 30 karakter, dan real-running-time yang dibutuhkan untuk penemuan 30 karakter adalah: 0,590 s. n(40)
(53)
dibutuhkan untuk penemuan 40 karakter adalah: 0,670 s. n(50) artinya panjang string yang diuji sebanyak 50 karakter, dan real-running-time yang dibutuhkan untuk penemuan 50 karakter adalah: 0,570 s. n(60) artinya panjang string yang diuji sebanyak 60 karakter, dan real-running-time yang dibutuhkan untuk penemuan 60 karakter adalah: 0,770 s. n(70) artinya panjang string yang diuji sebanyak 70 karakter, dan real-running-time yang dibutuhkan untuk penemuan 70 karakter adalah: 0,810 s. n(80) artinya panjang string yang diuji sebanyak 80 karakter, dan real-running-time yang dibutuhkan untuk penemuan 5 karakter adalah: 0,850 s. n(90) artinya panjang string yang diuji sebanyak 90 karakter, dan real-running-time yang dibutuhkan untuk penemuan 90 karakter adalah: 0,870 s. n(100) artinya panjang string yang diuji sebanyak 100 karakter, dan real-running-time yang dibutuhkan untuk penemuan 100 karakter adalah: 0,840 s.
Gambar 4.9 Grafik Running-Time Rabin-Karp
Pada gambar 4.9 sumbu X merupakan waktu real-running-time untuk mencari string dimulai dari panjang sebanyak 5 karakter sampai dengan 100 karakter. Sumbu Y merupakan banyaknya karakter yang diuji, n merupakan banyak karakter.
Disimpulkan bahwa waktu running-time dalam mencari string n(5) = 0,840 s, dan menurun pada n(50) = 0,570 s, running-time dalam mencari string n(100) = 0,840 s, dengan rata-rata pencarian setiap string 0,618181818282 s. Nilai rata-rata didapat dari menjumlahkan semua waktu running-time dan membagi sebanyak berapa kali percobaan yang diuji. Grafik
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
n(5) n(10) n(20) n(30) n(40) n(50) n(60) n(70) n(80) n(90) n(100)
Rabin-Karp
(54)
namun, pada saat running-time algoritma Rabin-Karp mempunyai kompleksitas θ(m+n). Gambar 4.8 dan 4.9 dapat digabungkan untuk memudahkan perbandingkan waktu running-time kedua algoritma tersebut, dapat dilihat pada gambar 4.10.
Tabel 4.9 Running-Time Boyer-Moore dan Rabin-Karp
n String Boyer-Moore (s) Rabin-Karp (s)
5 Peril 0,070 s 0,180 s
10 Perlindung 0,060 s 0,240 s
20 perlindungan khusus 0,080 s 0,410 s
30 perlindungan khusus adalah perl 0,100 s 0,590 s
40 perlindungan khusus adalah perlindungan y
0,100 s 0,670 s
50 perlindungan khusus adalah perlindungan yang diberik
0,090 s 0,570 s
60 perlindungan khusus adalah perlindungan yang diberikan kepada
0,090 s 0,770 s
70 perlindungan khusus adalah perlindungan yang diberikan kepada
anak dalam
0,100 s 0,810 s
80 perlindungan khusus adalah perlindungan yang diberikan kepada
anak dalam situasi d
0,090 s 0,850 s
90 perlindungan khusus adalah perlindungan yang diberikan kepada
anak dalam situasi darurat, an
0,110 s 0,870 s
100 perlindungan khusus adalah perlindungan yang diberikan kepada anak dalam situasi darurat, anak yang
be
(55)
Pada tabel 4.9 n merupakan banyaknya string yang di ujicoba untuk menentukan hasil real-running-time dalam penemuan string-nya. n(5) artinya panjang string yang diuji sebanyak 5 karakter, dan real-running-time yang dibutuhkan untuk penemuan 5 karakter adalah: 0,070 s dan 0,180 s. n(10) artinya panjang string yang diuji sebanyak 10 karakter, dan real-running-time yang dibutuhkan untuk penemuan 10 karakter adalah: 0,060 s dan 0,240 s. n(20) artinya panjang string yang diuji sebanyak 20 karakter, dan real-running-time yang dibutuhkan untuk penemuan 20 karakter adalah: 0,080 s dan 0,410 s. n(30) artinya panjang string yang diuji sebanyak 30 karakter, dan real-running-time yang dibutuhkan untuk penemuan 30 karakter adalah: 0,100 s dan 0,590 s. n(40) artinya panjang string yang diuji sebanyak 40 karakter, dan real-running-time yang dibutuhkan untuk penemuan 40 karakter adalah: 0,100 s dan 0,670 s. n(50) artinya panjang string yang diuji sebanyak 50 karakter, dan real-running-time yang dibutuhkan untuk penemuan 50 karakter adalah: 0,080 s dan 0,570 s. n(60) artinya panjang string yang diuji sebanyak 60 karakter, dan real-running-time yang dibutuhkan untuk penemuan 60 karakter adalah: 0,090 s dan 0,770 s. n(70) artinya panjang string yang diuji sebanyak 70 karakter, dan real-running-time yang dibutuhkan untuk penemuan 70 karakter adalah: 0,100 s dan 0,810 s. n(80) artinya panjang string yang diuji sebanyak 80 karakter, dan real-running-time yang dibutuhkan untuk penemuan 5 karakter adalah: 0,090 s dan 0,850 s. n(90) artinya panjang string yang diuji sebanyak 90 karakter, dan real-running-time yang dibutuhkan untuk penemuan 90 karakter adalah: 0,110 s dan 0,870 s. n(100) artinya panjang string yang diuji sebanyak 100 karakter, dan real-running-time yang dibutuhkan untuk penemuan 100 karakter adalah: 0,120 s dan 0,840 s.
(56)
Gambar 4.10 Grafik Running-Time Boyer-Moore dan Rabin-Karp
Pada gambar 4.9 sumbu X merupakan waktu real-running-time untuk mencari string dimulai dari panjang sebanyak 5 karakter sampai dengan 100 karakter. Sumbu Y merupakan banyaknya karakter yang diuji, n merupakan banyak karakter.
Dapat diambil kesimpulan bahwa algoritma Rabin-Karp memerlukan waktu yang lebih lama dalam penemuan string yang berukuran panjang n(5) – n(100). Sedangkan, rata-rata waktu yang dibutuhkan dalam penemuan string untuk Boyer-Moore : 0,091818181818s, Rabin-Karp : 0,618181818282s. Nilai rata-rata didapat dari menjumlahkan semua waktu running-time dan membagi sebanyak berapa kali percobaan yang diuji. Grafik yang terbentuk merupakan kompleksitas θ(mn).
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
n(5) n(10) n(20) n(30) n(40) n(50) n(60) n(70) n(80) n(90) n(100)
Rabin-Karp Boyer-Moore
(57)
BAB 5
KESIMPULAN DAN SARAN
5.1 Kesimpulan
Berdasarkan hasil dari perbandingan algoritma Boyer-Moore dan algoritma Rabin-Karp dalam pencarian string pada teks undang-undang perlindungan anak berbasis android, maka dapat disimpulkan bahwa :
1. Sistem ini mengimplementasikan algoritma Boyer-Moore dan algoritma Rabin-Karp dalam pencarian teks undang-undang perlindungan anak.
2. Dalam Algoritma Boyer-Moore pemeriksaan teks dilakukan dari kanan ke kiri teks, dengan nilai lompatan string berdasarkan perbandingan table BmGs dan BmBc yang terbentuk.
3. Dalam Algoritma Rabin-Karp pemeriksaan teks dilakukan dengan mencocokan nilai hash pada teks, yang didapat dari tabel ASCII.
4. Real-Running-Time untuk algoritma Boyer-Moore memiliki rata-rata penemuan string : 0,091818181818 s dan algortima Rabin-Karp memiliki rata-rata penemuan string : 0,618181818282 s.
5. Kompleksitas algoritma Boyer-Moore dan kompleksitas algoritma Rabin-Karp bernilai sama yaitu : θmn.
(58)
5.2 Saran
Adapun saran yang dapat diberikan untuk mengembangkan penelitian ini adalah sebagai berikut:
1. Untuk pengembangan selanjutnya,diharapkan dapat menambahkan undang-undang IT atau pun undang-undang lainnya.
2. Untuk pengembangan selanjutnya, diharapkan aplikasi ini menyediakan button view untuk dapat melihat isi undang-undang perlindungan anak.
3. Untuk pengembangan selanjutnya, diharapkanaplikasi ini menyediakan menu pilihan algoritma pencarian string dalam proses pencarian seperti Turbo, Knuth-Morris-Pratt, dan Raita sehingga memberi pengetahuan pengguna tentang algoritma pencarian string.
(59)
BAB II
LANDASAN TEORI
2.1 Anak
Anak adalah seseorang yang belum berusia 18 (delapan belas) tahun, termasuk anak yang masih dalam kandungan (Mona, 2015). Anak merupakan tunas sebuah bangsa. Kemajuan sebuah banngsa bergantung pada kualitas anak-anak pada bangsa itu sendiri. Agar anak kelak mampu memikul tanggung jawab tersebut, maka perlu mendapat kesempatan yang seluas-luasnya untuk tumbuh dan berkembang secara optimal, baik fisik, mental maupun sosial. 2.2 Android
Android adalah sistem operasi untuk perangkat mobile berbasis linux yang mencakup sistem operasi, middleware dan aplikasi. Android menyediakan platform terbuka bagi para pengembang untuk menciptakan aplikasi mereka (Safaat, 2015).
2.3 Sejarah Android
Pada awal mula sejarah android, Google Inc. membeli Android Inc. yang merupakan pendatang baru yang membuat piranti lunak untuk ponsel/smartphone. Kemudian untuk mengembangkan Android, dibentuklah Open Handset Alliance, konsorsium dari 34 perusahaan piranti keras, piranti lunak, dan telekomunikasi, termasuk Google, HTC, Intel, Motorola, Qualcomm, T-Mobile, dan Nvidia.
Pada saat perilisan perdana android, 5 November 2007, Android bersama Open
Handset Alliance menyatakan mendukung pengembangan open source pada perangkat
mobile. Di lain pihak, Google merilis kode-kode Android di bawah lisensi Apache, sebuah lisensi perangkat lunak dan open platform perangkat seluler.
Sekitar September 2007 Google mengenalkan Nexus One, salah satu jenis smartphone yang menggunakan Android sebagain sistem operasinya. Telepon seluler ini diproduksi oleh HTC Corporation dan tersedia dipasaran pada 5 Januari 2010. Pada 9 Desember 2008, diumumkan anggota baru yang bergabung dalam program kerja Android ARM Holdings, Atheros Communications, diproduksi oleh Asustek Computer Inc, Garmin
(60)
Ltd, Softbank, Sony Ericsson, Toshiba Corp, dan Vodafone Group Plc. Seiring pembentukan Open Handset Alliance, OHA mengumumkan produk perdana mereka, Android, perangkat mobile yang merupakan modifikasi kernel Linux 2.6. Sejak Android dirilis telah dilakukan berbagai pembaruan berupa perbaikan bug dan penambahan fitur baru.
Tidak hanya menjadi sistem operasi di smartphone, saat ini Android menjadi pesaing utama dari Apple pada sistem operasi Tablet PC. Pesatnya pertumbuhan Andoroid selain faktor yang disebutkan di atas adalah karena Android itu sendiri adalah platform yang sangat lengkap baik itu sistem operasinya, Aplikasi dan Tools Pengembangan, Market aplikasi Android serta dukungan yang sangat tinggi dari komunitas Open Handset Alliance di dunia, sehingga Android terus berkembang pesat baik dari segi teknologi maupun dari segi jumlah device yang ada di dunia (Safaat, 2015).
2.4 Fitur Android
Sebagai platform aplikasi-netral, Android memberikan kesempatan untuk membuat aplikasi bawaan Handphone/Smartphone. Beberapa fitur-fitur Android yang sangat penting adalah sebagai berikut :
o Fremework aplikasi yang mendukung penggantian komponen dan reusable.
o Mesin Virtual Dalvik dioptimalkan untuk perangkat mobile o Intregrated browser berdasarkan angine open source WebKit
o Grafis yang dioptimalkan dan didukung oleh libraries grafis 2D, grafis 3D,
berdasarkan spesifikasi opengl ES 1,0 (opsional akselerasi hardware)
o SQLite untuk penyimpanan data
o Media support yang mendukung audio, video, dan gambar (MPEG4, H.264, MP3,
AAC, AMR, JPG, PNG, GIF), GSM Telephony (tergantung hardware)
o Bluetooth, EDGE, 3G, dan WiFi (tergantung hardware)
o Kamera, GPS, kompas, dan accelerometer (tergantung hardware)
o Lingkungan Development yang lengkap dan kaya termasuk perangkat emulator, tools untuk debugging, profil dan kinerja memori (Safaat, 2015).
(61)
2.5 Versi Android
o Android versi 1.1
Pada 9 Maret 2009, Google merilisi Android versi 1.1 Android versi ini dilengkapi dengan pembaruan estetis pada aplikasi, jam, alarm, voice search (pencarian suara), pengiriman pesan dengan Gmail, dan pemberitahuan email.
o Android versi 1.5 (Cupcake)
Pada pertengahan Mei 2009, Google kembali merilis telepon seluler dengan menggunakan Android dan SDK (Software Development Kit) dengan versi 1.5 (Cupcake). Terdapat beberapa pembaruan termasuk juga penambahan beberapa fitur dalam seluler versi ini yakni kemampuan merekam dan menonton video dengan modus kamera, mengupload video ke Youtube dan gambar ke Picasa langsung dari telepon, dukungan bluetooth A2DP, kemampuan terhubung secara otomatis ke headset bluetooth, animasi layar, dan keyboard pada layar yang dapat disesuikan dengan sistem.
o Android versi 2.0/2.1 (Eclair)
Pada 3 Desember 2009 diluncurkan ponsel Android dengan versi 2.0/2.1 (Éclair), perubahan yang dilakukan adalah pengoptimalan hardware, peningkatan Google Maps 3.1.2, perubahang UI dengan browser baru dan dukungan HTML5, daftar kontak yang baru, dukungan flash untuk kamera 3,2 Mp, digital Zoom, dan bluetooth 2.1.
o Android versi 2.2 (Froyo)
Pada bulan Mei 2010 Android versi 2.2 diluncurkan. Android inilah yang sekarang sangat banyak beredar di pasaran, salah satunya adalah dipakai di Samsung FX tab yang sudah ada dipasaran. Fitur yang tersedia pada versi ini sudah kompleks.
o Android versi 2.3 (Gingerbread)
Android versi 2.3 ini diluncurkan pada Desember 2010.
o Android versi 3.0 ( Honeycomb)
Dirilis Februari 2011 sebagain android revisi 1 serta android revisi 2 versi 3.0 telah dirilis pada Juli 2011.
o Android versi 4.0 (Jelly Bean)
Android Jelly Bean diluncurkan pertama kali pada Juli 2012, dengan berbasis Linux Kerneldari Android 4.1 API Level 16, Android 4.2 API Level 17, Android 4.3 API
(62)
Level 18. Penamaan mengadaptasi nama sejenis permen dalam beraneka macam rasa buah. Ukurannya sebesar kacang merah. Permen ini keras di luar tapi lunak di dalam serta lengket bila di gigit.
o Android versi 4.4 (KitKat)
Android 4.4 Kitkat API level 19.Google mengumumkan Android KitKat (dinamai dengan izin Nestle dan Hershey) pada 3 september 2013. Dengan tanggal rilis 31 Oktober 2013. KitKat merupakan merk sebuah coklat yang dikeluarkan oleh Nestle. Rilis berikutnya setelah nama KitKat diperkirakan banyak pengamat akan diberi
nomor 5.0 dan dinamai „Pie’ (Safaat, 2015).
2.6 Query
Query adalah satu atau beberapa kata atau frase / kalimat yang di masukan / di ketikan oleh pengguna saat melakukan pencarian pada search engine (google atau search engine lainnya). 2.7 Search Engine
Mesin pencari (search engine) adalah salah satu program komputer yang di rancang khusus untuk membantu seseorang menemukan file-file yang disimpan dalam komputer, misalnya dalam sebuah web server umum di web atau komputer sendiri. Mesin pencari memungkinkan kita untuk meminta content media dengan kriteria yang spesifik ( biasanya berisikan frase atau kata yang kita inginkan) dan memperoleh daftar file yang memenuhi kriteria tersebut.
Mesin pencari biasanya menggunakan indeks untuk mencari file setelah pengguna memasukan kriteria pencarian. Mesin pencari yang akan dibahas adalah mesin pencari khusus yang digunakan untuk mencari informasi di dalam database lokal. Untuk memudahkan dan mempercepat pencarian, mesin pencari mempunyai metode pencarian tertentu yang sering disebut algoritma. Adapun struktur umum sebuah mesin pencari adalah sebagai berikut : 1. Kotak teks pencari
Kotak ini digunakan sebagai tempat memasukan kata kunci yang akan dijadikan acuan dilakukan pencarian.
2. Tombol pencari
(63)
2.8 Algoritma
Algoritma adalah merupakan jantung ilmu komputer atau informatika. Banyak cabang ilmu komputer yang diacu dalam terminologi algoritma. Namun jangan beranggapan algoritma selalu identik dengan ilmu komputer saja. Cara membuat kue atau masakan dalam resep masakan, itu juga merupakan algoritma (Saniman & Fathoni 2008). Logika berasal dari dari bahasa Yunani yaitu LOGOS yang berarti ilmu.
Logika dapat diartikan ilmu yang mengajarkan cara berpikir untuk melakukan kegiatan dengan tujuan tertentu. Algoritma berasal dari nama seorang Ilmuwan Arab yang bernama Abu Jafar Muhammad Ibnu Musa Al Khuwarizmi penulis buku berjudul Al Jabar Wal Muqabala. 2 Kata Al Khuwarizmi dibaca orang barat menjadi Algorism yang kemudian lambat laun menjadi Algorithm diserap dalam bahasa Indonesia menjadi Algoritma. Algoritma dapat diartikan urutan penyelesaian masalah yang disusun secara sistematis menggunakan bahasa yang logis untuk memecahkan suatu permasalahan (Barakbah & Ahsan 2013).
Algoritma adalah suatu himpunan berhingga dari instruksi-instruksi yang secara jelas memperinci langkah-langkah proses pelaksanaan, dalam pemecahan suatu masalah tertentu, atau suatu kelas masalah tertentu, dengan dituntut pula bahwa himpunan instruksi tersebut dapat dilaksanakan secara mekanik (Barakbah & Ahsan 2013).
2.8.1 Algoritma String Matching
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 (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. Algoritma pencarian string (String Matching) salah satu bagian terpenting dalam berbagai proses yang berkaitan dengan data dengan tipe teks.
2.8.2 Klasifikasi Pencocokan String
Pencocokan string (string matching) secara garis besar dapat dibedakan menjadi dua yaitu (... ...):
(1)
DAFTAR ISI
Halaman
Persetujuan ii
Pernyataan iii
Penghargaan iv
Abstrak vi
Abstract vii
Daftar Isi viii
Daftar Tabel x
Daftar Gambar xii
Daftar Lampiran xiii
Bab 1 Pendahuluan
1.1 Latar Belakang 1
1.2 Rumusan Masalah 2
1.3 Batasan Masalah 2
1.4 Tujuan Penelitian 3
1.5 Manfaat Penelitian 3
1.6 Metodologi Penelitian 3
1.7 Sistematika Penulisan 4
Bab 2 Landasan Teori
2.1 Anak 6
2.2 Android 6
2.3 Sejarah Android 6
2.4 Fitur Android 7
2.5 Versi Android 7
2.6 Query 9
2.7 Search Engine 9
2.8 Algoritma 9
2.8.1 AlgoritmaString Mathcing 10
2.8.2 Klasifikasi Pencocokan String 10
2.8.3 Algoritma Boyer-Moore 11
2.8.3.1 Ilustrasi Pencarian String Algoritma Boyer-Moore 11
2.8.4 Algoritma Rabin-Karp 20
2.8.5 Hashing 20
2.8.5.1 Ilustrasi Pencarian String Algoritma Rabin-Karp 20 Bab 3 Analisis dan Perancangan Sistem
3.1 Analisis Sistem 23
3.1.1 Analisis Masalah 23
3.1.2 Analisis Persyaratan 24
3.1.2.1 Kebutuhan Fungsional 24
3.1.2.2 Kebutuhan Non Fungsional 25
3.1.3 Pemodelan 25
(2)
3.1.3.3 Activity Diagram 29
3.1.3.4 Sequence Diagram 30
3.1.3.5 Flowchart Sistem 31
3.2 Perancangan Sistem 35 3.2.1 Menu Intro 35
3.2.2 Menu Pemilihan 36 3.2.3 Menu Tentang 36 3.2.4 Menu Utama 37 Bab 4 Implementasi dan Pengujian Sistem 4.1 Implementasi 38
4.1.1 Implementasi Algoritma Boyer-Moore dan Rabin-Karp 38
4.2 Antarmuka Sistem 38
4.2.1 Menu Intro 39
4.2.2 Menu Pemilihan 39
4.2.3 Menu Tentang 40
4.2.4 Menu Utama 40
4.3 Hasil Pengujian 44
4.3.1 Komplesitas Algoritma Big θ 45
4.3.2 Real-Running-Time 53
Bab 5 Kesimpulan dan Saran 5.1 Kesimpulan 61
5.2 Saran 62
Daftar Pustaka 63
Listing Program A-1
(3)
DAFTAR TABEL
Nomor
Tabel Nama Tabel Halaman
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 2.15 2.16 2.17 2.18 2.19 2.20 2.21 2.22 2.23 2.24 2.25 2.26 2.27 2.28 2.29 2.30 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 4.1 Suffix
Proses Pencarian Suffix (a) Proses Pencarian Suffix (b) Proses Pencarian Suffix (c) Proses Pencarian BmGs Proses Pencarian BmGs (a) Proses Pencarian BmGs (b) Proses Pencarian BmGs (c) Proses Pencarian BmGs (d) Proses Pencarian BmGs (e) Proses Pencarian BmGs (f) Proses Pencarian BmGs (g) Proses Pencarian BmGs (h) Proses Pencarian BmGs (i) Proses Pencarian BmGs (j) Proses Pencarian BmGs (k) Proses Pencarian BmGs (l) Proses Pencarian BmGs (m) BmBc
Proses Pencarian BmBc (a) Proses Pencarian BmBc (b) Proses Pencocokan String Proses Pencocokan String (a) Proses Pencocokan String (b) Proses Pencocokan String (c) Mencari Nilai Hash
Memeriksa Pencocokan String (a) Memeriksa Pencocokan String (b) Memeriksa Pencocokan String (c) Memeriksa Pencocokan String (d) Kebutuhan Fungsional
Kebutuhan Non-Fungsional Use Case Masukkan String Use Case Memilih Algoritma
Keterangan Gambar Rancangan Interface Menu Intro Keterangan Gambar Rancangan Interface Menu Pemilihan Keterangan Gambar Rancangan Interface Menu Tentang Keterangan Gambar Rancangan Interface Menu Utama Komplesitas Boyer-Moore PreBmBc
12 12 12 13 13 13 14 14 14 14 15 15 16 16 16 17 17 17 17 18 18 18 19 19 19 20 21 21 21 22 25 25 29 29 35 36 37 37 45
(4)
4.4 4.5 4.6 4.7 4.8 4.9
Kompleksitas Boyer-Moore Check Kompleksitas Rabin-Karp
Kompleksitas Rabin-Karp (a) Running-Time Boyer-Moore Running-Time Rabin-Karp
Running-Time Boyer-Moore dan Rabin-Karp
48 50 51 53 56 58
(5)
DAFTAR GAMBAR
Nomor
Gambar Nama Gambar Halaman
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10
Diagram Ishikawa
Preprocessing-Case Folding Use Case Diagram
Activity Diagram Sequence Diagram Flowchart Sistem Flowchart Boyer-Moore Flowchart Rabin-Karp
Rancangan Interface menu Intro Rancangan Interface menu Pemilihan Rancangan Interface menu Tentang Rancangan Interface menu Utama Menu Intro
Menu Pemilihan Menu Tentang
Hasil Pencarian Algoritma Boyer-Moore (a) Hasil Pencarian Algoritma Boyer-Moore (b) Hasil Pencarian Algoritma Rabin-Karp (a) Hasil Pencarian Algoritma Rabin-Karp (b) Grafik Running-Time Boyer-Moore
Grafik Running-Time Rabin-Karp
Grafik Running-Time Boyer-Moore dan Rabin-Karp
24 27 28 30 31 32 33 34 35 36 36 37 39 40 40 41 42 43 44 54 57 60
(6)
DAFTAR LAMPIRAN
Halaman
Listing Program A-1