tugas individu 2_struktur data dan algoritma ii_m0513019

12
Tugas Individu (2) SDA II Aplikasi String Matching menggunakan algoritma Brute force, KMP (Knuth- Morris-Pratt) dan Byore-Moore. Sifat Tugas : Individu Batas pengumpulan : 12 Desember 2014 Arsip pengumpulan : - CD yang berisi Report (Laporan), Source Code. - Laporan (Hardcopy) Bangun sebuah aplikasi untuk pencocokan string (String Matching) dengan menggunakan 3 algoritma yaitu Brute Force, KMP (Knuth-Morris-Pratt) dan Byore-Moore. Aplikasi yang dibangun memiliki spesifikasi sbb: Input berupa T (Teks) dari file eksternal misal file dengan format .txt dll, selain itu juga input P (Pattern) yakni string yang akan dicari. Output dari aplikasi adalah hasil status dari pencocokan string apakah berhasil atau tidak, jika berhasil program akan menampilkan posisi/lokasi awal dari P (pattern) di T (Teks). Selain itu, aplikasi juga harus menampilkan hasil running time dari ketiga algoritma tersebut. Aplikasi menyediakan pilihan untuk mengulangi input T (Teks) maupun P(Pattern) yang berbeda. Aplikasi yang dibuat harus berbasis grafis (GUI). Format Laporan : Halaman Cover Bab 1: Pendahuluan Bab 2: Dasar teori Bab 3: Analisis & Rancangan Aplikasi. Bab 4: Hasil & Pembahasan. Bab ini berisi: Bab 5: Kesimpulan dan saran (hasil yang dicapai, saran pengembangan). Tuliskan juga referensi (buku, web, paper), yang dipakai/diacu di dalam Daftar Referensi. Penilaian : 1. Kebenaran program (50%) : program mampu berjalan sesuai dengan requirement system yang sudah ditentukan. 2. Laporan (35%) 3. Interface, feature-feature program, dan unsur kreativitas (15%) Lain – lain : 1. Anda dapat menambahkan fitur fungsional lain untuk menunjang program yang anda buat (unsur kreatifitas). 2. Program harus modular dan mengandung komentar yang jelas. 3. Mahasiswa harus membuat program sendiri, tetapi belajar dari contoh-contoh program tidak dilarang (tidak boleh mengkopi source code dari program orang lain). 4. Pengumpulan paling lambat adalah tanggal 12 Desember 2014. Keterlambatan akan mengurangi nilai. 5. Tugas disimpan di dalam folder TI2_NIM. Isi folder ada dua yakni laporan dan source program Folder ini disimpan dalam bentuk CD untuk dikumpulkan bersama berkas laporan. -selamat mengerjakan-

Upload: fembi-rekrisna-grandea-putra

Post on 14-Apr-2017

41 views

Category:

Education


0 download

TRANSCRIPT

Tugas Individu (2) SDA II

Aplikasi String Matching menggunakan algoritma Brute force, KMP (Knuth-

Morris-Pratt) dan Byore-Moore.

Sifat Tugas : Individu

Batas pengumpulan : 12 Desember 2014

Arsip pengumpulan : - CD yang berisi Report (Laporan), Source Code.

- Laporan (Hardcopy)

Bangun sebuah aplikasi untuk pencocokan string (String Matching) dengan menggunakan 3

algoritma yaitu Brute Force, KMP (Knuth-Morris-Pratt) dan Byore-Moore. Aplikasi yang dibangun

memiliki spesifikasi sbb:

• Input berupa T (Teks) dari file eksternal misal file dengan format .txt dll, selain itu juga

input P (Pattern) yakni string yang akan dicari.

• Output dari aplikasi adalah hasil status dari pencocokan string apakah berhasil atau tidak,

jika berhasil program akan menampilkan posisi/lokasi awal dari P (pattern) di T (Teks).

• Selain itu, aplikasi juga harus menampilkan hasil running time dari ketiga algoritma

tersebut.

• Aplikasi menyediakan pilihan untuk mengulangi input T (Teks) maupun P(Pattern) yang

berbeda.

• Aplikasi yang dibuat harus berbasis grafis (GUI).

Format Laporan :

Halaman Cover

Bab 1: Pendahuluan

Bab 2: Dasar teori

Bab 3: Analisis & Rancangan Aplikasi.

Bab 4: Hasil & Pembahasan. Bab ini berisi:

Bab 5: Kesimpulan dan saran (hasil yang dicapai, saran pengembangan).

Tuliskan juga referensi (buku, web, paper), yang dipakai/diacu di dalam Daftar Referensi.

Penilaian :

1. Kebenaran program (50%) : program mampu berjalan sesuai dengan requirement system

yang sudah ditentukan.

2. Laporan (35%)

3. Interface, feature-feature program, dan unsur kreativitas (15%)

Lain – lain : 1. Anda dapat menambahkan fitur fungsional lain untuk menunjang program yang anda buat

(unsur kreatifitas).

2. Program harus modular dan mengandung komentar yang jelas.

3. Mahasiswa harus membuat program sendiri, tetapi belajar dari contoh-contoh program tidak

dilarang (tidak boleh mengkopi source code dari program orang lain).

4. Pengumpulan paling lambat adalah tanggal 12 Desember 2014. Keterlambatan akan

mengurangi nilai.

5. Tugas disimpan di dalam folder TI2_NIM. Isi folder ada dua yakni laporan dan source

program Folder ini disimpan dalam bentuk CD untuk dikumpulkan bersama berkas laporan.

-selamat mengerjakan-

LAPORAN TUGAS INDIVIDU

STRUKTUR DATA DAN ALGORITMA

STRING MATCHING

DISUSUN OLEH:

FEMBI REKRISNA GRANDEA PUTRA

M0513019

JURUSAN INFORMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS SEBELAS MARET

SURAKARTA

DESEMBER 2014

BAB I

PENDAHULUAN

Algoritma pencarian string atau sering disebut juga pencocokan string adalah

algoritma untuk melakukan pencarian semua kemunculan string pendek pattern[0..n-1] yang

disebut pattern di string yang lebih panjang teks[0..m-1] yang disebut teks.

Pencocokkan string merupakan permasalahan paling sederhana dari semua

permasalahan string lainnya, dan dianggap sebagai bagian dari pemrosesan data,

pengkompresian data, analisis leksikal, dan temu balik informasi. Teknik untuk

menyelesaikan permasalahan pencocokkan string biasanya akan menghasilkan implikas i

langsung ke aplikasi string lainnya.

Algoritma-algoritma pencocokkan string dapat diklasifikasikan menjadi tiga bagian

menurut arah pencariannya.

Tiga kategori itu adalah:

Dari arah yang paling alami, dari kiri ke kanan, yang merupakan arah untuk

membaca, algoritma yang termasuk kategori ini adalah:

1. Algoritma Brute Force

2. Algoritma dari Morris dan Pratt, yang kemudian dikembangkan oleh Knuth,

Morris, dan Pratt

Dari kanan ke kiri, arah yang biasanya menghasilkan hasil terbaik secara praktikal,

contohnya adalah:

1. Algoritma dari Boyer dan Moore, yang kemudian banyak dikembangkan,

menjadi Algoritma turbo Boyer-Moore, Algoritma tuned Boyer-Moore, dan

Algoritma Zhu-Takaoka;

Dan kategori terakhir, dari arah yang ditentukan secara spesifik oleh algoritma

tersebut, arah ini menghasilkan hasil terbaik secara teoritis, algoritma yang termasuk

kategori ini adalah:

1. Algoritma Colussi

2. Algoritma Crochemore-Perrin

BAB II

DASAR TEORI

Algoritma brute force merupakan algoritma pencocokan string yang ditulis tanpa

memikirkan peningkatan performa. Algoritma ini sangat jarang dipakai dalam praktik,

namun berguna dalam studi pembanding dan studi-studi lainnya.

Secara sistematis, langkah- langkah yang dilakukan algoritma brute force pada saat

mencocokkan string adalah:

1. Algoritma brute force mulai mencocokkan pattern pada awal teks.

2. Dari kiri ke kanan, algoritma ini akan mencocokkan karakter per karakter pattern

dengan karakter di teks yang bersesuaian, sampai salah satu kondisi berikut

dipenuhi:

1. Karakter di pattern dan di teks yang dibandingkan tidak cocok (mismatch).

2. Semua karakter di pattern cocok. Kemudian algoritma akan memberitahukan

penemuan di posisi ini.

3. Algoritma kemudian terus menggeser pattern sebesar satu ke kanan, dan mengulangi

langkah ke-2 sampai pattern berada di ujung teks.

Berikut adalah Algoritma brute force yang sedang bekerja mencari string:

Algoritma Knuth-Morris-Pratt adalah salah satu algoritma pencarian string,

dikembangkan secara terpisah oleh Donald E. Knuth pada tahun 1967 dan James H. Morris

bersama Vaughan R. Pratt pada tahun 1966, namun keduanya mempublikasikannya secara

bersamaan pada tahun 1977.

Jika kita melihat algoritma brute force lebih mendalam, kita mengetahui bahwa

dengan mengingat beberapa perbandingan yang dilakukan sebelumnya kita dapat

meningkatkan besar pergeseran yang dilakukan. Hal ini akan menghemat perbandingan,

yang selanjutnya akan meningkatkan kecepatan pencarian.

Perhitungan penggeseran pada algoritma ini adalah sebagai berikut, bila terjadi

ketidakcocokkan pada saat pattern sejajar dengan teks[i..i+n-1], kita bisa menganggap

ketidakcocokan pertama terjadi di antara teks[i+j] dan pattern[j], dengan 0 < j < n. Berarti,

teks[i..i+j-1] = pattern[0..j-1] dan a=teks[i+j] tidak sama dengan b=pattern[j]. Ketika kita

menggeser, sangat beralasan bila ada sebuah awalan v dari pattern akan sama dengan

sebagian akhiran u dari sebagian teks. Sehingga kita bisa menggeser pattern agar awalan v

tersebut sejajar dengan akhiran dari u.

Dengan kata lain, pencocokkan string akan berjalan secara efisien bila kita

mempunyai tabel yang menentukan berapa panjang kita seharusnya menggeser seandainya

terdeteksi ketidakcocokkan di karakter ke-j dari pattern. Tabel itu harus memuat next[j]

yang merupakan posisi karakter pattern[j] setelah digeser, sehingga kita bisa menggeser

pattern sebesar j-next[j] relatif terhadap teks.

Secara sistematis, langkah-langkah yang dilakukan algoritma Knuth-Morris-Pratt

pada saat mencocokkan string:

1. Algoritma Knuth-Morris-Pratt mulai mencocokkan pattern pada awal teks.

2. Dari kiri ke kanan, algoritma ini akan mencocokkan karakter per karakter pattern

dengan karakter di teks yang bersesuaian, sampai salah satu kondisi berikut

dipenuhi:

1. Karakter di pattern dan di teks yang dibandingkan tidak cocok (mismatch).

2. Semua karakter di pattern cocok. Kemudian algoritma akan memberitahukan

penemuan di posisi ini.

3. Algoritma kemudian menggeser pattern berdasarkan tabel next, lalu mengulangi

langkah 2 sampai pattern berada di ujung teks.

Algoritma Boyer-Moore adalah salah satu algoritma pencarian string,

dipublikasikan oleh Robert S. Boyer, dan J. Strother Moore pada tahun 1977.

Algoritma ini dianggap sebagai algoritma yang paling efisien pada aplikasi umum.

Tidak seperti algoritma pencarian string yang ditemukan sebelumnya, algoritma Boyer-

Moore mulai mencocokkan karakter dari sebelah kanan pattern. Ide di balik algoritma ini

adalah bahwa dengan memulai pencocokan karakter dari kanan, dan bukan dari kiri, maka

akan lebih banyak informasi yang didapat.

Misalnya ada sebuah usaha pencocokan yang terjadi pada teks[i..i+n-1], dan anggap

ketidakcocokan pertama terjadi di antara teks[i+j] dan pattern[j], dengan 0 < j < n. Berarti,

teks[i+j+1..i+n-1] = pattern[j+1..n-1] dan a=teks[i+j] tidak sama dengan b=pattern[j] . Jika

u adalah akhiran dari pattern sebelum b dan v adalah sebuah awalan dari pattern, maka

penggeseran-penggeseran yang mungkin adalah:

Penggeseran good-suffix yang terdiri dari menyejajarkan potongan teks[i+j+1..i+n-

1] = pattern[j+1..n-1] dengan kemunculannya paling kanan di pattern yang didahului oleh

karakter yang berbeda dengan pattern[j]. Jika tidak ada potongan seperti itu, maka algoritma

akan menyejajarkan akhiran v dari teks[i+j+1..i+n-1] dengan awalan dari pattern yang sama.

Penggeseran bad-character yang terdiri dari menyejajarkan teks[i+j] dengan

kemunculan paling kanan karakter tersebut di pattern. Bila karakter tersebut tidak ada di

pattern, maka pattern akan disejajarkan dengan teks[i+n+1].

Secara sistematis, langkah-langkah yang dilakukan algoritma Boyer-Moore pada

saat mencocokkan string adalah:

1. Algoritma Boyer-Moore mulai mencocokkan pattern pada awal teks.

2. Dari kanan ke kiri, algoritma ini akan mencocokkan karakter per karakter pattern

dengan karakter di teks yang bersesuaian, sampai salah satu kondisi berikut

dipenuhi:

1. Karakter di pattern dan di teks yang dibandingkan tidak cocok (mismatch).

2. Semua karakter di pattern cocok. Kemudian algoritma akan memberitahukan

penemuan di posisi ini.

3. Algoritma kemudian menggeser pattern dengan memaksimalkan nilai penggeseran

good-suffix dan penggeseran bad-character, lalu mengulangi langkah 2 sampai

pattern berada di ujung teks.

BAB III

ANALISIS DAN RANCANGAN APLIKASI

Program ini dibuat dengan berbasis antarmuka pengguna grafis (GUI). Proses yang

pertama kali dilakukan adalah membuka berkas berekstensi TXT (dokumen teks). Dengan

menekan tombol “open”, maka akan memanggil fungsi OpenActionPerformed yang berada

pada kelas StringMatching. Setelah berkas dipilih dan dibuka, program akan mendapatkan

nama berkas tersebut untuk ditampilkan dalam program di samping tombol “open”. Jika

berkas yang dipilih tidak dapat dibuka atau menimbulkan masalah saat diakses, program

akan melakukan pengecualian dan memunculkan pesan “problem accessing file”. Jika

pengguna memilih untuk membatalkan pembukaan berkas, program akan menampilkan

pesan “File access cancelled by user.”

Setelah berkas dibuka, pengguna diminta untuk memilih algoritma yang akan

dipakai, yaitu Brute Force, Knuth-Morris-Pratt, atau Boyer-Moore, dengan default-nya

adalah Brute Force. Selanjutnya adalah pengisian pattern atau string yang ingin dicari oleh

pengguna. Bergantung kepada algoritma yang telah dipilih, setelah tombol “find” ditekan,

maka program akan memanggil kelas dari masing-masing algoritma untuk melakukan

proses pencocokan string.

Jika pengguna memilih Brute Force ataupun tidak mengubah pilihan algoritma

default, program akan memanggil kelas BruteForce. Algoritma ini akan mencocokkan

karakter pertama dari pattern tersebut satu persatu dengan setiap karakter teks yang ada pada

berkas dimulai dari kiri. Jika karakter pertama itu cocok, akan dilanjutkan dengan karakter

selanjutnya. Jika terdapat ketidakcocokan, program akan mencari bagian teks selanjutnya

yang cocok dengan karakter pertama hingga keseluruhan pattern cocok dengan bagian teks

tersebut.

Jika pengguna memilih algoritma Knuth-Morris-Pratt, program akan memanggil

kelas KMP. Dengan menggunakan algoritma ini, program akan mencocokkan karakter

pertama dari pattern yang diberikan oleh pengguna dengan teks dari berkas dimulai dari kiri.

Saat terjadi ketidakcocokan, program akan langsung mengulangi pencocokan karakter

pertama dengan bagian teks selanjutnya berdasarkan tabel KMP, sehingga tidak perlu lagi

mencocokkan satu persatu setiap bagian teks.

Jika pengguna memilih algoritma Boyer-Moore, program akan memanggil kelas

BoyerMoore. Pada algoritma ini, program akan mencocokkan karakter dari pattern dengan

teks dari berkas dimulai dari kanan. Algoritma ini akan memisahkan pattern menjadi prefix

dan suffix tertentu untuk memudahkan dalam pencocokan string.

Setelah salah satu dari ketiga proses pencocokan string di atas sukses, maka program

akan menampilkan pesan bahwa pattern tersebut ditemukan beserta running time-nya.

Pattern yang dicari dalam teks tersebut akan disorot dalam warna abu-abu. Jika program

tidak dapat menemukan pattern yang ingin dicari, program akan menampilkan pesan bahwa

pattern tersebut tidak ditemukan. Selanjutnya pengguna dapat mengulangi pencarian

terhadap teks dari berkas lain dengan menekan tombol “clear” ataupun keluar dari program

dengan menutupnya.

BAB IV

HASIL DAN PEMBAHASAN

Tabel Running Time String Matching (ns)

Percobaan ke- Algoritma

Brute Force Knuth-Morris-Pratt Boyer-Moore

1 32842 26684 23948

2 23947 26000 25999

3 23263 25315 23263

Rata-rata 26684 25999 24403

Dari hasil percobaan di atas, terlihat bahwa running time yang didapatkan telah

sesuai dengan efisiensi waktu yang dimiliki masing-masing algoritma. Algoritma Brute

Force yang memang membutuhkan waktu proses yang lebih banyak daripada algoritma

yang lain, memiliki rata-rata running time yang paling besar. Sedangkan algoritma Boyer-

Moore yang memang diketahui memakan waktu paling sedikit dari algoritma string

matching lainnya, memiliki rata-rata running time yang paling kecil. Untuk algoritma

Knuth-Morris-Pratt, memiliki rata-rata running time di antara dua algoritma lainnya.

BAB V

KESIMPULAN DAN SARAN

Dari pembahasan sebelumnya, dapat disimpulkan bahwa algoritma Brute Force

memiliki running time yang paling besar dan kurang efisien, dikarenakan prosesnya yang

harus mencocokkan karakter satu persatu. Sedangkan algoritma Boyer-Moore merupakan

algoritma yang paling efisien dikarenakan running time-nya paling kecil dan proses

pencocokannya dilakukan dari kanan dan menggunakan prefix dan suffix dari pattern,

berbeda dengan algoritma lainnya.

Untuk ke depannya, penulis berharap agar program ini dapat dikembangkan lagi,

yaitu dengan menampilkan pattern lain yang cocok dengan teks, jika ditemukan banyak

pattern yang sama di dalam teks. Karena program ini masih belum dapat menampilkan lebih

dari satu pattern yang cocok dan hanya dapat menampilkan satu pattern yang cocok yang

pertama kali ditemukan.

DAFTAR REFERENSI

Algoritma pencarian string - Wikipedia bahasa Indonesia, ensiklopedia bebas

http://id.wikipedia.org/wiki/Algoritma_pencarian_string diakses pada tanggal 10

Desember 2014.

Algoritma Knuth-Morris-Pratt - Wikipedia bahasa Indonesia, ensiklopedia bebas

http://id.wikipedia.org/wiki/Algoritma_Knuth-Morris-Pratt diakses pada tanggal 11

Desember 2014.

Algoritma Boyer-Moore - Wikipedia bahasa Indonesia, ensiklopedia bebas

http://id.wikipedia.org/wiki/Algoritma_Boyer-Moore diakses pada tanggal 11

Desember 2014.