Analisis Dan Perbandingan Algoritma Maximal Shift Dengan Algoritma Quick Search Pada Aplikasi Kamus Farmakologi

(1)

LISTING PROGRAM

I. Bahasa C#

1.1. Maximal Shift #endregion

#region MaximalShift struct pattern

{

public int loc; public char c; }

int [] minShift; int [] adaptedGS; pattern [] pat;

void computeMinshift(string x) {

int i, j;

for (i = 0; i < x.Length; ++i){ for (j = i - 1; j >= 0; --j)

if (x[i] == x[j]) break;

minShift[i] = i - j; }

}

void orderPattern(string x, pattern[] pat) {

int i;

for (i = 0; i < x.Length; i++) {

pat[i].loc = i; pat[i].c = x[i]; }

Array.Sort(pat, new maxShiftPcmp(minShift)); }

int matchshift(string x, int ploc, int lshift, pattern[] pat)

{

int i, j;

for (; lshift < x.Length; ++lshift) {

i = ploc;

while (--i >= 0) {

if ((j = pat[i].loc - lshift) < 0) continue;

if (pat[i].c != x[j]) break;

}


(2)

break; }

return lshift; }

void preAdaptedGS(string x, int[] adaptedGS, pattern[] pat) {

int lshift, i, ploc;

adaptedGS[0] = lshift = 1;

for (ploc = 1; ploc <= x.Length; ++ploc) {

lshift = matchshift(x, ploc, lshift, pat); adaptedGS[ploc] = lshift;

}

for (ploc = 0; ploc < x.Length; ploc++) {

lshift = adaptedGS[ploc]; while (lshift < x.Length) {

i = pat[ploc].loc - lshift;

if (i < 0 || pat[ploc].c != x[i]) break;

++lshift;

lshift = matchshift(x, ploc, lshift, pat); }

adaptedGS[ploc] = lshift; }

}

bool MS(string x, string y) {

int i, j, m = x.Length, n = y.Length, value; j = 0;

while (j <= n - m) {

i = 0;

while (i < m && pat[i].c == y[j + pat[i].loc]) ++i;

if (i >= x.Length) return true;

j += j + m < n && qsbc1.TryGetValue(y[j + m], out value) ? (value > adaptedGS[i] ? value :

adaptedGS[i]) : (qsbc1['*'] > adaptedGS[i] ? qsbc1['*'] : adaptedGS[i]);

}

return false; }


(3)

1.2. Quick Search

//disini mulai algoritma quick search #region QuickSearchLama

private void preQS() {//pencarian table QSBC int m = 0;

for (int i = 0; i < jumlahkar; i++) {

qsbc[i] = m + 1; m = m + 1;

}

for (int i = 0; i < jumlahkar; ++i) {

qsbc[i] = m - i;//didapatkan tabel qsbc }

}

//memulai algoritma quick search

#region QuickSearch

private void preQsbc(string x, Dictionary<char, int> qsbc) {

int i;

for (i = 0; i < x.Length; i++) {

if (!qsbc.ContainsKey(x[i])) {

qsbc.Add(x[i], x.Length - i); }

else {

qsbc[x[i]] = x.Length - i; }

}

qsbc.Add('*', x.Length + 1); }

private bool qs(string x, string y) {

int j = 0, n = y.Length, m = x.Length, value; while (j <= n - m)

{

if (x.Equals(y.Substring(j,m))) return true;

j += j + m < n && qsbc1.TryGetValue(y[j + m], out value) ? value : qsbc1['*'];

}

return false; }

return false; }

1.3. Menampilkan Data using System;


(4)

using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; namespace tugasakhir {

public partial class Form1 : Form

private void tampildata() {

string queri = "SELECT kata from kamus"; listBoxkata.Items.Clear();

koneksi tampil = new koneksi(); tampil.koneksidb();

tampil.perintah.CommandText = queri; tampil.conn.Open();

tampil.adapter.SelectCommand = tampil.perintah; tampil.conn.Close();

tampil.adapter.Fill(tampil.dt);

foreach (DataRow row in tampil.dt.Rows) {

listBoxkata.Items.Add(row[0]); }

}

private void listBoxkata_SelectedIndexChanged(object sender, EventArgs e)

{

string queri = "SELECT keterangan, produsen from kamus where kata ='" + listBoxkata.SelectedItem.ToString() + "'";

rtbhasil.Clear();

koneksi tampil = new koneksi(); tampil.koneksidb();

tampil.perintah.CommandText = queri; tampil.conn.Open();

tampil.rdr = tampil.perintah.ExecuteReader(); while (tampil.rdr.Read())

{

rtbhasil.Text = (tampil.rdr["keterangan"].ToString()); produksi.Text = (tampil.rdr["produsen"].ToString()); }

tampil.conn.Close(); }

#endregion

private void cmdms_Click(object sender, EventArgs e) {

string queri = "SELECT kata,keterangan from kamus"; rtbhasil.Clear();

listBoxkata.Items.Clear(); koneksi tampil = new koneksi(); tampil.koneksidb();


(5)

tampil.perintah.CommandText = queri; tampil.conn.Open();

tampil.rdr = tampil.perintah.ExecuteReader(); Stopwatch a = new Stopwatch();

a.Start(); qsbc1.Clear();

pat = new pattern[txtcari.Text.Length];

adaptedGS = new int[txtcari.Text.Length + 1]; minShift = new int[txtcari.Text.Length]; computeMinshift(txtcari.Text);

orderPattern(txtcari.Text, pat);

preAdaptedGS(txtcari.Text, adaptedGS, pat); preQsbc(txtcari.Text, qsbc1);

while (tampil.rdr.Read()) {

if (MS(txtcari.Text, tampil.rdr["kata"].ToString())) {

listBoxkata.Items.Add(tampil.rdr["kata"].ToString()); }

}

if (listBoxkata.Items.Count == 0)

listBoxkata.Items.Add("Kata Tidak Ditemukan"); a.Stop();

rtms.Text =

(int.Parse(a.Elapsed.ToString("fffffff")) / 10000f).ToString() + " ms";

string [] waktu = (rtms.Text.Split(new char [] {' '})); if (!hasilolah1.ContainsKey(txtcari.Text)) { hasilolah1.Add(txtcari.Text, double.Parse(waktu[0])); } else {

if (hasilolah1[txtcari.Text] > double.Parse(waktu[0])) hasilolah1[txtcari.Text] = double.Parse(waktu[0]); }

//MessageBox.Show(hasilolah.Count.ToString()); tampil.rdr.Close();

tampil.conn.Close(); }

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

var katams = hasilolah1.Keys.ToArray(); var waktums = hasilolah1.Values.ToArray(); var kataqs = hasilolah2.Keys.ToArray(); var waktuqs = hasilolah2.Values.ToArray(); for (int i = 0; i < katams.Length; i++) {

file.WriteLine(katams[i].ToString() + " " + waktums[i].ToString() + " Maximal Shift"); }

for (int i = 0; i < kataqs.Length; i++) {

file.WriteLine(kataqs[i].ToString() + " " + waktuqs[i].ToString() + " Quick Search"); }


(6)

file.Close(); } } } namespace tugasakhir {

partial class Form1 {

/// <summary>

/// Required designer variable. /// </summary>

private System.ComponentModel.IContainer components = null; ///<param name="disposing">true if managed resources should be disposed; otherwise, false.</param>

protected override void Dispose(bool disposing) {

if (disposing && (components != null)) {

components.Dispose(); }

base.Dispose(disposing); }

#region Windows Form Designer generated code /// <summary>

/// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary>

private void InitializeComponent() {

System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.label1 = new System.Windows.Forms.Label();

this.txtcari = new System.Windows.Forms.TextBox(); this.cmdqs = new System.Windows.Forms.Button(); this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); this.groupBox2 = new System.Windows.Forms.GroupBox(); this.produksi = new System.Windows.Forms.TextBox(); this.label2 = new System.Windows.Forms.Label();

this.groupBox4 = new System.Windows.Forms.GroupBox(); this.rtqs = new System.Windows.Forms.TextBox();

this.label4 = new System.Windows.Forms.Label();

this.groupBox3 = new System.Windows.Forms.GroupBox(); this.label3 = new System.Windows.Forms.Label();

this.rtms = new System.Windows.Forms.TextBox();

this.rtbhasil = new System.Windows.Forms.RichTextBox(); this.listBoxkata = new System.Windows.Forms.ListBox(); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); this.groupBox4.SuspendLayout(); this.groupBox3.SuspendLayout(); this.SuspendLayout(); // // groupBox1 //


(7)

this.groupBox1.Controls.Add(this.label1); this.groupBox1.Controls.Add(this.txtcari);

this.groupBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold,

System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.groupBox1.ForeColor =

System.Drawing.Color.MidnightBlue;

this.groupBox1.Location = new System.Drawing.Point(14, 14);

this.groupBox1.Name = "groupBox1";

this.groupBox1.Size = new System.Drawing.Size(356, 69); this.groupBox1.TabIndex = 0;

this.groupBox1.TabStop = false; this.groupBox1.Text = "Pencarian"; //

// label1 //

this.label1.AutoSize = true;

this.label1.Location = new System.Drawing.Point(7, 30); this.label1.Name = "label1";

this.label1.Size = new System.Drawing.Size(76, 16); this.label1.TabIndex = 0;

this.label1.Text = "Input Kata"; //

// txtcari //

this.txtcari.Location = new System.Drawing.Point(91, 27); this.txtcari.Name = "txtcari";

this.txtcari.Size = new System.Drawing.Size(226, 22); this.txtcari.TabIndex = 0;

this.txtcari.TextChanged += new

System.EventHandler(this.txtcari_TextChanged); //

// cmdqs //

this.cmdqs.BackColor = System.Drawing.Color.Silver;

this.cmdqs.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold,

System.Drawing.GraphicsUnit.Point, ((byte)(0)));

this.cmdqs.ForeColor = System.Drawing.Color.MidnightBlue; this.cmdqs.Location = new System.Drawing.Point(407, 14); this.cmdqs.Name = "cmdqs";

this.cmdqs.Size = new System.Drawing.Size(76, 69); this.cmdqs.TabIndex = 1;

this.cmdqs.Text = "&Cari";

this.cmdqs.UseVisualStyleBackColor = false; this.cmdqs.Click += new

System.EventHandler(this.cmdcari_Click); //

// button1 //

this.button1.BackColor = System.Drawing.Color.Silver; this.button1.Location = new System.Drawing.Point(505, 432);

this.button1.Name = "button1";

this.button1.Size = new System.Drawing.Size(75, 32); this.button1.TabIndex = 3;

this.button1.Text = "&Hapus";


(8)

this.button1.Click += new

System.EventHandler(this.button1_Click); //

// groupBox2 //

this.groupBox2.BackColor = System.Drawing.Color.Silver; this.groupBox2.Controls.Add(this.produksi); this.groupBox2.Controls.Add(this.label2); this.groupBox2.Controls.Add(this.groupBox4); this.groupBox2.Controls.Add(this.groupBox3); this.groupBox2.Controls.Add(this.rtbhasil); this.groupBox2.Controls.Add(this.listBoxkata);

this.groupBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold,

System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.groupBox2.ForeColor =

System.Drawing.Color.MidnightBlue;

this.groupBox2.Location = new System.Drawing.Point(16, 114);

this.groupBox2.Name = "groupBox2";

this.groupBox2.Size = new System.Drawing.Size(654, 296); this.groupBox2.TabIndex = 6;

this.groupBox2.TabStop = false; this.groupBox2.Text = "Hasil "; //

// produksi //

this.produksi.Location = new System.Drawing.Point(89, 258);

this.produksi.Name = "produksi";

this.produksi.Size = new System.Drawing.Size(225, 22); this.produksi.TabIndex = 5;

//

// label2 //

this.label2.AutoSize = true;

this.label2.Location = new System.Drawing.Point(5, 260); this.label2.Name = "label2";

this.label2.Size = new System.Drawing.Size(69, 16); this.label2.TabIndex = 4;

this.label2.Text = "Produksi"; // // groupBox4 // this.groupBox4.Controls.Add(this.rtqs); this.groupBox4.Controls.Add(this.label4); this.groupBox4.ForeColor = System.Drawing.Color.MidnightBlue;

this.groupBox4.Location = new System.Drawing.Point(375, 139);

this.groupBox4.Name = "groupBox4";

this.groupBox4.Size = new System.Drawing.Size(273, 93); this.groupBox4.TabIndex = 3;

this.groupBox4.TabStop = false;

this.groupBox4.Text = "Quick Search"; //

// rtqs //

this.rtqs.Location = new System.Drawing.Point(114, 39); this.rtqs.Name = "rtqs";


(9)

this.rtqs.Size = new System.Drawing.Size(153, 22); this.rtqs.TabIndex = 1;

//

// label4 //

this.label4.AutoSize = true;

this.label4.Location = new System.Drawing.Point(6, 42); this.label4.Name = "label4";

this.label4.Size = new System.Drawing.Size(103, 16); this.label4.TabIndex = 0;

this.label4.Text = "Running Time"; // // groupBox3 // this.groupBox3.Controls.Add(this.label3); this.groupBox3.Controls.Add(this.rtms); this.groupBox3.ForeColor = System.Drawing.Color.MidnightBlue;

this.groupBox3.Location = new System.Drawing.Point(376, 41);

this.groupBox3.Name = "groupBox3";

this.groupBox3.Size = new System.Drawing.Size(272, 91); this.groupBox3.TabIndex = 2;

this.groupBox3.TabStop = false;

this.groupBox3.Text = "Maximal Shift"; //

// label3 //

this.label3.AutoSize = true;

this.label3.Location = new System.Drawing.Point(6, 45); this.label3.Name = "label3";

this.label3.Size = new System.Drawing.Size(103, 16); this.label3.TabIndex = 1;

this.label3.Text = "Running Time"; //

// rtms //

this.rtms.Location = new System.Drawing.Point(113, 42); this.rtms.Name = "rtms";

this.rtms.Size = new System.Drawing.Size(153, 22); this.rtms.TabIndex = 0;

//

// rtbhasil //

this.rtbhasil.Location = new System.Drawing.Point(188, 28);

this.rtbhasil.Name = "rtbhasil";

this.rtbhasil.Size = new System.Drawing.Size(174, 213); this.rtbhasil.TabIndex = 1;

this.rtbhasil.Text = ""; //

// listBoxkata //

this.listBoxkata.ForeColor =

System.Drawing.Color.MidnightBlue;

this.listBoxkata.FormattingEnabled = true; this.listBoxkata.ItemHeight = 16;

this.listBoxkata.Location = new System.Drawing.Point(15, 27);


(10)

this.listBoxkata.Size = new System.Drawing.Size(169, 212);

this.listBoxkata.TabIndex = 0;

this.listBoxkata.SelectedIndexChanged += new

System.EventHandler(this.listBoxkata_SelectedIndexChanged );

// // Form1 //

this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoValidate = System.Windows.Forms.AutoValidate.EnableAllowFocusChange; this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.Backgr oundImage")));

this.ClientSize = new System.Drawing.Size(682, 468); this.Controls.Add(this.groupBox2);

this.Controls.Add(this.cmdqs); this.Controls.Add(this.button2); this.Controls.Add(this.button1); this.Controls.Add(this.groupBox1);

this.Font = new System.Drawing.Font("Microsoft SansSerif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "Form1";

this.Text = "Kamus Farmakologi"; this.FormClosing += new

System.Windows.Forms.FormClosingEventHandler(this.Form1_F ormClosing); this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); this.groupBox2.ResumeLayout(false); this.groupBox2.PerformLayout(); this.groupBox4.ResumeLayout(false); this.groupBox4.PerformLayout(); this.groupBox3.ResumeLayout(false); this.groupBox3.PerformLayout(); this.ResumeLayout(false); } #endregion

private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.Button cmdqs;

private System.Windows.Forms.Label label1; private System.Windows.Forms.TextBox txtcari; private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.TextBox produksi; private System.Windows.Forms.Label label2;

private System.Windows.Forms.GroupBox groupBox4; private System.Windows.Forms.TextBox rtqs;

private System.Windows.Forms.Label label4;

private System.Windows.Forms.GroupBox groupBox3; private System.Windows.Forms.Label label3;


(11)

private System.Windows.Forms.TextBox rtms;

private System.Windows.Forms.RichTextBox rtbhasil; private System.Windows.Forms.ListBox listBoxkata; }


(12)

DAFTAR PUSTAKA

Azizah, 2013. Perbandingan Detektor Tepi Prewit dan Dektor Tepi Laplacian

Berdasarkan Kompleksitas Waktu dan Citra Hasil. Skripsi. Universitas Pendidikan Indonesia.

Charras, & Lecroq. 2004. Handbook of Exact String-Matching Algorithms-Foreword Collage Publications : Prancis.

Effendi, 2013. Penerapan String Matching Menggunakan Algoritma Boyer-Moore pada Translator Bahasa Pascal ke C. Jurnal Sistem Informasi UNIKOM, Vol 11(2): 262-275.

Fitrianingsih & Zulkoni. 2009. Farmakologi Obat-obat Dalam Praktek Kebidanan. Nuha Medika : Yogyakarta.

Hadika, 2006. Analisis Perbandingan Kinerja Pencarian String Dari Algoritma Maximal Shift, Optimal Mismatch, dan Quick Search. Skripsi Universitas Bina Nusantara.

Larsson, 1999. Stuctures of String Matching and Data Compression. Department of Computer Science. Lund University.

Lavitin, 2011. Introduction to the Design and Analysis of Algorithm 3rd Edition. United State of America. Pearson Education,Inc.

Munir, 2007. Algoritma dan Pemrograman dalam bahasa pascal dan C. Informatika: Bandung.

Navarro, 2002. Flexible Pettern Matching In Strings: Practical On-Line Search Algorithms For Texts and Biological Sequences. Cambridge University Press: United Kingdom.

Yatini, 2010. Flowchart, Algoritma, dan Pemrograman menggunakan bahasa C++ Builder. Graha Ilmu: Yogyakarta.

Sarno, et al. 2012. Semantic Search Pencarian Berdasarkan konten. Andi: Yogyakarta.

Sirait, 2014. Informasi Spesialite Obat Indonesia. Innovative Scientific Futuristic Informatif : Jakarta.

Stephen, 1994. String Searching Algorithms. World Scientific: Singapore. Suarga, 2006. Algoritma Pemrograman. Andi : Yogyakarta.

Sunday, 1990. A very fast substring search algorithm. Communications of the ACM . 33 (8): 132-142.

Sutanta, 2004. Algoritma Teknik Penyelesaian Permasalahan untuk Komputasi. Graha Ilmu: Yogyakarta.

Sutedjo, & Michael. 1997. Algoritma dan Teknik Pemrograman. Andi: Yogyakarta. Susanti & Kumala. 2011. Farmakologi Kebidanan Aplikasi Dalam Praktik Kebidanan.

Trans Info Media : Jakarta.

Timothy, 2010. Teknik Pemecahan Kunci Rivest-Shamir-Adleman dengan Algoritma Miller-Selfridge-Rabin. Skripsi Universitas Sumatera Utara.


(13)

BAB 3

ANALISIS DAN PERANCANGAN

3.1. Analisis Sistem

Analisis sistem adalah penguraian dari suatu sistem informasi yang utuh kedalam bagian-bagian komponennya dengan maksud untuk mengindentifikasikan dan mengevaluasi permasalahan, kesempatan, hambatan, yang terjadi dan kebutuhan yang diharapkan. Analisis sistem terdapat langkah-langkah dasar yang harus dilakukan antara lain: mengidentifikasikan masalah (identify), analisis kebutuhan atau memahami kerja dari sistem yang ada, dan analisis proses. Pada analisis masalah adalah untuk mengenal dan mempelajari penyebab masalah dari sistem yang digunakan. Kemudian dilanjutkan dengan analisis kebutuhan adalah menjelaskan proses kerja fungsi-fungsi yang digunakan sistem. Dan yang terakhir adalah analisis proses yang bertujuan untuk memodelkan perancangan dari sistem.

3.1.1. Analisis Masalah

Permasalahan pada penelitian ini adalah untuk mengetahui perbandingan kinerja dari masing-masing algoritma string matching, yaitu algoritma Maximal Shift dan algoritma Quick Search. Dalam perbandingan kedua algoritma string matching dapat melihat perbedaan waktu pencarian kata (running time) dalam kamus farmakologi. Masalah-masalah pada penelitian ini diidentifikasikan dengan menggunakan diagram Ishikawa. Diagram Ishikawa atau yang sering dikenal dengan Cause and Effect Diagram adalah suatu alat visual untuk mengidentifikasi dan menggambarkan secara detail semua penyebab yang berhubungan dengan suatu permasalahan.Permasalahan pada penelitian ini secara umum dapat ditunjukan pada diagram ishikawa pada Gambar 3.1.


(14)

Gambar 3.1 Diagram Ishikawa

Pada gambar 3.1 terdapat empat katagori pada penelitian perbandingan Algoritma Maximal shift dan Algoritma Quick Search. Pengelompokan empat katagori tersebut adalah manusia (people), metode (method), material (material), mesin (machine). Katagori mesin adalah penggunaan software pemrogram dan penyimpanan data yaitu: Visual Studio Ekspres For Dekstop 2012 dan database SQL server 2012. Katagori manusia adalah sebagai pengguna untuk melakukan pencarian kata dalam kamus. Katagori material adalah data nama obat, keterangan dan produksi obat tersebut dari sumber Informasi Spesialite Obat Indonesia (ISO). Katagori metode, yang digunakan untuk melakukan pecarian kata dalam database adalah algoritma Maximal Shift dan algoritma Quick Search untuk mencapai tujuan yaitu: melakukan pencarian kata dalam kamus dengan waktu yang cepat.

3.1.2. Analisis Kebutuhan

Analisis kebutuhan sistem dapat dikelompokkan menjadi dua bagian, yaitu Kebutuhan Fungsional dan Kebutuhan Non Fungsional.

Pengguna yang ingin melakukan pencarian kata nama obat dalam kamus Visual Studia 2012 dan databse SQL server 2012

Mencari Kata dengan proses waktu yang cepat, dengan algoritma

maximal shift dan quick search

Memasukka n data nama-nama obat untuk disimpan ke database Analisis dan Perbandingan Algoritma

Maximal Shift dan

Algoritma Quick Search pada Aplikasi Kamus

Farmakologi

Mesin Manusia

Metode Material


(15)

3.1.2.1. Kebutuhan Fungsional

Kebutuhan fungsional adalah kebutuhan sistem yang harus melakukan proses-proses termasuk dalam melakukan pelayanan yang disediakan sistem dan reaksi sistem untuk mendapatkan hasil berdasarkan instruksi yang diberikan.Beberapa hal yang menjadi syarat kebutuhan fungsional yang harus dipenuhi (Timothy, 2010) :

1. Sistem harus mampu membaca string yang berada pada database.

2. Sistem harus mampu melakukan pencocokan string dengan menggunakan algoritma Maximal Shift dan Quick Search.

3. Sistem harus mampu menghitung, yaitu waktu proses dengan satuan (ms ) pada saat pencarian kata.

4. Sistem harus mampu menampilkan waktu ketika proses pencarian kata sedang berjalan dan mencatat waktu tercepat dalam bentuk teks.

3.1.2.2. Kebutuhan Non Fungsional

Kebutuhan non-fungsional merupakan deskripsi dari beberapa fitur, karateristik, dan batasan suatu sistem. Terdapat beberapa hal yang menjadi syarat kebutuhan non-fungsional antara lain: (Timothy, 2010):

1. Mudah digunakan (User friendly) yaitu sistem yang akan dibangun harus user friendly, artinya bahwa sistem mudah digunakan oleh user dengan tampilan (interface) yang sederhana dan mudah dimengerti.

2. Menjadi referensi yaitu, sistem yang akan dibangun diharapkan mampu menjadi referensi bagi user untuk mempermudah mencari nama obat yang dibutukan oleh user didalam database.

3. Pelayanan sistem yang telah dirancang bisa dikembangkan ke tingkat yang lebih kompleks lagi bagi pihak-pihak yang ingin mengembangkan sistem tersebut sehingga solusi yang diberikan lebih efektif.

4. Tampilan antarmuka sistem dapat dengan mudah dimengerti oleh pengguna sistem.

5. Perangkat lunak yang dibangun akan menampilkan pesan tidak ditemukan (not found) untuk setiap kata istilah yang tidak tersimpan dalam database nya.


(16)

3.2. Pemodelan Sistem

Pemodelan merupakan konsep penyederhanaan suatu masalah dalam suatu bahasa tertentu.Sebelum merancang perangkat lunak, maka pada tahap pemodelan ini dilakukan untuk memudahkan perancangan sistem selanjutnya (Timothy, 2010). Pemodelan sistem yang dirancang oleh penulis yaitu untuk menggambarkan sebuah kondisi dan bagian-bagian yang berperan dalam sistem yang dirancang. Pada penelitian ini model UML (Unified Modeling Language) yang digunakan antara lain use case diagram, activity diagram, dan squence diagram.

3.2.1. Diagram Use Case

Use-case Diagram adalah gambaran skenario penggunaan aplikasi sistem tentang bagaimana cara sistem bekerja dengan pengguna. Use-case Diagram membutuhkan identifikasi siapakah pengguna yang akan menggunakan sistem tersebut (Timothy, 2010). Use case diagram juga berperan untuk menggambarkan interaksi antar komponen-komponen yang berperan dalam sistem yang nantinya akan dirancang.


(17)

Pada gamabar 3.2 dapat dilihat terdapat seorang actor yang akan berperan sebagai user. User menggunakan kamus untuk memperoleh pencarian kata dalam database dengan cara memasukkan kata dan melakukan pencarian dengan menekan tombol cari. Setelah itu, sistem akan berjalan melakukan pencarian kata dengan algoritma Maximal Shift dan algoritma Quick Search, dan menampilkan hasil pencarian kata serta menampilkan keterangan dari kata yang dicari. Dari hasil pencarian kata akan mencatat waktu dan menampilkan waktu (running time) ke layar sistem untuk masing-masing algoritma. Proses input kata pada kamus dapat dilihat pada Tabel 3.1.

Tabel 3.1 Usecase Input Kata pada Kamus Farmakologi

Name Masukan Kata

Actors User

Description Use Case ini mendeskripsikan memasukkan kata farmakologi yang ingin dicari dengan algoritma Maximal shift dengan Algoritma Quick Search Basic Flow User memasukkan kata

Alternate

Flow -

Pre Condition

Aplikasi siap menerima masukkan Typical

course of Event

Kegiatan user Respon system 1. Menekan

tombol cari

Menampilkan hasil pencocokan kata dalam kamus

Post Condition

User mendapatkan hasil pencarian kata, terjemahan dan waktu pencarian


(18)

Tabel 3.2 Usecase Bantuan pada Kamus Farmakologi Name Bantuan

Actors User

Description Use Case ini memberitahukan bagaimana cara penggunaan dari sistem kamus farmakologi Basic Flow User membutuhkan bantuan

Alternate Flow

-

Pre Condition Aplikasi siap menampilkan bantuan

Typical course of event

Kegiatan User Respon system 1. Menekan

tombol bantuan

Menampilkan isi dari tombol bantuan

Post Condition

User mendapatkan bantuan penggunaan cara sistem kamus farmakologi

Table 3.3 Use Case Tentang pada Kamus Famakologi

Name Tentang

Actors User

Description UseCase ini menjelaskan tentang kegunaan dari aplikasi kamus farmakologi

Basic Flow User membutuhkan pengetahuan tentang Aplikasi kamus farmakologi

Alternate Flow

-

Pre Condition Aplikasi siap menampilakan isi menu tentang

Typical course of Event

Kegiatan user Respon system 1. Menekan

tombol tentang

Menampilkan informasi tentang aplikasi kamus farmakologi

Post Condition

user mendapatkan informasi tentang pembuat aplikasi kamus farmakologi


(19)

3.2.2. Diagram Sequence

Sequence Diagram adalah diagram yang menunjukkan hubungan yang terjadi antara satu objek dengan objek lain. Diagram Sequences digunakan untuk mendekripsikan pola komunikasi antar objek, dimana diagram Sequences ini menggambarkan urutan waktu dari aliran pemanggilan pada suatu metode (Timothy, 2010). Berikut diagram Sequence pada penelitian ini dapat dilihat pada Gambar 3.3.


(20)

3.2.3. Diagram Activity

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 (Timothy, 2010). Activity diagram pada sistem dapat ditunjukkan pada Gambar 3.4.

Gambar 3.4 Diagram Activity.

3.3. Analisis Proses

Aplikasi yang dibangun pada penilitian ini menggunakan algortima Maximal Shift dan algoritma Quick Search untuk melakukan pencarian kata dalam aplikasi kamus. Data yang tersimpan dalam database akan dicari melalui pencocokan kata dengan masing-masing algoritma. Pada saat data ditemukan akan menghasilkan nama obat, keterangan obat, dan waktu proses (running time) yang akan dicatat dan di tampilkan pada layar aplikasi dengan tujuan untuk mengetahui perbandingan kecepatan waktu.


(21)

3.3.1. Analisis Pencocokan String dengan Algoritma Maximal Shift

Algoritma Maximal Shift adalah algoritma yang mencari pola dalam teks dengan cara pola dicari dari karakter yang memiliki nilai minShift yang terbesar hingga minShift yang terkecil. Tahapan proses dari algoritma Maximal shift terdiri dari memilah karakter pola dalam urutan penurunan pergeseran, membangun bad-charaters shift dan fungsi good-suffix Shif. Fungsi tersebut disesuaikan dengan urutan scanning karakter pola, (Charras & Lecroq, 2004). Berikut akan dijelaskan langkah-langkah dalam melakukan pencocokan string.

Teks : DHEAAGIEWILYA Pola : AGIE

Proses pertama adalah menghitung nilai minshift karakter pada pola yang akan digunakan untuk proses pengurutan, seperti pada Tabel 3.4.

Tabel 3.4 Nilai minShift pada Algoritma Maximal Shift

Proses kedua adalah orderPattern yang digunakan untuk pengurutan karakter pada pola dari nilai minshift tertinggi hingga terkecil pada pola. Jika ditemukan karakter yang memiliki nilai minshift yang sama maka pengurutan didasarkan pada posisi pencarian dari kanan ke kiri, yaitu posisi karakter yang ditemukan dahulu diurutkan lebih awal. Seperti table dibawah ini:

I 0 1 2 3

char A G I E

Minshift


(22)

Tabel 3.5 Orderpattern Algoritma Maximal Shift

I 0 1 2 3

Char E I G A

minshift

[i] 3 2 1 0

Proses ketiga adalah preQsBc yang menghitung nilai qsBc pada tiap-tiap karakter yang selanjutnya nilai tersebut kemungkinan akan digunakan untuk pergeseran pola dengan cara menentukan posisi karakter dalam pola dari kanan ke kiri dan jika ada karakter sama dalam pola maka posisi karakter yang pertama ditemukan yang dicatat, Posisi dihitung mulai dari satu dan dari kanan ke kiri, pada table dibawah:

Tabel 3.6 PreQsBc pada Algoritma Maximal Shift

Proses keempat adalah PreAdaptedGS yang menghitung nilai pada tiap posisi dan kemudian nilai inilah yang kemungkinan akan digunakan untuk pergeseran pada pola, seperti pada table dibawah:

Tabel 3.7 PreAdaptedGs pada Agoritma Maximal Shift

I 0 1 2 3

AdaptedGs[i] 1 4 4 4

Selanjutnya akan dimulai langkah-langkah pencarian dengan menggunakan algoritma maximal shift dengan menentukan terlebih dahulu pola yang dicari. Setelah langkah-langkah selesai dilakukan, maka proses pencarian dimulai dengan mencocokan pola

Char A G I E


(23)

yang telah diurutkan terhadap teks. Hitung selisih panjang pola dan panjang teks. Karaketer dengan urutan pertama dalam orderPattern dicocokan dengan teks dengan teks pada posisi yang sama pada pola. Jika terjadi kecocokan maka pencarian diteruskan dengan pencocokan pola sesuai dengan posisi yang telah diurutkan dengan karakter pada teks. Jika semua pola ditemukan maka dianggap telah menumakan output string yang dicari. Jika tidak ada ketidakcocokkan maka terjadi perhitungan qsBc dan adaptedGs. Kemudian diambil nilai terbesar dari hasil perhitungan qsBc atau adaptedGs, yang digunakan untuk pergeseran. Pergeseran terus terjadi hingga jumlah pergeseran lebih besar dari pada selisih panjang teks dengan panjang pola (Handika, W. 2005).

Langkah 1:

D H E A A G I E W I L Y A

mismatch

3 2 1 0 i : 0

selisih : 9 geser : 0

Urutan pencarian dimulai dari huruf “e” yang ternyata tidak cocok dengan teks, maka dilakukan pergeseran yang akan ditentukan oleh nilai adaptedGs yang ke-i atau adaptedGs [0] = 1 dan qsBc untuk karakter berikutnya atau qsBc[a] = 4. Nilai yang akan dipakai untuk pergeseran adalah nilai yang lebih besar atau dalam hal ini adalah 4.


(24)

Langkah 2:

D H E A A G I E W I L Y A

Exact match

3 2 1 0 i : 0

selisih : 9 geser : 4

Urutan pencarian dimulai dari huruf “e” yang ternyata cocok dengan teks, kemudian dilanjutkan dengan huruf “i” yang ternyata cocok dengan teks, dan dilanjutkan dengan huruf “g” dan “a” yang ternyata cocok dengan teks sehingga pencarian dianggap menemukan output string yang sama. Maka dilakukan pergeseran yang akan ditentukan oleh nilai adaptedGs yang ke-i atau adaptedGs [0] = 1 dan qsBc untuk karakter berikutnya atau qsBc[w] = 5. Nilai yang akan dipakai untuk pergeseran adalah nilai yang lebih besar atau dalam hal ini adalah 5.

Langkah 3:

D H E A A G I E W I L Y A

Mismatch

3 2 1 0

i : 0 selisih : 9 geser : 9

A G I E


(25)

Urutan pencarian dimulai dari huruf “e” yang ternyata tidak cocok dengan teks, maka dilakukan pergeseran yang akan ditentukan oleh qsBc untuk karakter berikutnya yang ternyata tidak tersedia, maka pencarian dianggap selesai.

3.3.2. Analisis Pencocokan String dengan Algoritma Quick Search

Algoritma Quick Search mencari data secara berurut pada tiap karater dalam teks sehingga pencarian disebut pencarian sekuensial atau sequential search. Algoritma Quick Search mencari pola karakter berdasarkan nilai Quick Search-bad character atau qsBc (Handika, W. 2006). Berikut akan dilakukan langkah-langkah pencocokan string denngan algoritma Quick Search.

Teks : DHEAAGIEWILYA Pola : AGIE

Proses pertama yang dilakukan adalah mencari nilai Quick Search-bad character atau qsBc yang digunakan untuk proses pergeseran.

Tabel 3.8 PreQsBc pada Algoritma Quick Search

Char D h E A g i w L Y

QsBc [char] 5 5 1 4 3 2 5 5 5

Selanjutnya akan dimulai langkah-langkah pencarian dengan menggunakan algoritma Quick Search. Pertama-tama dihitung panjang pola dan panjang teks. Proses pencarian dimulai dengan mencocokkan pola pertama dengan karakter teks pertama, jika terjadi kecocokkan maka pencarian diteruskan dengan mencocokkan karakter pola selanjutnya dengan karakter pada teks. Jika terjadi ketidakcocokkan maka terjadi perhitungan qsBc. Hasil perhitungan qsBc akan digunakan untuk pergeseran. Pergeseran terus terjadi hingga jumlah pergeseran lebih besar daripada selisih panjang teks dengan panjang pola. Jika semua pola telah ditemukan maka dianggap telah menemukan output string yang dicari (Handika, W. 2005).


(26)

Langkah 1:

D H E A A G I E W I L Y A

mismatch

0 1 2 3

i : 0 selisih : 9 geser : 0

Urutan pencarian dimulai dari huruf “a” yang ternyata tidak cocok dengan teks, maka dilakukan pergeseran yang akan ditentukan oleh nilai qsBc untuk karakter berikutnya atau qsBc[a]= 4.

Langkah 2:

D H E A A G I E W I L Y A

Exact match

0 1 2 3

i : 0 selisih : 9 geser : 4

Urutan pencarian dimulai dari huruf “a” yang ternyata cocok dengan teks, kemudian dilanjutkan dengan huruf selanjutnya “g” yang ternyata cocok pada teks, kemudian pada huruf “i” dan huruf ”e” yang ternyata cocok pada teks sehingga pencarian

A G I E


(27)

dianggap menemukan output string yang sama. Selanjutkan akan dilakukan pergeseran yang akan ditentukan oleh nilai qsBc untuk karakter berikutnya atau qsBc[w] = 5.

Langkah 3:

D H E A A G I E W I L Y A

Mismatch

0 1 2 3 i : 0

selisih : 9 geser : 9

Urutan pencarian dimulai dari huruf “a” yang ternyata tidak cocok dengan teks, maka dilakukan pergeseran yang akan ditentukan oleh qsBc untuk karakter berikutnya yang ternyata tidak tersedia, maka pencarian dianggap selesai.

3.4. Flowchart Algoitma

Flowchart adalah bagan yang menunjukka n prosedur dan proses pemecahan masalah sistem, mendeskripsikan prosedur penyelesaian masalah dalam bentuk algoritma. Flowchart dapat diartikan sebagai suatu alat untuk sarana yang menunjukan langakah-langkah yang harus dilaksanakan dalam menyelesaikan suatu permasalahan untuk komputasi dengan cara mengekpresikannya ke dalam serangkaian simbol-simbol grafik khusus (Sutanta, 2004).


(28)

3.4.1. Flowchart MinShift

Nilai minShift merupakan nilai pencarian pola dalam teks dengan cara pola di cari dari karakter yang memiliki nilai minShift terbesar hingga nilai minShift yang terkecil pada Algoritma Maximal Shift. Berikut adalah flowchart mencari nilai minShift pada Gambar 3.5.

Start

Input: x : pattern m : leng (x)

i = 0

i < m ?

j = i - 1

j >= 0 ?

x [i] = = xj] ?

minShift [i]= i - j ++i

Output: minShift

End

yes yes

yes

--j

No

yes

No No


(29)

3.3.2. Flowchart MatchShif dan AdaptedGs

MatchShift adalah nilai untuk mencari nilai adaptedGs. AdaptedGs adalah yang menghitung nilai pada tiap posisi dan kemudian nilai inilah yang kemungkinan akan digunakan untuk pergeseran pada pola. Berikut adalah flowchart dari matchShift yang dapat dilihat pada Gambar 3.6.

No

Input: x : pattern m : leng (x)

Lshift = 1 Ploc = 1

i < m ?

i = ploc

-- i >= 0 ?

j = ((pat[i].loc - lshift) < 0 ?

++lshift

Return lshift yes

No yes

Pat[i].c != x[j] ?

i < 0 ?

yes

No yes

AdaptaedGs(ploc) = lshift

No

yes Yes Start


(30)

Setelah mendapatkan hasil nilai matchShift akan diteruskan untuk mencari nilai adaptedGs. Berikut adalah flowchart adapetedGs dapat dilihat dari Gambar 3.7.

Start

Input: x : pattern m : leng (x)

Lshift = 1 Ploc = 1

Ploc <= m ?

++ploc

i < 0 || Pat[ploc].c != x[i]

?

Lshift = adaptedGs [ploc]

end Ploc <= m?

Lshift < m? adaptedGs [0]= lshift = 1

Ploc = 1

Lshift= matchshift (x,m,ploc,lshift, pattern, pat) adaptedGs[ploc]= lshift

Ploc = 0

i = pat[ploc].loc - lshift

++ploc ++lshift

Lshift = matchshift

0utput: adaptedGs[ploc]

= lshift yes

No

yes

yes

yes

No No

No


(31)

3.4.3. Flowchart QsBc

Quick search bad-character (qsBc) adalah nilai pada karakter yang selanjutnya nilai tersebut kemungkinan akan digunakan untuk pergeseran pola dengan cara menentukan posisi karakter dalam pola dari kanan ke kiri dan jika ada karakter sama dalam pola maka posisi karakter yang pertama ditemukan yang dicatat. Berikut adalah flowchart mencari nilai preqsBc pada Algoritma Maximal Shift dan Algoritma Quick Search yang dapat dilihat pada Gambar 3.8.

Start

Input: x : pattern m : leng (x)

i = 0

i < ASIZE ?

qsBc[i]= m+1

i < m ?

qsBc[x[i]] m - i

++i Output:

QsBc[i]

End

yes yes

No

i++

i = 0 No

Gambar 3.8 Flowchart mencari nilai preQsBc pada Algoritma Maximal Shift dan Algoritma Quick Search.


(32)

3.4.4. Flowchart Maximal Shift

Maximal shift adalah proses pencarian dengan mentukan terlebih dahulu pola yang ingin dicari. Setelah semuanya selesai dilakukan, maka proses pencarian dimulai dengan mencocokkan pola yang telah diurutkan terhadap teks.Berikut adalah flowchart proses pencocokkan kata yang dapat dilihat pada Gambar 3.9.

Start Input: x: pattern m: leng (x) y: dictionary n: leng (dic)

minShift (x,m) ordepattern (x,m,matchshift) preQsBc (x,m,qsBc)

PreadaptedGs (x,m,adaptedGs)

i < m ? && Pat[i].c == y[j + pat[i],loc]

Output: j

End j = 0

j <= n-m ?

i = 0

++i i >= m ?

j + max = (adaptedGs[i] qsBc[y[j + m]]

yes

Yes No

No yes

No


(33)

3.4.5. Flowchart Quick Search

Quick search adalah proses pencarian pola karakter berdasarkan nilai quick search bad-character yang sudah dilakukan sebelumnya. QsBc tersebut adalah sebagai nilai pergeseran. Berikut adalah flowchart proses pencocokkan kata pada algoritma Quick Search yang dapat dilihat pada Gambar 3.10.

Start

Input: x : pattern m : leng (x)

i = 0

i < ASIZE ?

qsBc[i]= m+1

i < m ?

qsBc[x[i]] m - i

++i Output:

QsBc[i]

End

yes yes

No

i++

i = 0 No


(34)

3.5. Perancangan Database

Penelitian ini menggunakan basis data (database), yaitu: kumpulan informasi yang disimpan di dalam komputer secara sistematik sehingga dapat diperiksa menggunakan suatu program komputer untuk memperoleh informasi dari database tersebut. Aplikasi kamus farmakologi menggunakan SQL Server Management Studio 2012 sebagai tempat penyimpanan informasi nama-nama obat. Data yang tesimpan di dalam database ± 350 informasi nama-nama obat. Sistem memiliki satu tabel yaitu: Kamus, kemudian memiliki empat field yaitu: idkata, nama obat, keterangan obat, dan produksi. Perancangan database dapat dilihat pada Tabel 3.9.

Tabel 3.9 Database Kamus

No Field Tipe

1 Idkata Varchar

2 Nama obat Varchar

3 Keterangan Obat Varchar

4 Produksi Varchar

3.6. Perancangan Antarmuka (Interface)

Antarmuka (interface) adalah salah satu layanan yang disediakan oleh suatu sistem sebagai sarana interaksi antara pengguna dengan sistem. 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. Aplikasi yang dibangun pada penelitian ini menggunakan dua bahasa yaitu bahasa bahasa C# (Timothy, 2010).

3.6.1. Rancangan Halaman Utama

Halaman utama adalah halaman yang pertama kali ditampilkan dengan berisi fitur kamus, bantuan, tentang dan keluar dan tampilan logo. Halaman utama dapat ditunjukkan pada Gambar 3.11.


(35)

Gambar 3.11 Rancangan Halaman Utama.

Keterangan:

1. Merupakan tampilan logo farmakologi.

2. Menu kamus yaitu, halaman untuk pencarian kata.

3. Menu bantuan yaitu, halaman yang berisi panduan penggunaan aplikasi.

4. Menu tentang yaitu, halaman yang berisi informasi dari pembuat aplikasi dan judul aplikasi.

5. Exit yaitu, Keluar dari halaman utama.

3.6.2. Rancangan Halaman Kamus

Halaman kamus merupakan tampilan pencarian kata pada kamus farmakologi. Dalam halaman kamus terdiri dari masukkan kata, tekan tombol cari, kemudian diproses dan menampilkan kata dan keterangan, dan kecepatan waktu dari masing-masing algoritma. Perancangan dapat dilihat pada tampilan Gambar 3.12.

KAMUS FARMAKOLOGI

LOGO

KAMUS

BANTUAN TENTANG

KELUAR

1 1

2

3

4

5


(36)

Gambar 5.12 Rancangan Halaman Kamus. Keterangan :

1. Masukkan kata yang ingin dicari. 2. Tombol pencarian kata.

3. Tampilan kata yang dicari.

4. Tampilan keterangan dari kata yang dicari. 5. Tampilan produksi dari kata yang dicari.

6. Tampilan running time pada algoritma Maximal Shift. 7. Tampilan running time pada algoritma Quick Search. 8. Tombol hapus untuk menghapus pada tampilan kata. 9. Tombol kembali untuk kembali kehalaman utama.

3

4

1

Input

Produksi

5

Hapus Keluar

8

9

Running Time Maximal Shift

Running Time Quick Search

6

7

Cari


(37)

3.6.3. Rancangan Halaman Bantuan

Halaman bantuan berisi tentang panduan bagaimana cara menggunakan aplikasi kamus farmakologi. Rancangan dapat dilihat pada Gambar 3.13.

Gamabar 3.13 Rancangan Halaman Bantuan.

Keterangan :

1. Penjelasan bagaimana cara penggunaan aplikasi kamus farmakologi. 2. Tombol kembali berfungsi untuk kembali ke halaman utama.

Penjelasan tentang aplikasi

Kembali

1


(38)

3.6.4. Rancangan Halaman Tentang

Halaman tentang berisi informasi profil pembuat aplikasi dan menampilkan judul dari aplikasi. Rancangan dapat dilihat pada Gambar 3.14.

Gambar 3.14 Perancangan Halaman Tentang.

Keterangan :

1. Tampilan imageview pembuat. 2. Tampilan judul aplikasi.

3. Tombol kembali ke halaman utama.

Judul Aplikasi Profi

Kembali

1

2


(39)

BAB 4

IMPLEMENTASI DAN PENGUJIAN

4.1. Implementasi Sistem

Implementasi sistem adalah tahapan setelah dilakukannya analisis dan perancangan. Pada tahap ini, aplikasi sistem yang dibangun akan melakukan cara kerja utamanya. Aplikasi sistem menggunakan bahasa C# dan sistem data (database). Perangkat lunak yang digunakan sebagai Integrated Development Environment (IDE) pada penelitian ini adalah Microsoft Visual Studio Ekspres 2012 For Windows Dekstop, dan SQL Server Management Studio sebagai sistem data. Pada aplikasi sistem terdapat 4 tampilan halaman yang digunakan yaitu halaman utama, halaman kamus, bantuan dan tentang.

4.1.1. Halaman Utama

Halaman utama adalah halaman awal yang berisi fitur-fitur yaitu kamus, bantuan, dan tentang. Berikut adalah tampilan halaman utama pada Gambar 4.1.


(40)

4.1.2. Halaman Kamus

Halaman kamus adalah tampilan pencarian kata yang akan digunakan user untuk mencari kata dalam kamus dengan memasukkan kata yang ingin dicari dan memilih algoritma pencarian sehingga menghasilkan kata dan keterangan dari kata tersebut. Berkikut adalah tampilan halaman kamus dapat dilihat pada Gambar 4.2.


(41)

4.1.3. Halaman Bantuan

Halaman bantuan adalah berisi penjelasan atau tata cara penggunaan aplikasi kamus farmakologi. Berikut adalah tampilan halaman bantuan yang dapat dilihat pada Gambar 4.3.


(42)

4.1.4. Halaman Tentang

Berikut adalah tampilan halaman tentang yang dapat dilihat pada Gambar 4.4.

Gambar 4.4 Tampilan Halaman Tentang.

4.2. Pengujian Sistem

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 seberapa efektif dan efisien penerapan dari kinerja sistem dalam pencarian kata pada kamus Farmakologi menggunakan Algoritma Maximal Shift dan Algoritma Quick Search. Dalam pengujian yang akan dicari adalah string sebagai inputannya. Semua hasil pencarian ditampilkan sesuai dengan inputan yang cocok pada pencarian.


(43)

4.2.1. Pengujian Pencarian Kata

Berikut adalah tampilan pengujian sistem pencarian kata pada kamus farmakologi dengan memasukkan kata ADALAT kemudia tekan tombol cari yang dapat dilihat pada Gambar 4.5.

Gambar 4.5 Pengujian Pencarian Kata.

Pada Gambar 4.5 menapilkan bagaimana user menggunakan kamus famakologi yang menginputkan kata (ADALAT) dengan pencarian kata. Kemudian sistem menampilkan hasil pencarian kata atau nama obat yaitu; ADALAT, ADALAT OROS, ADALAT RETAR. Kemudian dari setiap kata memiliki keterangan masing-masing dari nama obat, menampilkan nama produksi dari masing-masing obat tersebut dan menampilkan waktu (running time) dari masing-masing algoritma yaitu, Algoritma Maximal Shift dan Algoritma Quick Search.


(44)

4.2.3. Perbandingan Waktu (Running Time)

Berikut adalah tampilan perbandingan waktu yang tersimpan dalam bentuk teks untuk setiap algoritma yaitu Algoritma Maximal Shift dan Algoritma Quick Search yang dapat dilihat dapa Gambar 4.6.

Gambar 4.6 Perbandingan Waktu (Running Time).

Pada Gambar 4.6 menampilan perbandingan waktu (running time) selama melakukan proses pencarian. Setiap user melakukan pencarian kata, waktu akan tersimpan dalam bentuk teks, waktu yang akan dicatat adalah waktu yang paling cepat proses pencariannya.


(45)

4.3. Hasil Pengujian

Hasil pengujian dari penelitian ini adalah waktu (running time) dari pencarian kata dan jumlah kata yang ditemukan pada Algoritma Maximal Shift dan Algoritma Quick Search yang dilakukan terhadap string yang berbeda. Pada Gambar 4.7 dapat dilihat perbandingan waktu (running time) dari tampilan tersebut maka dapat diperoleh hasil pengujian yang dapat dilihat pada Tabel 4.1 dan Tabel 4.2.

Tabel 4.1 Hasil Pengujian Waktu pada Algoritma Maximal Shift.

No Pola Waktu

(Running Time)

1 E 2826

2 DY 3467

3 FUNGI 3033

4 DYSTAN 274

5 CALCIUM 2914

TOTAL 9481 ms


(46)

Tabel 4.2 Hasil Pengujian Waktu (Running Time) pada Algoritma Quick Search.

Pada Tabel 4.1 dan Tabel 4.2 dapat dilihat hasil pengujian waktu (running tiime) dari masing-masing algoritma. Setelah hasil pengujian didapat maka akan dibuat grafik perbandingan hasil pengujian dari masing-masing algoritma yang dapat dilihat pada Gambar 4.7.

Gambar 4.7 Grafik Waktu Proses Pencarian Algoritma Maximal Shift dan Algoritma Quick Search.

2826 3467 3033

274 2914 45297

4251 2768 3371 3823 0 5000 10000 15000 20000 25000 30000 35000 40000 45000 50000 w ak tu p e n car ia n ( m il is e k o n )

pencarian kata yang di Inputkan

Grafik Perbandingan Waktu

RUNNING TIME ALGORITMA MAXIMAL SHIFT RUNNING TIME ALGORITMA QUICK SEARCH

Pola Waktu

(Running Time)

1 E 45297

2 DY 4251

3 FUNGI 2768

4 DYSTAN 3371

5 CALCIUM 3823

TOTAL 59510 ms


(47)

Gambar 4.8 Grafik Total dan Waktu Rata-Rata Pencarian Algoritma Maximal Shift dan Algoritma Quick Search.

Dari grafik Gambar 4.7, 4.8, dan 4.9 dapat dijelaskan bahwa Algoritma Maximal Shift memiliki kecepatan waktu yang lebih cepat dibandingkan dengan Algoritma Quick Search. Artinya bahwa Algoritma Maximal Shift lebih cepat untuk pencocokan kata dibandingkan dengan Algoritma Quick Search yang lebih lama dalam pencocokan kata.

4.4. Kompleksitas Algoritma

Kompleksitas algoritma yang akan diuji adalah kompleksitas Algoritma Maximal Shift dan Algoritma Quick Search. Penelitian ini hanya menggunakan kompleksitas .

4.4.1 Kompleksitas Algoritma Maximal Shift

Perhitungan kompleksitas pada Algoritma Maximal Shift terdiri dari: nilai minShift, orderpattern, qsBc, proses pencarian Maximal Shift yang dapat dilihat pada Tabel 4.3, Tabel 4.4, Tabel 4.5, Tabel 4.6.

9481 1892 59510 11902 0 10000 20000 30000 40000 50000 60000 70000 TOTAL RATA-RATA W a kt u ( m il is e k o n )

waktu total dan waktu rata-rata pencarian kata

Grafik Perbandingan Waktu Rata-Rata

Algoritma Maximal Shift Algpritma Quick Search


(48)

Tabel 4.3 Kompleksitas MinShift.

Berikut adalah nilai Minshift dari algoritma Maximal Shift :

T(n) = C1 + C2 + C3m + C4m2 + C5m2 + C6m2 + C7m = C1 + C2 + (C3)m + (C4)m +(C5)m + (C6)m + (C7)m = (C1+C2+)m0 + ( C7)m1 + (C3+C4+ 3C5 + C6 )m2 =

= 2

Pada Tabel 4.3 dapat dilihat kolom C yaitu: C1, C2, C3, C4, C5, C6 dan C7 adalah sebuah konstanta. Kemudian # adalah frekuensi yang berfungsi sebagai ukuran masukan yaitu: (1) artinya, hanya melakukan sekali proses, (m) melakukan perulangan, dan (m2) adalah terjadinya perulangan di dalam perulangan, kemudian C.# adalah untuk mencari kompleksitas waktu (T(n)), t adalah waktu dan n adalah jumlah proses. Jumlahkan hasil dari perkalian C.#, kemudian ambil pangkat terbesar dari nilai masukan (#) dan akan di dapatkan pangkat terbesar yaitu m.

Code C # C.#

Void computeMinShift(x, m) { C1 1 C1

int i, j; C2 1 C2

For (i = 0; i<m; ++i) { C3 m C3m

For (j = i – 1; j >= 0; --j) C4 m2 C4m If (x[i] == x[j]) C5 m2 C5m

Break; C6 m2 C6m

minShift[i]= i – j }

}


(49)

Tabel 4.4 Kompleksitas Orderpattern.

Code C # C.#

void orderPattern(){ C1 1 C1

int i; C2 1 C2

for (i = 0;i < x.length(); i++){ C3 m C3m

pat[i] = new pattern (); C4 m C4m

pat[i].c = x.charAt(i); C4 m C4m

pat[i].loc = i; C4 m C4m

}

Arrays.sort(pat, new Comparer()); C5 1 C5 Berikut adalah preorderpattern dari algoritma Maximal Shift :

T(n) = C1 + C2 + C3m + 3C4m + C5

= C1 + C2 + (C3)m + 3C4m + C5 = (C1+C2+ C5)m0 +(C3+ 3C4)m1 =

Pada Tabel 4.4 dapat dilihat kolom C yaitu: C1, C2, C3, C4, C4, C4, dan C5 adalah sebuah konstanta. Kemudian # adalah frekuensi yang berfungsi sebagai ukuran masukan yaitu: (1) artinya, hanya melakukan sekali proses, (m) melakukan perulangan, kemudian C.# adalah untuk mencari kompleksitas waktu (T(n)), t adalah waktu dan n adalah jumlah proses. Jumlahkan hasil dari perkalian C.#, kemudian ambil pangkat terbesar dari nilai masukan (#) dan akan di dapatkan pangkat terbesar yaitu m.

Tabel 4.5 Kompleksitas PreQsBc.

Code C # C.#

void preqsBc(){ C1 1 C1

int i = 0; C2 1 C2

For (i = 0; i < AZISE; ++i ) { C3 m C3m

qsBc [i] = m + 1); C4 m C4m

For (i = 0; i < AZISE; ++i ) C5 m C5m

qsBc[x[i]] = m - 1; }


(50)

Berikut adalah preQsBc dari algoritma Maximal Shift dan Quick Search :

T(n) = C1 + C2 + C3m + C4m + C5m + C6m

= (C1+C2) + (C3+C4+ C5 + C6)m \

= (C1+C2)m0 + (C3+C4+ C5 + C6)m1 =

Pada Tabel 4.5 dapat dilihat kolom C yaitu: C1, C2, C3, C4, C5, dan C6 adalah sebuah konstanta. Kemudian # adalah frekuensi yang berfungsi sebagai ukuran masukan yaitu: (1) artinya, hanya melakukan sekali proses, (m) melakukan perulangan, kemudian C.# adalah untuk mencari kompleksitas waktu (T(n)), t adalah waktu dan n adalah jumlah proses. Jumlahkan hasil dari perkalian C.#, kemudian ambil pangkat terbesar dari nilai masukan (#) dan akan di dapatkan pangkat terbesar yaitu m.

Tabel 4.6 Kompleksitas PreadaptedGs.

Code C # C.#

void preAdaptedGS(){ C1 1 C1

int lshift, i, ploc; C2 1 C2

adaptedGS[0] = lshift = 1; C3 1 C3

for (ploc = 1; ploc <= m; ++ploc){ C4 m C4m

lshift = matchshift(ploc, lshift); C5 m C5m adaptedGS[ploc] = lshift;

}

C6 m C6

for (ploc = 0; ploc < m;ploc++){ C7 m C7m

lshift = adaptedGS[ploc]; C8 m C8m

while (lshift < m){ C9 m2 C9m2

i = pat[ploc].loc - lshift; C10 m2 C10m2

if (i < 0 || pat[ploc].c != x.charAt(i)) C11 m2 C11 m2

break; C12 m2 C12 m2

++lshift; C13 m2 C13 m2

lshift = matchshift(ploc, lshift); C14 m2 C14m2

}

adaptedGS[ploc] = lshift; }

}


(51)

Berikut adalah OrdernPattern dari algoritma Maximal Shift :

T(n) = C1 + C2 + C3 + C4m + C5m + C6m + C7m + C8m + C9m2 + C10m2 + C11m2 + C12m2 + C13m2 + C14m2 + C15m

= (C1+ C2+C3)m0 + (C4+C5+C6+ C7 +C8+ C15)m1 + (C9+C10+ C11 + C12+C13+C14)m2

= 2

Pada Tabel 4.6 dapat dilihat kolom C yaitu: C1, C2, C3, C4, C5, C6, C7, C8, C9, C10,C11, C12,C13 dan C14 adalah sebuah konstanta. Kemudian # adalah frekuensi yang berfungsi sebagai ukuran masukan yaitu: (1) artinya, hanya melakukan sekali proses, (m) melakukan perulangan sepanjang string atau teks , (m2) melakukan perulangan di dalam perulangan kemudian C.# adalah untuk mencari kompleksitas waktu (T(n)), t adalah waktu dan n adalah jumlah proses dari pola yang di inputkan oleh user. Jumlahkan hasil dari perkalian C.#, kemudian ambil pangkat terbesar dari nilai masukan (#) dan akan di dapatkan pangkat terbesar yaitu m.

Tabel 4.7 Kompleksitas Maximal Shift

Code C # C.#

public static void MS(){ C1 1 C1

int i, j; C2 1 C2

j = 0; C3 1 C3

while(j <= n - m){ C4 n C4n

i = 0; C5 1 C5

while (i < m && pat[i].c == y.charAt(j + pat[i].loc)) C6 mn C6mn

i++; C7 mn C7mn

if (i >= m) C8 mn C8mn

Output J; C9 mn C9mn

j+= Max (adaptedGS[i], qsBc.[ y [ j + m ]]); }


(52)

Berikut adalah Searching dari algoritma Maximal Shift :

T(n) = C1 + C2 + C3 + C4n + C5 + C6mn + C7mn + C8mn + C9mn + C10mn

= (C1+ C2+C3+C5)m0 + (C4)n1 + (C6 +C7+ C8+C9+C10)mn1 = m0 + n1 + mn1

=

Pada algoritma Maximal Shift menghasilkan preorderpattern T(n) = , preQsBc memiliki T(n)= , preadaptedGs T(n) = , dan pencarian dengan Maximal Shift T(n) = . Karena pangkat yang teebesar adalah .

4.4.2. Kompleksitas dengan Algoritma Quick Search

Perhitungan kompleksitas pada Algoritma Quick Search terdiri dari: nilai PreQsBc yang sudah di terangkan pada Tabel 4.5 dan proses pencarian Algoritma Quick Search pada Tabel 4.8.

Tabel 4.8 Kompleksitas Quick Search.

Code C # C.#

public static void QS(){ C1 1 C1

int i, j; C2 1 C2

j = 0; C3 1 C3

while(j <= n - m){ C4 n C4n

If (memcmp (x,y + j,m) == 0) C5 mn C5mn

Output (j) C6 mn C6mn

J += qsBc [y[j + m]]; }

}

C7 mn C7mn

Berikut adalah Searching dari algoritma Quick Search : T(n) = C1 + C2 + C3 + C4n + C5mn + C6 + C7mn

= (C1+ C2+C3)m0 + (C4)n1 + (C5+C6+C7)mn1 =


(53)

Pada Tabel 4.7 dapat dilihat kolom C yaitu: C1, C2, C3, C4, C5, C6, dan C7 adalah sebuah konstanta. Kemudian # adalah frekuensi yang berfungsi sebagai ukuran masukan yaitu: (1) artinya, hanya melakukan sekali proses, (m) melakukan perulangan sepanjang string atau teks , (m2) melakukan perulangan di dalam perulangan kemudian C.# adalah untuk mencari kompleksitas waktu (T(n)), t adalah waktu dan n adalah jumlah proses dari pola yang di inputkan oleh user. Jumlahkan hasil dari perkalian C.#, kemudian ambil pangkat terbesar dari nilai masukan (#) dan akan di dapatkan pangkat terbesar yaitu m.

Pada algoritma Quick Search proses pencarian menghasilkan PreqsBc T(n)= dan kompleksitas pencarian Quick Search T(n) = .


(54)

BAB V

KESIMPULAN

5.1 Kesimpulan

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

1. Algoritma Maximal Shift memiliki banyak kompleksitas yaitu; MinShift, Ordernpattern, adaptedGs, PreQsBc dan proses pencarian dengan Maximal Shift yang membuat pencarian kata menjadi lebih lama.

2. Algoritma Quick Search memiliki kompleksitas PreQsBc dan proses pencarian dengan Quick Search sehingga proses pencarian lebih cepat dibandingkan Maximal Shift

5.2 Saran

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

1. Algoritma String Matching pada penelitian ini menggunakan dua algoritma yaitu Algoritma Maximal Shift dan Algoritma Quick Search. Penulis berharap pengembang selanjutnya membandingkan kinerja dengan Algoritma String Matching ya lainnya.

2. Aplikasi kamus farmakologi ini hanya mampu mencari kata dalam kamus dengan jumlah kata dalam database 350 kata. Diharapkan pada pengembang untuk menambahkan kata dalam database dari sumber yang lain.

3. Aplikasi ini tidak menyediakan form Admin untuk penambahan kata pada kamus. Diharapkan pengembang selanjutnya untuk menambahkan admin dalam kamus sehingga mudah dalam menambahkan kata dalam kamus farmakologi.


(55)

BAB 2

TINJAUAN PUSTAKA

2.1. Algoritma

Algoritma ditemukan oleh seorang ahli matematika dari Uzbekistan, yang bernama

Abu Ja’far Muhammad Ibnu Al-Kwarizmi (770-840). Dalam bukunya yang berjudul

“Al-Jabr W’al Muqabala”, beliau telah menjelaskan langkah-langkah dalam

penyelesaian berbagai persoalan aritmatika. Kata “Algoritma”, kemungkinan diambil

dari kata “Al-Kwarizmi” yang kemudian berubah menjadi “Algorizm”, selanjutnya

panggilan ini dipakai untuk menyebut konsep “Algorithm” yang ditemukan (Munir,

2007).

Algoritma adalah prosedur komputasi yang terdefinisi dengan baik yang menggunakan beberapa nilai sebagai masukan dan menghasilkan beberapa nilai yang disebut keluaran. Jadi, algoritma adalah deretan langkah komputasi yang mentransformasikan masukan menjadi keluaran (Munir, 2007). Tujuan algoritma memberikan petunjuk tentang langkah-langkah logika penyelesaian permasalahan dalam bentuk yang mudah dipahami nalar manusia sebagai acuan yang membantu dalam mengembangkan program komputer. Pemahaman tentang algoritma akan mencegah sejak dini kemungkinan terjadinya kesalahan logika pada program komputer yang dikembangkan. Untuk mencapai tujuan diatas terdapat lima syarat yang harus dipenuhi dalam algoritma menurut (Sutanta, 2004).

1. Logika prosedur pada algoritma harus cukup mudah dipahami nalar manusia. 2. Validitas prosedur pada algoritma dapat ditelusuri dengan mudah.

3. Tidak menimbulkan kerancuan interpretasi bagi orang lain.

4. Prosedur pada algoritma harus cukup mudah dikonversi ke program komputer. 5. Prosedur pada algoritma tidak terpengaruh/bergantung pada bahasa

pemrograman apapun.


(56)

1. Algoritma harus berhenti setelah mengerjakan sejumlah langkah terbatas. Sebagai contoh, tinjau kembali algoritma Euclidean. Pada langkah 1, jika n=0, algoritma berhenti. Jika n≠0, maka nilai n selalu berkurang sebagai akibat langkah 2 dan 3, dan pada akhirnya nilai n=0. Program yang tidak pernah berhenti mengindikasikan bahwa program tersebut berisi algoritma yang salah. 2. Setiap langkah harus didefinisikan dengan tepat dan tidak berarti dua (ambiguous). Pembaca harus mengerti apa yang dimaksud dengan “m dan n adalah bilangan bulat tak-negatif”. Contoh pernyataan, “bagilah p dengan

sejumlah beberapa buah bilangan bulat positif” dapat bermakna ganda.

Berapakah yang dimaksud dengan “berapa”?. Algoritma menjadi jelas jika

langkah tersebut ditulis “bagilah p dengan 10 buah bilangan positif ”.

3. Algoritma memiliki nol atau lebih masukan (input). Masukan ialah besaran yang diberikan kepada algoritma untuk diproses. Algoritma Euclidean mempunyai dua buah masukan, m dan n.

4. Algoritma mempunyai nol atau lebih keluaran (output). Keluaran dapat berupa pesan atau besaran yang memiliki hubungan dengan masukan.

5. Algoritma harus sangkil (effective). Setiap langkah harus sederhana sehingga dapat dikerjakan dalam sejumlah waktu yang masuk akal.

Berdasarkan ciri algoritma yang dipaparkan oleh Donald Knuth dan defenisi algoritma maka dapat disimpulkan sifat utama suatu algoritma (Suarga, 2006) yaitu :

1. Input : Suatu algoritma memiliki input atau kondisi awal sebelum algoritma dilaksanakan dan bisa berupa nilai-nilai pengubah yang diambil dari himpunan khusus.

2. Output : Suatu algoritma menghasilkan output setelah dilaksanakan, atau algoritma akan mengubah kondisi awal menjadi kondisi akhir, dimana nilai output diperoleh dari nilai input yang telah diproses melalui algoritma.

3. Definiteness : Langkah-langkah yang dituliskan dalam algoritma terdefinisi dengan jelas sehingga mudah dilaksana oleh penggunaan algoritma.

4. Finiteness : Suatu algoritma harus memberi kondisi akhir atau output setelah melakukan sejumlah langkah yang terbatas jumlahnya untuk setiap kondisi awal atau input yang diberikan.


(57)

5. Effectiveness : Setiap langkah dalam algoritma bisa dilaksanakan dalam suatu selang waktu tertentu sehingga pada akhirnya memberi solusi sesuai yang diharapkan.

2.2. Konsep Algoritma

Penyelesain permasalahan dengan menggunakan alat bantu sistem komputer paling tidak akan melibatkan lima tahapan, yaitu:

1. Analisis masalah. 2. Merancang algoritma.

3. Membuat program komputer. 4. Menguji hasil program komputer. 5. Dokumentasi.

Tahapan-tahapan tersebut dapat dikelompokan menjadi dua, yaitu fase penyelesaian permasalahan (problem solving phase) dan fase implementasi (implementasi phase). Langkah pertama, yaitu analisis masalah merupakan langkah paling awal untuk mengetahui lebih jauh tentang permasalahan yang akan diselesaikan dengan menggunakan alat bantu komputer. Langkah kedua, yaitu merancang algoritma dilakukan dengan tujuan utama sebagai berikut (Sutanta, 2004).

a. Menentukan ide solusi. b. Menyatakan algoritma. c. Memvalidasi algoritma. d. Menganalisis algoritma.

Validasi algoritma diperlukan untuk menguji validasi prosedur yang telah dinyatakan dalam algoritma terhadap seluruh kemungkinan data yang di input. Sedangkan analisis algoritma dimaksudkan untuk mengetahui tingkat efisiensi proses dalam algoritma, yang berkaitan dengan efisiensi waktu dan efisiensi penggunaan memori dalam sistem komputer.


(58)

2.3. String Matching

String matching adalah sebuah subjek yang banyak digunakan dalam lingkup pencarian teks. Algoritma-algoritma string matching menjadi komponen dasar yang diaplikasi pada berbagai piranti lunak dan dapat ditemukan pada hampir semua jenis sistem operasi (Charras & Lecroq, 1997). Selain itu, algoritma-algoritma string matching mempengaruhi metode pemrograman yang menjadi pola/acuan dalam bidang lainnya di computer science (baik sistem maupun perancangan piranti lunak). Algoritma-algoritma string matching juga mempunyai perubahan penting dalam lingkup teori computer science dengan menyediakan tantangan-tantangan dan permasalahan-permasalahan untuk dipecahkan.

Secara umum, String Matching merupakan proses pencarian kata (pattern) dalam sebuah kalimat teks (string), String matching bisa untuk menemukan satu pattern yang pertama kali ditemukan, atau yang lebih umum menampilkan semua pattern yang dapat ditemukan dalam teks (Charras & Lecroq, 1997). Jenis string matching bermacam-macam, dibedakan menurut hasil yang diinginkan. Yang akan dibahas pada tulisan ini adalah Exact String Matching, Artinya pencarian yang dilakukan untuk menemukan sebuah substring/pattern yang tepat sama dalam sebuah string/text. Pattern dilambangkan dengan P=P[O...m-1], yang mana m adalah panjang dari pattern tersebut atau bisa disebut P:Length. Teks dilambangkan dengan T=IIO ...n-1], yang mana n adalah panjang dari teks atau bisa disebut I:Length. String Matching dirumuskan sebagai berikut:

x = x[0…m-1]

y = y[0…n-1]

Dimana : x adalah pattern

m adalah panjang pattern y adalah teks

n adalah panjang teks

Kedua string terdiri dari sekumpulan karakter yang disebut alfabet yang dilambangkan

dengan ∑ (sigma) dan mempunyai ukuran σ (tao). String matching dibagi menjadi


(59)

Exact Matching digunakan untuk menemukan pattern yang berasal dari satu teks. Contoh pencarian exact matching adalah pencarian kata “pelajar” dalam kalimat “saya

seorang pelajar” atau “saya seorang siswa”. Sistem akan memberikan hasil bahwa

kalimat pertama mengandung kata “pelajar” sedangkan kalimat kedua tidak, meskipun kenyataannya pelajar dan siswa adalah kata yang bersinonim (Sarno, et al, 2012). Cara kerja algoritma Exact String Matching adalah sebagai berikut: Posisi awal pencarian adalah pada ujung kiri (karakter pertama) dari P atau T, lalu karakter pada posisi tertentu di T dibandingkan dengan karakter pada P, bagian ini biasa disebut dengan pattern, dan setelah seluruh perbandingan telah dilakukan atau ditemukan ketidaksamaan maka P akan digeser ke kanan. Prosedur ini dilakukan berulang-ulang sampai ujung kanan P bertemu dengan ujung kanan T. Setiap pattern dengan posisi i pada T terjadi ketika P berada pada posisi m-1. Berdasarkan arah pemeriksaan karakter, metode yang digunakan dikelompokkan menjadi (Cahyo, 2007):

1. Metode pembacaan berawal dari posisi kiri mengarah ke kanan, salah satu contohnya adalah algoritma Knut-Morris-Pratt. Metode ini tergolong alamiah karena sesuai dengan arah pembacaan biasa dan memiliki karakteristik seperti proses pada automata.

2. Metode pembacaan berawal dari posisi kanan mengarah ke kiri, misalnya algoritma Boyer-Moore. Metode ini umumnya menghasilkan algoritma yang sederhana dan dianggap paling mangkus.

3. Metode pencarian dengan aturan tertentu, salah satunya adalah pencarian dua arah yang diawali dengan kemunculan algoritma dua jalur yang dicetuskan oleh Crochemore-Perrin. Metode ini melakukan dua jenis pencarian, yang pertama adalah mencari bagian kanan pola dari kiri ke kanan, dan jika tidak ada ketidakcocokan, pencarian dilanjutkan dengan bagian kiri.

4. Metode yang tidak memiliki suatu pola tertentu, biasanya algoritma ini menggunakan sebagian metode dari algoritma pada tiga kelompok di atas yang dikombinasikan dengan metode lain, contohnya adalah algotima quick search.


(60)

String matching adalah pencarian sebuah pattern pada sebuah teks. Prinsip kerja algoritma string matching adalah sebagai berikut (Effendi, et al, 2013):

1. Memindai teks dengan bantuan sebuah window yang ukurannya sama dengan panjang pattern.

2. Menempatkan window pada awal teks.

3. Membandingkan karakter pada window dengan karakter dari pattern. Setelah pencocokan (baik hasilnya cocok atau tidak cocok), dilakukan shift ke kanan pada window. Prosedur ini dilakukan berulang-ulang sampai window berada pada akhir teks. Mekanisme ini disebut mekanisme sliding-window.

Algoritma string matching mempunyai tiga komponen utama (Effendi, et al, 2013), yaitu:

1. Pattern, yaitu deretan karakter yang akan dicocokkan dengan teks, dinyatakan dengan x[0..m-1], panjang pattern dinyatakan dengan m.

2. Teks, yaitu tempat pencocokan pattern dilakukan, dinyatakan dengan y[0..n-1], panjang teks dinyatakan dengan n.

3. Alfabet, yang berisi semua simbol yang digunakan oleh bahasa pada teks dan pattern, dinyatakan dengan ∑ dengan ukuran dinyatakan dengan ASIZE.

2.4. Algoritma Maximal Shift

Algoritma Maximal Shift adalah algoritma yang mencari pola dalam teks dengan cara pola dicari dari karakter yang memiliki nilai minShift yang terbesar hingga minShift yang terkecil. Sunday merancang sebuah algoritma dimana karater pola yang satu akan menyebabkan pergeseran yang lebih besar dan yang satu lainnya menyebabkan pergeseran yang lebih pendek. Tahapan proses dari algoritma Maximal shift terdiri dari memilah karakter pola dalam urutan penurunan pergeseran, membangun bad-charaters shift dan fungsi good-suffix Shif. Fungsi tersebut disesuaikan dengan urutan scanning karakter pola, (Charras & Lecroq, 2004). Langkah-langkah proses algoritma Maximal Shift yaitu:


(1)

ABSTRAK

Aplikasi kamus farmakologi dapat membantu masyarakat untuk memahami istilah medis yang berasal dari bahasa Yunani atau Latin yang sulit dipahami. Sehingga, dibutuhkan algoritma String Matching untuk memudahkan pencarian kata pada aplikasi tersebut, terdapat beberapa algoritma String Matching yaitu; Maximal Shift dan Quick Search. Dalam proses pencarian kata algoritma Maximal Shift dan Quick

Search memiliki cara kerja yang berbeda. Maximal Shift adalah algoritma yang mencari pola dalam teks dengan cara pola dicari dari karakter yang memiliki nilai minShift yang terbesar hingga minShift yang terkecil dan perbandingan pola yang dilakukan dari kanan ke kiri. Sedangkan, Quick Search adalah algoritma sederhana dimana perbandingan yang dilakukan secara ketat dari kiri ke kanan dan mencari pola karakter berdasarkan nilai Quick Search-bad character. Aplikasi kamus farmakologi ini akan menampilkan pencarian kata serta perbandingan running time kedua algoritma. Dari hasil pencarian kata terdapat nilai rata-rata running time pada algoritma Maximal Shift yaitu; dan Algoritma Quick Search yaitu; . Nilai rata-rata tersebut dapat disimpulkan Algoritma Maximal Shift lebih cepat melakukan pencocokkan kata.


(2)

ANALYSIS AND COMPARISION MAXIMAL SHIFT ALGORITHM WITH QUICK SEARCH ALGORITHM FOR DICTIONARY APPLICATION

PHARMACOLOGY

ABSTRCT

Pharmacology dictionary application can help people to understand medical terms that derived from Greek or Latin. However, this application needs string matching algorithm to work in order to get the definition faster. Some of the string matching algorithm are Maximal shift and Quick search. Maximal shift and quick search algorithm have different processes. Maximal shift is an algorithm that looks for pattern in the text from the character’s biggest value of minShift to smallest minshift, The comparison of patterns started from right to left. Meanwhile, the Quick search algorithm is a simple algorithm whereby the comparison of patterns is done strictly from left to right, and the find is of the characters pattern is based on Quick search-bad character’s value.The pharmacology dictionary application will show the comparison of the two algorithm’s running time. Of the word search results there the average value on Maximal Shift Algorithm running time is and Quick Search Algorithm is . It is therefor concluded that Maximal Shift Algorithm is faster than String Matching.


(3)

DAFTAR ISI

PERSETUJUAN ii

PERNYATAAN iii

UCAPAN TERIMA KASIH iv

ABSTRAK vi

ABSTRACT vii

DAFTAR ISI viii

DAFTAR TABEL x

DAFTAR GAMBAR xi

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 4

1.7 Sistematika Penulisan 5

BAB 2 TINJAUAN PUSTAKA

2.1 Algoritma 6

2.2 Konsep Algoritma 8

2.3 String Matching 9

2.4 Algoritma Maximal Shift 11

2.5 Algoritma Quick Search 14

2.6 Kompleksitas Algoritma 16

2.6.1 Notasi Asimptotik 16

2.7 Farmakologi 19

BAB 3 ANALISIS DAN PERANCANGAN SISTEM

3.1 Analisis Sistem 20

3.1.1 Analisis Masalah 20

3.1.2 Analisis Kebutuhan 21

3.1.2.1 Kebutuhan Fungsional 21

3.1.2.2 Kebutuhan Non-Fungsional 22

3.2 Pemodelan Sistem 23

3.2.1 Diagram Use Case 23


(4)

3.3.2 Analisis Pencocokan String Algoritma Quick Search 32

3.4 Flowchart Program 34

3.4.1 Flowchart MinShift 35

3.4.2 Flowchart MatchShift dan AdaptedGs 36

3.4.3 Flowchart QsBc 38

3.4.4 Flowchart Maximal Shift 39

3.4.5 Flowchart Quick Search 40

3.5 Perancagan Database 41

3.6 Perancangan Antarmuka (Interface) 41

3.6.1 Rancangan Halaman Utama 41

3.6.2 Rancangan Halaman Kamus 42

3.6.3 Rancangan Halaman Bantuan 44

3.6.4 Rancangan Halaman Tentang 45

BAB 4 IMPLEMENTASI DAN PENGUJIAN SISTEM

4.1 Implementasi Sistem 46

4.1.1 Tampilan Halaman Utama 46

4.1.2 Tampilan Halaman Kamus 47

4.1.3 Tampilan Halaman Bantuan 48

4.1.4 Tampilan Halaman Tentang 49

4.2 Pengujian Sistem 49

4.2.1 Pengujian Pencarian Kata 50

4.2.2 Perbandingan Waktu (Running Time) 51

4.3 Hasil pengujian 52

4.4 Kompleksitas Algoritma 54

4.4.1 Kompleksitas Algoritma Maximal Shift 54 4.4.2 Kompleksitas Algoritma Quick Search 59 BAB 5 KESIMPULAN DAN SARAN

5.1 Kesimpulan 61

5.2 Saran 62

DAFTAR PUSTAKA 63


(5)

DAFTAR TABEL

Tabel 2.1 Nilai MinShift pada Contoh 12

Tabel 2.2 OrderPattern Maximal Shift Pada Contoh 12

Tabel 2.3 Perhitungan PreQsBc pada Contoh 12

Tabel 2.4 Perhitungan AdaptedGs 13

Tabel 2.5 Perhitungan PreQsBc pada Contoh Quick Search 14 Tabel 3.1 UseCase Input Kata Pada Kamus Farmakologi 24 Tabel 3.2 UseCase Bantuan pada Kamus Farmakologi 25 Tabel 3.3 UseCase Tentang pada Kamus Farmakologi 25

Tabel 3.4 Nilai MinShift pada Maximal Shift 28

Tabel 3.5 Orderpattern pada Maximal Shift 29

Tabel 3.6 PreQsBc pada Algoritma Maximal Shift 29

Tabel 3.7 PreadaptedGs pada Algoritma Maximal Shift 29

Tabel 3.8 PreQsBc pada Algoritma Quick Search 32

Tabel 3.9 Database Kamus 41

Tabel 4.1 Hasil Pengujian Waktu pada Algoritma Maximal Shift 52 Tabel 4.2 Hasil Pengujian Waktu pada Algoritma Quick Search 53

Tabel 4.3 Kompleksitas MinShift 55

Tabel 4.4 Kompleksitas Ordernpattern 56

Tabel 4.5 Kompleksitas QsBc 56

Tabel 4.6 Kompleksitas PreAdaptedGs 57

Tabel 4.7 Kompleksitas Maximal Shift 58


(6)

DAFTAR GAMBAR

Gambar 2.1 Tahap Pencarian Algoritma Maximal Shift 14 Gambar 2.2 Tahap Pencarian Algoritma Quick Search 16

Gambar 2.3 Grafik Notasi Asimptotik Ω 17

Gambar 2.4 Grafik Notasi Asimptotik 17

Gambar 2.5 Grafik Notasi Asimptotik O 18

Gambar 3.1 Diagram Ishikawa 21

Gambar 3.2 Diagram Use Case Sistem 23

Gambar 3.3 Diagram Sequence 26

Gambar 3.4 Diagram Activity 27

Gambar 3.5 Flowchart Mencari Nilai MinShift pada Maximal Shift 35 Gambar 3.6 Flowchart MatchShift pada Maximal Shift 36 Gambar 3.7 Flowchart AdaptedGs Pada Maximal Shift 37 Gambar 3.8 Flowchart Mencari Nilai QsBc pada Algoritma 38

Maximal Shift dan Quick Search

Gambar 3.9 Flowchart Pencarian Maximal Shift 39

Gambar 3.10 Flowchart Pencarian Quick Search 40

Gambar 3.11 Rancangan Halaman Utama 42

Gambar 3.12 Rancangan Halaman Kamus 43

Gambar 3.13 Rancangan Halaman Bantuan 44

Gambar 3.14 Rancangan Halaman Tentang 45

Gambar 4.1 Tampilan Halaman Utama 46

Gambar 4.2 Tampilan Halaman Kamus 47

Gambar 4.3 Tampilan Halaman Bantuan 48

Gambar 4.4 Tampilan Halaman Tentang 49

Gambar 4.5 Pengujian Pencarian Kata 50

Gambar 4.6 Perbandingan Waktu (Running Time) 51

Gambar 4.7 Grafik Waktu Proses Pencarian Algoritma Maximal Shift dan 53 Quick Search

Gambar 4.8 Grafik Total dan Waktu Rata-Rata Pencarian Algoritma Maximal 54 Shift dan Quick Search