• Tidak ada hasil yang ditemukan

Penerapan Algoritma Knuth-Morris-Pratt Pada Game Puzzle Untuk Mencari Kecocokan Pola Warna

N/A
N/A
Protected

Academic year: 2017

Membagikan "Penerapan Algoritma Knuth-Morris-Pratt Pada Game Puzzle Untuk Mencari Kecocokan Pola Warna"

Copied!
93
0
0

Teks penuh

(1)

SKRIPSI

Diajukan untuk menempuh Ujian Akhir Sarjana

FALIH MULYANA

10109603

PROGRAM STUDI TEKNIK INFORMATIKA

FAKULTAS TEKNIK DAN ILMU KOMPUTER

(2)
(3)
(4)

DATA PRIBADI

Nama : Falih Mulyana

Alamat : Jalan Tripjamaksari Gang Merpati nomor 97, Cinanggung, Serang, Banten.

Telepon : 08986476028

Tempat Tgl Lahir : Serang, 31 Desember 1991 Jenis Kelamin : Laki-laki

Agama : Islam Kewarganegaraan : Indonesia

PENDIDIKAN FORMAL

2009 – Sekarang Strata 1 – Teknik Informatika, Universitas Komputer Indonesia Bandung

2006 – 2009 SMA Negeri 1 Serang 2003 – 2006 SMP Negeri 4 Serang 1997 – 2003 SD Negeri Unyur Serang

1995 – 1997 Taman Kanak-kanak Unyur Serang

KEAHLIAN PEMROGRAMAN

Bahasa Pemrograman PHP, Javascript, CSS, HTML5, SQL, Java, Pascal, C, C++, C#, Visual Basic

Tools Pemrograman Eclipse, Adobe dreamweaver, Unity3D, Unreal Engine Editor, starUML, Netbean

PENGALAMAN KERJA

2013 – 2014 PT Xyclus Cipta Teknologi

(5)

v

ABSTRACT ... ii

KATA PENGANTAR ... iii

DAFTAR ISI ... v

DAFTAR GAMBAR ... viii

DAFTAR TABEL ... x

DAFTAR SIMBOL ... xi

DAFTAR LAMPIRAN ... xiv

BAB I PENDAHULUAN ... 1

1.1. Latar Belakang Masalah ... 1

1.2. Rumusan Masalah ... 3

1.3. Maksud dan Tujuan ... 3

1.4. Batasan Masalah ... 3

1.5. Metodologi Penelitian ... 4

1.5.1. Metode Pembangunan Perangkat Lunak ... 4

1.6. Sistematika Penulisan ... 5

BAB 2 LANDASAN TEORI ... 7

2.1. Algoritma ... 7

2.2. Pencarian ... 8

2.2.1. String Matching / Pencocokan Kata ... 11

2.2.2. Metode Pencarian Brute Force ... 11

2.2.3. Metode Pencarian Knuth-Morris-Pratt ... 13

(6)

vi

2.6. Tools yang Digunakan... 27

2.6.1. Javascript ... 27

2.6.2. WebBrowser ... 29

2.6.3. TextEditor ... 30

2.6.4. Web Server ... 31

2.6.5. Object Oriented Programming ... 31

2.6.6. UML ... 32

BAB 3 ANALISIS DAN PERANCANGAN ... 35

3.1. Analisis Permainan... 35

3.1.1. Analisis Pencarian Solusi Pada Permainan ... 37

3.1.1.1. Analisis Pencarian Solusi dengan Algoritma Naïve Search/brute force ... 37

3.1.1.2. Analisis Pemecahan Masalah dengan Algoritma Knuth-Morris-Pratt ... 44

3.2. Analisis Kebutuhan Non Fungsional ... 48

3.2.1. Analisis Kebutuhan Perangkat Keras ... 48

3.2.2. Analisis Kebutuhan Perangkat Lunak ... 49

3.2.3. Analisis Pengguna ... 49

3.3. Analisis Kebutuhan Fungsional ... 49

3.3.1. Use Case Diagram ... 49

3.3.2. Skenario Use Case... 50

3.3.3. Activity Diagram ... 52

3.3.4. Sequence Diagram ... 54

(7)

vii

3.4.3. Perancangan Tampilan Awal ... 58

3.4.4. Perancangan Tampilan Tampilan Permainan... 59

3.4.5. Perancangan Tampilan Tebakan ... 60

3.4.6. Jaringan Semantik ... 61

BAB 4 IMPLEMENTASI DAN PENGUJIAN ... 63

4.1. Implementasi ... 63

4.1.1. Perangkat Keras ... 63

4.1.2. Perangkat Lunak... 64

4.1.3. Implementasi Antarmuka ... 64

4.1.4. Implementasi Algoritma... 66

4.1.4.1. Implementasi Metode Pencarian Brute Force... 67

4.1.4.2. Implementasi Metode Pencarian Knuth-Morris-Pratt ... 69

4.2. Pengujian ... 70

4.2.1. Pengujian White Box ... 70

4.2.2. Pengujian Black Box ... 75

4.2.3. Pengujian Performansi ... 78

BAB 5 IMPLEMENTASI DAN PENGUJIAN ... 83

5.1. Kesimpulan ... 83

5.1. Saran ... 83

DAFTAR PUSTAKA ... 84

(8)

84

Bandung.

[2] Knuth, Donald. E, et al. (1973), Fundamental of Algorithm, Volume 1 of The Art of Computer Programming. Addison-Wesley.

[3] F. Lucer, George. (2008), Artificial Inteligence: Structures and Strategies for Complex Problem Solving (sixth edition). Pearson Education, Inc. [4] Edelkamp, Stefan., Schrodl, Stefan. (2012), Heuristic Search: Theory and

Applications. Elsevier, inc.

[5] Charras, Christian, et al. (1997), Handbook of Exact String Matching Algorithm. Oxford University Press.

[6] Harris, Simon., Ross, James. (2006), Beginning Algorithms. Canada: Wiley Publishing.

[7] Knuth, Donald E., Morris, James H., Pratt, Vaughan R., (1977), Fast Pattern Matching in Strings*. California: Stanford University, Computer Science Department.

[8] Mohr, Austin. (2007), Quantum Computing in Complexity Theory and Theory of Computation. [online],

http://www.austinmohr.com/Work_files/complexity.pdf. Diakses pada tanggal 1 April 2014.

[9] Haverbeke, Marijn. (2011), Eloquent Javascript. San Francisco: William Pollock

[10] Text-Editor.org. (2010), http://www.text-editor.org/. [online], http://www.text-editor.org/. Diakses pada tanggal 29 Maret 2014.

(9)

iii

Segala puji dan syukur penulis panjatkan ke hadirat Allah SWT, yang telah melimpahkan rahmat dan hidayah-Nya sehingga penulis dapat menyelesaikan tugas akhir yang berjudul “Penerapan Algoritma Knuth-Morris-Pratt Pada Game Puzzle Untuk Mencari Kecocokan Pola Warna” ini dengan baik.

Tujuan dari penulisan laporan tugas akhir ini adalah sebagai salah satu syarat kelulusan pada program Strata 1 Fakultas Teknik dan Ilmu Komputer, Program Studi Teknik Informatika di Universitas Komputer Indonesia. Tugas akhir ini dapat terlaksana dengan baik berkat bantuan dan bimbingan dari beberapa pihak sehingga tugas akhir ini dapat diselesaikan tepat pada waktunya.

Dengan penuh rasa syukur, ucapan terima kasih yang mendalam serta penghargaan yang tidak terhingga penulis sampaikan kepada:

1. Allah subhanahu wa ta'ala yang telah memberikan nikmat dan rahmat-Nya berupa waktu dan kesehatan serta kemudahan kepada penulis dalam penyelesaian tugas akhir ini.

2. Kedua orang tua yang senantiasa mendo‟akan penulis dalam segala kebaikan. 3. Bapak Irawan Afrianto, M.T. selaku ketua program studi Teknik Informatika

Universitas Komputer Indonesia.

4. Bapak Galih Hermawan, S.Kom., M.T. selaku pembimbing yang selalu memberikan pengarahan yang baik dan dukungan moril kepada penulis. 5. Ibu Utami Dewi Sartika, S.Kom., M.T. selaku dosen wali yang senantiasa

mendukung mahasiswa didiknya.

6. Bapak Irfan Maliki, S.T., M.T. selaku reviewer dan ketua penguji yang telah memberikan masukan yang sangat berarti bagi penulis.

(10)

iv

penulis yang telah banyak membantu dalam hal teknis pembuatan tugas akhir ini.

10.Syaefudin selaku teman berdiskusi dengan penulis yang telah banyak memberikan ilmunya melalui diskusi-diskusi interaktif.

11.Riky Adam, Sofyan, Hisbullah, Ryan, Hadi, Iman, dan seluruh teman-teman seperjuangan yang tidak dapat disebutkan satu persatu atas kerjasama dan dukungannya dalam pembuatan tugas akhir ini.

12.Teman-teman di lingkungan penulis yang telah memberikan dorongan positif sehingga tugas akhir ini dapat terlaksana.

Penulis sadar bahwa pada laporan tugas akhir ini masih jauh dari sempurna dengan segala kekurangannya. Untuk itu, kritik dan saran pembaca akan sangat penulis hargai dan harapkan, tentunya kritik dan saran dengan niat membangun.

Akhir kata semoga laporan tugas akhir ini dapat bermanfaat bagi kita semua,

khususnya bagi yang membacanya. Amin ya Allah ya Rabbal a‟lamin.

Wasalammu'alaikum Wr. wb.

Bandung, Agustus 2014

(11)

1

Salah satu masalah umum yang dapat ditangani oleh komputer adalah masalah pencarian. Sebelum datangnya era komputer, orang-orang biasa menyimpan berkas atau arsip berisi sekumpulan data dalam satu kesatuan yang terorganisir dengan tujuan agar mempermudah proses pencarian apabila ada data yang diperlukan. Namun hal ini tidak efisien seiring dengan data yang terus tumbuh dan semakin banyak hingga ribuan atau bahkan jutaan data, dan semakin banyaknya parameter pencarian yang diinginkan. Setelah datangnya era komputer, manusia dipermudah dengan kecepatan komputer dalam mencari data yang diminta dalam suatu kumpulan database atau berkas yang tersimpan di dalam disk. Proses pencarian yang awalnya memakan waktu hingga berjam-jam dan menguras tenaga, secara signifikan berkurang menjadi hanya beberapa menit saja dan hampir tanpa usaha.

Seiring dengan pesatnya pertumbuhan teknologi informasi, semakin besar pula kebutuhan manusia dalam hal kecepatan pencarian informasi atau data. Walaupun proses pencarian sudah dibantu oleh sumber daya komputer, namun dengan makin beragamnya jenis data dan jumlahnya yang semakin membengkak, proses pencarian pun memakan waktu lebih lama dari biasanya serta membutuhkan banyak sumber daya. Sehingga dibutuhkanlah sebuah metode atau algoritma pencarian yang lebih efektif untuk diterapkan dalam instruksi pemrograman sehingga komputer dapat bekerja lebih efisien.

Saat ini ada beberapa metode yang dibuat oleh beberapa ahli untuk masalah pencarian, contohnya adalah metode Knuth-Morris-Pratt, Boyer-Moore, dan

Reverse Colussi. Dalam penelitian ini diambil metode Knuth-Morris-Pratt untuk mencari kesamaan suatu pola atau kata.

(12)

Berdasarkan hasil penelitian sebelumnya [1], telah dibuktikan bahwa algoritma Knuth-Morris-Pratt ini dapat digunakan sebagai metode dalam penggunaan game word puzzle. Namun, performansi dari hasil implementasinya tidak terdokumentasi dan tidak dikomparasi dengan metode pencarian yang lain, sehingga dari penelitian itu belum dapat disimpulkan apakah algoritma KMP ini secara relatif lebih baik dibandingkan dengan suatu algoritma pencarian lain untuk implementasinya dalam suatu permainan puzzle.

Puzzle game adalah salah satu genre dari video game dimana fokus permainannya adalah pemecahan masalah atau teka-teki. Teka-teki yang harus dipecahkan beragam, diantaranya seperti pengenalan pola, penyelesaian kalimat, dan penalaran secara logika. Permainan puzzle fokus pada logika dan pemikiran kritis, namun terkadang pada game ini ditambahkan elemen waktu untuk menambah tekanan pemain.

Salah satu contoh game bergenre puzzle adalah game color mathing. Ini bukan nama sebuah game, melainkan sebuah subgenre dari gamepuzzle. Di dalam

game ini, pemain dituntut memecahkan teka-teki terkait warna (biasanya berupa blok/kotak) yang ditampilkan dengan sejumlah aturan tertentu. Beberapa contoh game jenis ini adalah Pokopang (Android) dan Super Collapse! (Windows).

Tugas akhir ini akan memberikan gambaran tentang penggunaan algoritma KMP dan performansinya dibandingkan dengan tanpa algoritma itu dengan mengimplementasikannya ke dalam sebuah game bergenre puzzle. Di dalam game puzzle ini pemain akan diberikan sejumlah deretan pola warna dan pemain diharuskan menebak beberapa potongan pola yang dilihat sebelumnya. Pengimplementasian algoritma ini kemudian akan dibandingkan performansinya dengan game identik yang tanpa menggunakan metode khusus.

Harapan penulis pada penelitian ini adalah dapat membuktikan bahwa performansi algoritma KMP lebih baik dari pada tanpa menggunakan algoritma khusus (metode naif).

Berdasarkan uraian latar belakang tersebut maka akan ditarik topik atau

judul “Penerapan Algoritma Knuth-Morris-Pratt Pada Game Puzzle Untuk

(13)

1.2 Rumusan Masalah

Berdasarkan latar belakang yang sebelumnya dipaparkan, maka rumusan masalah yang diajukan adalah bagaimana mengetahui performansi algoritma Knuth-Morris-Pratt dalam hal penggunaan sumber daya dan kecepatan pencarian relatif terhadap algoritma brute force dengan mengimplementasikan kedua algoritma tersebut ke dalam sebuah game puzzle.

1.3 Maksud dan Tujuan

Secara umum, maksud dari tugas akhir ini adalah untuk menerapkan algoritma Knuth-Morris-Pratt ke dalam permainan puzzle sebagai metode pencarian.

Adapun tujuan dari tugas akhir ini secara spesifik adalah:

1. Mengetahui performansi Knuth-Morris-Pratt dalam mencari suatu pola blok warna di dalam blok warna utama pada permainan puzzle dalam hal kecepatan pencarian dan sumber daya memori yang digunakan.

2. Membandingkan hasil performa game yang menggunakan metode KMP yang diuji dengan hasil performa game yang sama yang menggunakan metode brute force.

1.4 Batasan Masalah

Dalam pembangunan game ini, perlu diberikan beberapa batasan masalah agar lebih terfokus saat melakukan perancangan. Batasan-batasan masalahnya adalah:

1. Game dibuat dengan menggunakan sistem GUI (Graphical User Interface). 2. Block warna utama di-generate secara random tanpa metode atau algoritma

khusus.

3. Algoritma pembanding untuk mengkomparasi performa KMP ini adalah dengan metode pencarian sekuensial secara brute force.

(14)

1.5 Metodologi Penelitian

Metode penelitian yang digunakan adalah metode penelitian deskriptif yang menggambarkan fakta-fakta dan informasi secara sistematis, aktual dan akurat. Metode penelitian ini memiliki dua tahapan penelitian, yaitu sebagai berikut: 1. Tahap Pengumpulan Data

Metode pengumpulan data yang digunakan dalam penelitian ini adalah studi literatur. Yaitu pengumpulan data dengan mempelajari buku-buku, karya ilmiah, koleksi perpustakaan, dan sumber dari internet yang berkaitan erat dengan materi bahasan dalam tugas akhir ini.

2. Tahap Pembangunan Perangkat Lunak

Setelah mengumpulkan sumber referensi yang cukup, maka dirancanglah pembangunan perangkat lunak yang digunakan sebagai bahan penelitian.

1.5.1 Metode Perancangan Perangkat Lunak

Pada pembuatan perangkat lunak ini, alur perancangan berjalan secara

Incremental Process Flow dengan metode Throw-away/rapid Prototyping. Proses-proses yang termasuk di dalam siklus Prototyping ini adalah:

1. Menentukan Persyaratan Awal (Determine Preliminary Requirements)

Penentuan spesifikasi awal perangkat lunak untuk dijalankan, seperti bahasa pemrograman yang digunakan dan platform dimana program akan diuji dan dijalankan.

2. Mengembangkan Prototipe (Develop Prototype)

Dalam tahap ini, penulisan kode program mulai dilakukan dan dikembangkan sesuai tujuan.

3. Mengevaluasi Prototipe (Evaluate Prototype)

(15)

1.6 Sistematika Penulisan

Sistematika penulisan tugas akhir ini disusun untuk memberikan gambaran umum tentang penelitian yang dijalankan. Sistematika penulisan tugas akhir ini adalah sebagai berikut :

BAB 1 PENDAHULUAN

Bab ini bersisikan tentang latar belakang permasalahan dari penerapan algoritma Knuth-Morris-Pratt dalam game puzzle, perumusan masalah, maksud dan tujuan, batasan masalah, metodologi penelitian serta sistematika penulisan.

BAB II. LANDASAN TEORI

Bab ini berisikan tentang konsep dasar dan teori yang mendukung dalam pembangunan game, pengertian game, klasifikasi game, dan tools yang digunakan untuk pembangunan game.

BAB III. ANALISIS DAN PERANCANGAN

Bab ini berisikan tentang analisis sistem yang berhubungan dengan pembangunan

game, meliputi analisis masalah pada game sejenis, analisis kasus game yang dikembangkan, analisis kebutuhan non fungsional, analisis kebutuhan fungsional seperti use case, Sequence Diagram, Activity Diagram, perancangan sistem, perancangan struktur menu, perancangan antar muka, dan jaringan semantic. BAB IV. IMPLEMENTASI DAN PENGUJIAN

Bab ini berisikan tentang implementasi perancangan game yang dibahas di Bab III, meliputi implementasi, implementasi antar muka, pengujian sistem yang telah dibangun dengan metode pengujian Black box dan White Box untuk mengetahui fungsionalitas pada game yang dibangun, serta pengujian performa untuk mengetahui kehandalan program saat dijalankan.

BAB V. KESIMPULAN DAN SARAN

(16)
(17)

7

Algoritma secara sederhana merupakan urutan langkah- langkah logis untuk menyelesaikan masalah yang disusun secara sistematis.

2.1.1. Definisi Algoritma

Menurut Kamus Besar Bahasa Indonesia, algoritma adalah urutan logis pengambilan keputusan untuk pemecahan masalah.

2.1.2. Sifat-Sifat Algoritma

Donald E. Knuth menyatakan bahwa ada beberapa ciri-ciri algoritma [2], yaitu:

a. Algoritma mempunyai awal dan akhir . Suatu algoritma harus berhenti setelah mengerjakan serangkaian tugas atau dengan kata lain suatu algoritma harus memiliki langkah yang terbatas.

b. Setiap langkah harus didefinisikan dengan tepat sehingga tidak memiliki arti ganda.

c. Memiliki masukan atau kondisi awal. d. Memiliki keluaran atau kondisi akhir.

e. Algoritma harus efektif; Jika diikuti dengan benar akan menyelesaikan permasalahan.

Berdasarkan cici-cirinya, algoritma dapat disimpulkan sifat utamanya yaitu: a. Input : Suatu algoritma memiliki input atau kondisi awal sebelum algoritma

dilaksanakan dan bisa berupa nilai-nilai peubah yang diambil dari himpunan khusus.

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

(18)

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

e. Effectiveness : Setiap langkah dalam algoritma dapat dilaksanakan dalam selang waktu tertentu sehingga pada akhirnya member solusi sesuai yang diharapkan.

f. Generality : langkah-langkah algoritma berlaku untuk setiap himpunan input yang sesuai dengan persoalan yang akan diberikan, tidak hanya untuk himpunan tertentu.

Algoritma sebagai langkah-langkah pemecahan masalah dapat dituliskan dengan berbagai cara, seperti:

1) Uraian deskriptif

Penulisan algoritma dengan uraian deskriptif menggunakan bahasa yang biasa digunakan sehari-hari.

2) Pseudocode

Algoritma yang dituliskan dalam kode-kode yang disepakati dan mempunyai urutan-urutan tertentu. Kode-kode ini dapat dikembangkan sendiri asalkan arti dari setiap kode disepakati bersama.

3) Bagan alir (flowchart)

Flowchart (bagan alir dokumen) adalah penggambaran secara grafik dari langkah-langkah dan urutan-urutan prosedur dari suatu program.

2.2.Pencarian

Pencarian adalah proses pencarian solusi dari suatu permasalahan melalui sekumpulan kemungkinan ruang keadaan (state space). Ruang keadaan merupakan suatu ruang yang berisi semua keadaan yang mungkin. Kondisi suatu pencarian meliputi [3]:

1. Keadaan Awal.

2. Keadaan tujuan solusi yang telah dijangkau dan diperiksa apakah telah mencapai sasaran.

(19)

Solusi merupakan suatu lintasan dari keadaan awal sampai keadaan tujuan. Secara umum, proses pencarian dapat dilakukan seperti berikut :

1. Memeriksa keadaan awal.

2. Mengeksekusi aksi yang telah ditetapkan untuk mencapai keadaan berikutnya. 3. Memeriksa jika keadaan baru merupakan solusinya. Jika ya, maka kondisi

baru ditetapkan sebagai solusi. Jika tidak, keadaan baru tersebut menjadi keadaan sekarang. Proses nomor 2 dan 3 kembali dieksekusi dan diulang sampai solusi ditemukan atau ruang keadaan habis terpakai.

Berdasarkan ruang keadaan dari suatu permasalahan yang dicari, pencarian dibagi menjadi beberapa jenis, yaitu:

1. Pencarian Uninformed

Sebuah algoritma pencarian uninformed adalah algoritma yang tidak mempertimbangkan sifat alami dari permasalahan [4]. Oleh karena itu algoritma tersebut dapat diimplementasikan secara umum, sehingga dengan implementasi yang sama dapat digunakan pada lingkup permasalahan yang luas, hal ini berkat abstraksi. Kekurangannya adalah sebagian besar ruang pencarian adalah sangat besar, dan sebuah pencarian uninformed (khususnya untuk pencarian pohon) membutuhkan banyak waktu walaupun hanya untuk contoh yang kecil. Sehingga untuk mempercepat proses, kadang-kadang hanya pencarian informed yang dapat melakukannya.

a) Pencarian List

(20)

kompleksitas waktu pengerjaannya adalah O(log n). Waktu pengerjaannya jauh lebih baik daripada pencarian linear untuk list yang memiliki data banyak, tetapi sebelum dilakukan pencarian list terlebih dahulu harus terurut dan juga harus dapat diakses secara acak (pengaksesan acak). Pencarian interpolasi adalah lebih baik dari pencarian biner untuk list terurut yang sangat besar dan terdistribusi merata. Algoritma Grover adalah sebuah algoritma kuantum yang menawarkan percepatan kuadrat dibandingkan pencarian linear klasik untuk list tak terurut.

Tabel hash juga digunakan untuk pencarian list, hanya memerlukan waktu yang konstan untuk mencari pada kasus rata-rata, tetapi memiliki overhead

ruang yang lebih dan pada kasus terburuk waktu pengerjaannya adalah O(n). Pencarian lain yang berdasarkan struktur data khusus, menggunakan pohon pencarian biner yang menyeimbangkan secara mandiri (self-balancing binary search tree) dan membutuhkan waktu pencarian O(log n); hal ini dapat dipandang sebagai pengembangan dari ide utama pencarian biner untuk memungkinkan penyisipan dan penghapusan yang cepat.

Sebagian besar algoritma pencarian, seperti pencarian linear, pencarian biner dan pohon pencarian biner yang bersifat self-balancing, dapat dikembangkan dengan sedikit tambahan untuk menemukan semua nilai yang kurang dari atau lebih dari sebuah kunci, operasi ini disebut pencarian jangkauan (range search). Pengecualin ada pada tabel hash, yang tidak dapat melakukan pencarian tersebut secara efisien.

b) Pencarian Pohon

(21)

Depth-first). Contoh lain dari pencarian pohon antara lain pencarian

iterative-deepening, pencarian berbatas kedalaman, pencarian dwiarah dan pencarian uniform-cost.

c) Pencarian Graf

Banyak permasalahan dalam teori graf dapat dipecahkan dengan memanfaatkan algoritma pencarian, seperti algoritma Dijkstra, algoritma Kruskal's, algoritma tetangga terdekat, dan algoritma Prim.-first, pencarian

iterative-deepening, pencarian berbatas kedalaman, pencarian dwiarah dan pencarian uniform-cost.

2. Pencarian Informed

Pada pencarian informed, sebuah heuristik yang khusus untuk permasalahan tertentu digunakan sebagai pedoman. Sebuah heuristik yang baik dapat membuat sebuah pencarian informed bekerja secara dramatis melebihi pencarian uninformed.

2.2.1. String Matching / Pencocokan Kata

String adalah susunan dari karakter (alphabet, angka, atau karakter lain) yang biasanya direpresentasikan sebagai struktur data array. Sedangkan string matching adalah sebuah permasalahan untuk menemukan pola susunan karakter

string di dalam string lain atau bagian dari isi teks. Algoritma pencarian kata (string) adalah sebuah algoritma yang digunakan untuk mencari suatu pola dari suatu susunan huruf dalam sebuah kalimat [5].

2.2.1.1. Metode Pencarian brute force

(22)

untuk setiap posisi yang salah untuk melihat bahwa itu adalah posisi yang salah, sehingga dalam kasus rata-rata, langkah-langkah ini memakan waktu O (n + m), dimana n adalah panjang tumpukan jerami dan m adalah panjang jarum; namun dalam kasus terburuk, mencari string seperti "aaaab" dalam string seperti "aaaaaaaaab", dibutuhkan O (nm).

Gambar 2.1. Contoh Pencarian naif / brute force

Berikut ini adalah beberapa kelebihan dan kekurangan dari algoritma Brute Force.

Kelebihan:

1) Metode Brute Force dapat digunakan untuk memecahkan hampir sebagian besar masalah (wide application).

2) Metode Brute Force sangat sederhana dan mudah dimengerti.

3) Metode Brute Force menghasilkan algoritma yang layak untuk beberapa masalah penting seperti pencarian, pengurutan, pencocokan string, perkalian matriks.

4) Metode Brute Force menghasilkan algoritma baku (standard) untuk tugas-tugas komputasi seperti penjumlahan / perkalian n buah bilangan, menentukan elemen minimum atau maksimum di dalam tabel (list).

Kekurangan:

1) Metode Brute Force jarang menghasilkan algoritma yang mangkus.

2) Beberapa implementasi algoritma Brute Force sangat lambat sehingga tidak dapat diterima.

(23)

Berikut ini adalah pseudocode dari algoritma Brute Force

Gambar 2.2. Pseudocode metode Brute Force

2.2.1.2. Metode Pencarian Knuth-Morris-Pratt

Algoritma Knuth-Morris-Pratt (KMP) 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 [7].

(24)

yang dicari dengan susunan pola/kalimat utama. Misal sebuah pencarian berjumlah m di dalam sebuah kalimat K[] yang mengandung kata k[]. Algoritma yang paling mudah adalah dengan mencari kecocokan karakter pada nilai-nilai yang berurutan dari indeks m , posisi dalam string yang dicari , yaitu K[m]. Jika indeks m mencapai akhir dari string maka tidak ada karakter yang cocok, dalam hal pencarian dikatakan gagal. Pada setiap posisi m, algoritma mengecek keseusaian dari karakter pertama dalam kata yang dicari, yaitu K[m] = k[0]?. Jika kecocokan ditemukan, algoritma menguji karakter lain dalam mencari kata dengan memeriksa nilai-nilai yang berurutan dari posisi indeks kata, i. Algoritma mengambil karakter k[i] dalam mencari kata dan memeriksa kesetaraan ekspresi K[m+i] = k[i]?. Jika semua karakter yang berurutan sesuai dalam k pada posisi m maka kecocokan ditemukan pada posisi dalam string pencarian.

Dengan metode seperti itu, performa tidak dijamin optimal. Jika string tidak acak, kemudian memeriksa percobaan m dapat mengambil banyak perbandingan karakter. Kasus terburuk adalah jika dua string cocok dalam semua kecuali huruf terakhir. Bayangkan bahwa string K[] terdiri dari 1 milyar karakter yang semuanya A, dan bahwa kata k[] adalah 999 A karakter dan diakhiri dengan huruf B. Algoritma pencocokan string sederhana sekarang akan memeriksa 1000 karakter pada setiap posisi trial sebelum menolak hasil dan memajukan posisi trial pengecekan. Kini contoh sederhana pencarian akan mengambil sekitar 1000 perbandingan karakter kali 1 miliar untuk posisi 1 triliun perbandingan karakter. Jika panjang k [] adalah n, maka kinerja kasus terburuk adalah O (k ⋅ n).

(25)

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.

Untuk menggambarkan rincian algoritma, akan diberikan contoh kasus, dimana kata W = "ABCDABD" dan kalimat S = "ABC ABCDAB ABCDABCDABDE". Pada waktu tertentu, algoritma dalam keadaan yang ditentukan oleh dua variabel bilangan bulat:

1. m yang menunjukkan posisi dalam S yang merupakan awal dari pertandingan prospektif untuk W

(26)

Gambar 2.3. Iterasi metode Knuth-Morris-Pratt

Kita lanjutkan dengan membandingkan karakter berturut-turut W untuk karakter dari S, bergerak dari satu ke yang berikutnya apakah mereka cocok. Namun, pada langkah keempat, kita mendapatkan S [3] adalah spasi dan W [3] = 'D', tidak cocok. Daripada mulai mencari lagi di S [1], sistem mencatat bahwa tidak ada 'A' terjadi antara posisi 0 dan 3 di S kecuali pada 0; oleh karena itu, setelah memeriksa semua karakter mereka yang sebelumnya, kita tahu tidak ada peluang untuk menemukan awal yang cocok jika kita memeriksa mereka lagi. Oleh karena itu kita beralih ke karakter berikutnya, menetapkan m = 4 dan i = 0.

Gambar 2.4. Iterasi metode Knuth-Morris-Pratt #2

(27)

Gambar 2.5. Iterasi metode Knuth-Morris-Pratt #3

Pencarian ini gagal. namun, pola masih tidak mengandung spasi, sehingga dalam percobaan pertama, kita kembali ke awal W dan mulai mencari di karakter berikutnya S: m = 11, reset i = 0.

Gambar 2.6. Iterasi metode Knuth-Morris-Pratt #4

Kita kembali mendapatkan hasil "ABCDAB" tapi karakter berikutnya, 'C', tidak cocok dengan karakter akhir 'D' dari kata W. Penalaran seperti sebelumnya, kita menetapkan m = 15, untuk memulai pada dua-karakter string "AB" yang mengarah ke posisi saat ini, set i = 2, dan terus mencocokkan dari posisi saat ini.

Gambar 2.7. Iterasi metode Knuth-Morris-Pratt #5

(28)

Berikut adalah pseudocode algoritma KMP pada fase pra-pencarian:

procedure preKMP(

input P : array[0..n-1] of char,

input n : integer,

input/output kmpNext : array[0..n] of integer

)

Deklarasi:

i,j: integer

Algoritma

i := 0;

j := kmpNext[0] := -1;

while (i < n) {

while (j > -1 and not(P[i] = P[j]))

j := kmpNext[j];

i:= i+1;

j:= j+1;

if (P[i] = P[j])

kmpNext[i] := kmpNext[j];

else

kmpNext[i] := j;

endif

endwhile

(29)

Dan berikut adalah pseudocode algoritma KMP pada fase pencarian:

Gambar 2.9. Pseudocode algoritma KMP pada fase pencarian

(30)

2.3. Pengujian Perangkat Lunak

Pengujian perangkat lunak di bidang Rekayasa Perangkat Lunak adalah proses dalam siklus hidup sebuah perangkat lunak yang memastikan bahwa produk perangkat lunak memenuhi kualitas yang diharapkan dan memastikan bahwa perangkat lunak memenuhi persyaratan spesifikasi. Pengujian perangkat lunak dimaksudkan untuk menemukan cacat (bug) dalam sebuah program, meskipun metode pengujian yang diberikan tidak dapat menjamin untuk menemukan semua cacat. Dengan demikian, umumnya bagi aplikasi dilakukan berbagai metodologi pengujian selama siklus hidup perangkat lunak, seperti unit testing selama pengembangan, pengujian integrasi setelah modul dan sistem selesai, dan pengujian penerimaan pengguna untuk memungkinkan para pemangku kepentingan untuk menentukan apakah kebutuhan mereka telah terpenuhi.

Unit pengujian adalah jenis pengujian perangkat lunak yang melibatkan persiapan tes yang terdefinisi dengan baik untuk fungsi prosedural dari sebuah program yang memberikan kepastian bahwa modul atau fungsi telah berperilaku sebagaimana dimaksud. Tes unit yang disebut sebagai tes 'white-box' (kebalikan dari tes „black-box') karena mereka ditulis dengan pengetahuan penuh dari struktur internal fungsi dan modul di bawah tes. Tes unit biasanya disiapkan oleh pengembang yang menulis kode yang diuji dan biasanya berjalan otomatis yang dijalankan oleh kerangka unit testing (seperti JUnit untuk Java atau kerangka Uji di Ruby). Tujuannya bukan untuk menguji setiap jalur eksekusi dalam unit, melainkan untuk fokus pada bidang risiko, ketidakpastian, atau kekritisan. Setiap tes berfokus pada satu aspek dari kode (uji satu hal) dan biasanya diatur dalam

suite tes kesamaan.

Beberapa manfaat dari unit testing meliputi:

(31)

2. Keterbacaan: Unit pengujian mendorong gaya pemrograman modul kecil, masukan yang jelas dan output dan lebih sedikit ketergantungan antar komponen. Kode yang ditulis untuk memudahkan pengujian (testability) mungkin lebih mudah untuk membaca dan mengikuti.

3. Regresi: Bersama-sama, suite tes dapat dilaksanakan sebagai uji regresi dari sistem. Otomatisasi tes berarti bahwa setiap cacat yang disebabkan oleh perubahan pada kode dengan mudah dapat diidentifikasi. Ketika cacat ditemukan bahwa menyelinap melalui, tes baru dapat ditulis untuk memastikan itu akan diidentifikasi di masa depan.

Unit test secara tradisional ditulis setelah program selesai. Sebuah alternatif yang populer dalah untuk mempersiapkan tes sebelum fungsionalitas dari aplikasi disiapkan, disebut Test-Pertama atau Test-Driven Development (TDD). Dalam metode ini, tes tertulis dan diaksanakan, gagal sampai fungsionalitas aplikasi ditulis untuk membuat tes lulus. Persiapan awaltes memungkinkan programmer untuk mempertimbangkan perilaku yang diperlukan dari program dan antarmuka dan fungsi program perlu mengekspos sebelum mereka ditulis.

(32)

2.3.1. Rules-of-Thumb

Pengujian unit cukup mudah, meskipun menulis unit test yang baik itu sulit dikarenakan hubungan yang kompleks pada tiap tes dengan kode yang diuji. Pengujian metaheuristik dan Computational Intelligence algorithms lebih sulit lagi mengingat sifat probabilistik mereka dan kemampuan mereka untuk „work in spite of you‟, yaitu, memberikan semacam hasil bahkan ketika diimplementasikan dengan adanya bug.

Pedoman berikut dapat membantu ketika unit pengujian algoritma:

1) Start Small: Beberapa unit test lebih baik daripada tidak ada sama sekali dan setiap tes tambahan dapat meningkatkan kepercayaan dan kualitas script. Untuk implementasi algoritma yang ada, mulai dengan menulis tes untuk perilaku kecil dan sederhana dan perlahan-lahan membangun sebuah test suite.

2) Test One Thing: Setiap pengujian harus fokus pada verifikasi perilaku salah satu aspek dari satu unit kode. Menulis ringkas dan perilaku yang berfokus unit test adalah tujuan metodologi.

3) Test Once: Sebuah perilaku atau harapan hanya perlu diuji sekali, jangan mengulang ujian setiap kali suatu unit tertentu diuji.

4) Don't forget the I/O: Ingatlah untuk menguji masukan dan keluaran dari unit kode, khususnya pra-kondisi dan pasca-kondisi. Hal ini dapat mudah untuk fokus pada poin keputusan dalam unit dan melupakan tujuan utamanya.

5) Write code for testability: Pengujian harus membantu membentuk kode yang mereka uji. Tulis fungsi kecil atau modul, berpikir tentang pengujian saat menulis kode (atau menulis tes pertama), dan kode refactor (kode update setelah fakta) untuk membuatnya lebih mudah untuk menguji.

(33)

7) Test Independence: Uji harus independen dari satu sama lain. Kerangka memberikan kait untuk set-up dan air mata-down negara sebelum pelaksanaan setiap tes, seharusnya tidak ada perlu memiliki satu tes menyiapkan data atau negara untuk tes lainnya. Tes harus dapat melaksanakan secara mandiri dan dalam urutan apapun.

8) Test your own code: Hindari menulis tes yang memastikan perilaku

framework atau library, seperti keacakan nomor acak generator atau apakah matematika atau fungsi string berperilaku seperti yang diharapkan. Fokus pada menulis tes untuk manipulasi data yang dilakukan oleh kode yang Anda tulis.

9) Probabilistic testing: Metaheuristik dan Komputasi Intelijen algoritma umumnya menggunakan stokastik atau keputusan probabilistik. Ini berarti bahwa beberapa perilaku yang tidak deterministik dan lebih sulit untuk menguji. Seperti contoh, menulis tes probabilistik untuk memverifikasi bahwa proses seperti berperilaku sebagaimana dimaksud. Mengingat bahwa tes probabilistik lebih lemah daripada tes deterministik, pertimbangkan untuk menulis tes deterministik pertama. Sebuah perilaku probabilistik dapat dibuat deterministik dengan mengganti nomor acak dengan proxy yang mengembalikan nilai-nilai deterministik, disebut mock. Tingkat pengujian mungkin memerlukan dampak lebih lanjut untuk kode asli untuk memungkinkan modul yang bersangkutan dan objek-objek yang diteliti. 10) Consider test-first: Menulis tes pertama kali dapat membantu mengerucutkan

harapan ketika menerapkan algoritma dari literatur, dan membantu untuk memperkuat pikiran ketika mengembangkan atau prototipe ide baru.

2.4.Notasi Big-O

(34)

kinerja atau kompleksitas dari sebuah algoritma. Big-O menggambarkan skenario terburuk dari sebuah fungsi, dan dapat digunakan untuk menggambarkan waktu eksekusi yang dibutuhkan atau ruang yang digunakan (misalnya dalam memori atau pada disk) oleh algoritma.

Beberpa notasi standar Big-O dalam teori kompleksitas waktu pada algoritma pencarian adalah sebagai berikut:

1. O(1)

Notasi O(1) menandakan sebuah algoritma yang mempunyai kompleksitas waktu yang konstan terlepas dari berapa besar masukan yang diproses.

2. O(n)

O (N) menggambarkan suatu algoritma yang kinerjanya akan tumbuh secara linear dan dalam proporsi langsung dengan ukuran set masukan data.

3. O(n2)

O (N2) merupakan algoritma yang kinerjanya berbanding lurus dengan kuadrat ukuran set masukan data. Hal ini biasa terjadi dengan algoritma yang melibatkan iterasi bersarang di atas kumpulan data.

4. O(log N)

(35)

membutuhkan waktu satu detik untuk menyelesaikan, satu set data yang berisi 100 item memakan waktu dua detik, dan satu set data yang berisi 1000 item akan memakan waktu tiga detik. Menggandakan ukuran kumpulan data input memiliki sedikit efek pada pertumbuhan sebagai setelah iterasi tunggal dari algoritma kumpulan data akan dibagi dua dan karena itu setara dengan input data set setengah ukuran. Hal ini membuat algoritma seperti pencarian biner yang sangat efisien ketika berhadapan dengan set data yang besar.

2.5.Pengertian Game

Game berasal dari kata bahasa inggris yang memiliki arti dasar Permainan. Permainan dalam hal ini merujuk pada pengertian “kelincahan intelektual” (intellectual playability). Game juga bisa diartikan sebagai arena keputusan dan aksi pemainnya. Ada target-target yang ingin dicapai pemainnya. Kelincahan intelektual, pada tingkat tertentu, merupakan ukuran sejauh mana game itu menarik untuk dimainkan secara maksimal.

Pada awalnya, game identik dengan permainan anak-anak. Kita selalu berpikir game merupakan suatu kegiatan yang dilakukan oleh anak-anak yang dapat menyenangkan hati mereka.

Dengan kata lain, segala bentuk kegiatan yang memerlukan pemikiran, kelincahan intelektual dan pencapaian terhadap target tertentu dapat dikatakan sebagai game.

Tetapi yang akan dibahas pada kesempatan ini adalah game yang terdapat di komputer, baik off line maupun online. Saat ini perkembangan games di komputer sangat cepat. Para pengelola industri game berlomba-lomba untuk menciptakan game yang lebih nyata dan menarik untuk para pemainnya. Hal inilah yang membuat perkembangan games di komputer sangat cepat. Sehingga games bukan hanya sekedar permainan untuk mengisi waktu luang atau sekedar hobi. Melainkan sebuah cara untuk meningkatkan kreatifitas dan tingkat intelektual para penggunanya.

Jadi, bermain game adalah suatu proses “fine tuning” (atau penyamaan

(36)

komputer yang canggih tadi. Pada saat bersamaan, game juga secara nyata mempertajam daya analisis para penggunanya untuk mengolah informasi dan mengambil keputusan cepat yang jitu. Namun, tentu saja kenyataan juga harus kita masukkan kedalam perhitungan. Kenyataan itu diantaranya adalah kecanduan para pemain / penggunanya yang akut terhadap permainan komputer semacam ini. Mereka bisa lupa segala-galanya akan tugas mereka yang lain termasuk tugas menuntut ilmu.

Menurut Agustinus Nilwan dalam bukunya “Pemrograman Animasi dan Game Profesional” terbitan Elex Media Komputindo, game di artikan sebagai

suatu aktivitas tersetruktur atau juga digunakan sebagai alat pembelajaran. Sebuah game bisa dikarakteristikan dari apa pemain lakukan misalnya :

A.Peralatan

Misal : bola, kartu, papan, atau sebuah Komputer. B.Peraturan

Peraturan digunakan untuk menentukan giliran pemain, hak dan keharusan masing-masing pemain, dan tujuan permainan.

C.Skill, Strategi dan Keberuntungan

Game dengan dengan skill, contohnya dengan kekuatan fisik, misal gulat, menembak dan kekuatan mental seperti catur.

D.Single Player Game (pemain satu orang) dan Double Player (lebih dari satu pemain)

Jika pemain tunggal, pemain harus bermain dengan keahlian, berpacu dengan waktu dan keberuntungan sedangkan pemain double, pemain diharuskan untuk menggunakan suatu strategi dan kekompakan sesama pemain, untuk mencapai tujuan tertentu atau sebaliknya pemain harus berlomba dengan pemain lainnnya untuk mencapai sesuatu tujuan.

2.5.1. PuzzleGame

(37)

banyak keterampilan pemecahan masalah termasuk logika, pengenalan pola, urutan pemecahan, dan penyelesaian kata.

Gamepuzzle fokus pada tantangan logis dan konseptual, meskipun kadang-kadang game menambah unsur tekanan dalam hal pembatasan waktu atau unsur lainnya. Meskipun banyak permainan action dan permainan petualangan melibatkan teka-teki seperti mendapatkan benda yang dapat diakses, permainan

puzzle sejati berfokus pada pemecahan masalah sebagai kegiatan utama gameplay puzzle. Permainan biasanya melibatkan bentuk, warna, atau simbol, dan pemain harus secara langsung atau tidak langsung memanipulasi objek-objek game ke dalam pola tertentu.

Permainan puzzle biasanya menawarkan serangkaian teka-teki terkait yang adalah variasi dari satu tema. Tema ini bisa melibatkan pengenalan pola, logika, atau memahami proses. Permainan ini biasanya memiliki aturan yang sederhana, di mana pemain memanipulasi potongan permainan pada grid, jaringan atau ruang interaksi lainnya . Pemain harus mengungkap petunjuk untuk mencapai beberapa kondisi kemenangan, yang kemudian akan memungkinkan mereka untuk maju ke tingkat berikutnya. Melengkapi setiap teka-teki biasanya akan mengarah ke tantangan yang lebih suli , meskipun beberapa permainan menghindari melelahkan pemain dengan menawarkan tingkat lebih mudah antara yang lebih sulit.

2.6.Tools Yang Digunakan

Tools yang dimaksud adalah sekumpulan perangkat lunak yang membantu dalam pembuatan program dalam tugas akhir ini.

2.6.1. Javascript

(38)

JavaScript pertama kali dikembangkan oleh Brendan Eich dari Netscape dibawah nama Mocha, yang nantinya namanya diganti menjadi LiveScript, dan akhirnya menjadi JavaScript.

Navigator sebelumnya telah mendukung Java untuk lebih bisa dimanfaatkan para programmer yang non-Java. Maka dikembangkanlah bahasa pemrograman bernama LiveScript untuk mengakomodasi hal tersebut. Bahasa pemrograman inilah yang akhirnya berkembang dan diberi nama JavaScript, walaupun tidak ada hubungan bahasa antara Java dengan JavaScript.

JavaScript bisa digunakan untuk banyak tujuan, misalnya untuk membuat efek rollover baik di gambar maupun teks, dan yang penting juga adalah untuk membuat AJAX. JavaScript adalah bahasa yang digunakan untuk AJAX.

Kelebihan bahasa pemrograman Javascript diantaranya adalah: 1. Ukuran File Kecil

Script dari javascript memiliki ukuran yang kecil sehingga ketika web yang memiliki javascript ditampilkan di browser maka akses tampilannya akan lebih cepat dibandingkan ketika browser membuka suatu web yang memiliki script java. Hal ini juga sangat berkepentingan dengan daya kerja server. Semakin kecil space suatu web yang disimpan dalam suatu server maka daya kerja server ketika di browsing oleh user di internet akan tidak terlalu berat, selain itu sifat javascript client side yang tidak perlu lagi di olah oleh server ketika browser memanggil web dari sebuah server.

2. Mudah dipelajari

Javascript merupakan bahasa semi pemograman yang merupakan gabungan antara bahasa pemograman java dengan bahasa kode HTML sehingga disebut bahasa hybrid. Walaupun javascript merupakan turunan dari java namun javascript tidak memiliki aturan yang serumit java.

3. Terbuka (Open Source)

(39)

Sedangkan beberapa kekurangannya adalah: 1. Script tidak terenkripsi

Karena javascript bersifat client side, maka script yang kita buat di text editor dan telah dijadikan web di server, ketika user merequest web dari server tersebut maka sintak javascript akan langsung ditampilkan di browser. User bisa melihat dan menirunya dari sourcenya.

2. Kemampuan terbatas

Walaupun javascript mampu membuat bentuk web menjadi interaktif dan dinamis, namun javascript tidak mampu membuat program aplikasi sendiri seperti java.

Enchant.js merupakan sebuah kerangka kerja (framework) yang dibuat dalam bahasa javascript yang didesain untuk mengembangkan aplikasi game pada

platform web browser.Enchant.js dipublikasikan pada tahun 2011 dan merupakan

framework yang open source, artinya semua pihak dapat menggunakan dan mengembangkan framework ini.

2.5.1.2. Sizeof.js

Sizeof.js merupakan sebuah library dalam bahasa javascript yang dibuat oleh Stephen Morley. Sizeof.js berfungsi untuk mencari penggunaan memori untuk setiap objek-objek pada javascript.

2.6.2. WebBrowser

(40)

menampilkan gambar. Namun, web browser sekarang tidak hanya menampilkan gambar dan teks saja, tetapi juga memutar file multimedia seperti video dan suara.

Web browser juga dapat mengirim dan menerima email, mengelola HTML, sebagai masukan dan menjadikan halaman web sebagai hasil keluaran yang informatif.

Dengan menggunakan web browser, para pengguna internet dapat mengakses berbagai informasi yang terdapat di internet dengan mudah. Beberapa contoh web browser diantaranya Internet Explorer, Mozilla, Firefox, Safari, Opera, dan sebagainya.

2.6.3. TextEditor

Text Editor adalah jenis program yang digunakan untuk mengolah file teks biasa. Text Editor sering disediakan dengan sistem operasi atau paket pengembangan perangkat lunak, dan dapat digunakan untuk mengubah file konfigurasi dan kode sumber bahasa pemrograman [10].

Ada perbedaan penting antara file teks biasa yang dibuat oleh editor teks dan file dokumen yang dibuat oleh pengolah kata seperti Pages, Microsoft Word, dan WordPerfect.

Sebuah file teks biasa menggunakan karakter sederhana set seperti ASCII untuk mewakili angka, huruf , dan sejumlah kecil simbol. Satu-satunya karakter non - printing dalam file yang dapat digunakan untuk memformat teks , adalah baris baru, tab, dan FormFeed .

Dokumen pengolah kata umumnya berisi teks diformat, seperti memungkinkan teks muncul di huruf tebal dan miring , untuk menggunakan beberapa font , dan harus terstruktur ke dalam kolom dan tabel . Kemampuan ini dulunya hanya terkait dengan desktop publishing, tapi sekarang tersedia dalam pengolah kata sederhana .

(41)

teks umumnya digunakan untuk keperluan lain , seperti data masukan untuk program komputer .

Ketika kedua format yang tersedia, pengguna harus memilih dengan hati-hati . Menyimpan sebuah file teks biasa dalam format word processor akan menambah informasi format yang bisa mengganggu mesin - pembacaan teks . Menyimpan dokumen word processor sebagai file teks akan kehilangan informasi format .

2.6.4. WebServer

Server web atau pelayan web dapat merujuk baik pada perangkat keras ataupun perangkat lunak yang menyediakan layanan akses kepada pengguna melalui protokol komunikasi HTTP atau HTTPS atas berkas-berkas yang terdapat pada suatu situs web dalam layanan ke pengguna dengan menggunakan aplikasi tertentu seperti peramban web.

Penggunaan paling umum server web adalah untuk menempatkan situs web, namun pada prakteknya penggunaannya diperluas sebagai tempat peyimpanan data ataupun untuk menjalankan sejumlah aplikasi kelas bisnis.

2.6.5. OOP (Object Oriented Programming)

(42)

Pemrograman orientasi-objek menekankan konsep berikut:

1. Kelas (Class) - kumpulan atas definisi data dan fungsi-fungsi dalam suatu unit untuk suatu tujuan tertentu.

2. Objek (Object) - membungkus data dan fungsi bersama menjadi suatu unit dalam sebuah program komputer. Objek merupakan dasar dari modularitas dan struktur dalam sebuah program komputer berorientasi objek.

3. Abstraksi (Abstract) - kemampuan sebuah program untuk melewati aspek informasi yang diproses olehnya, yaitu kemampuan untuk fokus pada inti. 4. Enkapsulasi (Encapsulation) - Memastikan pengguna sebuah objek tidak dapat

mengganti keadaan dalam dari sebuah objek; hanya metode dalam objek tersebut yang diberi ijin untuk mengakses keadaannya.

5. Polimorfisme (Polimorfism) melalui pengiriman pesan.

6. Inheritas (Inheritance) - Mengatur polimorfisme dan enkapsulasi dengan mengijinkan objek didefinisikan dan diciptakan dengan jenis khusus dari objek yang sudah ada.

2.6.6. UML

UML (Unified Modeling Language) merupakan bahasa standar yang bekerja dalam object-oriented untuk menentukan, memvisualisasikan, merancang, dan mendokumentasikan elemen-elemen informasi yang terdapat dalam sistem software. UML mulai diperkenalkan oleh Object Management Group, sebuah organisasi yang telah mengembangkan model, teknologi, dan standar OOP sejak tahun 1980-an. UML merupakan dasar bagi perangkat (tool) desain berorientasi objek dari IBM [11].

Dalam UML terdapat beberapa diagram untuk memodelkan aplikasi berorientasi objek, yaitu:

1. Use Case diagram , untuk memodelkan proses bisnis dan merepresentasikan sebuah interaksi antara aktor dengan sistem.

(43)

beserta hubungan satu sama lain seperti containment, pewarisan, asosiasi, dan lain-lain. Class memiliki tiga area pokok yakni nama (dan stereotype) , atribut , dan metoda .

3. Statechart diagram , untuk memodelkan perilaku objects di dalam sistem atau menggambarkan transisi dan perubahan keadaan (dari satu state ke state lainnya) suatu objek pada sistem. Pada umumnya statechart diagram menggambarkan class tertentu .

4. Activity diagram , untuk memodelkan perilaku Use Case dan objek di dalam sistem.

5. Sequence diagram , untuk memodelkan pengiriman pesan (message) antar objects dan juga digunakan untuk menggambarkan skenario atau rangkaian langkah-langkah yang dilakukan sebagai respons dari sebuah event untuk menghasilkan output tertentu.

6. Collaboration diagram , untuk memodelkan interaksi antar objects seperti sequence diagram, tetapi lebih menekankan pada peran masing-masing objek dan bukan pada waktu penyampaian message.

(44)
(45)

35

dan cara bermain pada game yang berhubungan dengan program yang sedang dibangun yaitu game color puzzle dan metode yang digunakan untuk pemecahan solusinya yaitu algoritma pencarian pola dan string Knuth-Morris-Pratt.

3.1. Analisis Permainan

Game puzzle yang akan dibahas pada tugas akhir ini adalah sebuah game

sejenis word puzzle. Pada permainan word puzzle, sejumlah kata dari sebuah matriks cf char. Kata adalah kumpulan dari karakter yang memiliki makna tertentu. Kata-kata yang dicari pada permainan seperti ini biasanya dapat dibaca dari kiri ke kanan, atas ke bawah, dan diagonal tergantung letak kata tersebut pada matirks cf char.

Permainan word puzzle seperti ini kemudian dimodifikasi sedemikian rupa dengan menghilangkan sebuah parameter masukan dengan tujuan meningkatkan akurasi perhitungan performansi pada saat aplikasi game diuji. Pada permainan

word puzzle biasa, ada tiga parameter yang dibutuhkan dalam pencarian solusi:

Pattern/kalimat, kata yang dicari, dan database kosakata. Namun secara konsep, algoritma KMP hanya membutuhkan dua masukan awal untuk dapat melakukan sebuah pencarian, yaitu Pattern utama dan kata atau pattern yang dicari. Penambahan parameter masukan lain yaitu database kosakata akan berpengaruh terhadap kompleksitas waktu algoritma yang digunakan karena pencarian pada basis data akan menambah beban pencarian. Karena hal tersebut, maka game

color puzzle disini tidak menggunakan suatu basis data dan masukan untuk algoritma pencarian yang digunakan hanya ada dua. Alasan penggunaan warna dibandingkan dengan kata adalah karena tanpa menggunakan suatu basis data, maka kata yang tersusun pada pattern tidak akan memiliki makna khusus.

(46)

dibandingkan. Pada proses pencocokan ini, akan didapat hasil berupa indeks atau posisi dimana kecocokan ditemukan, arah dari hasil pencarian, panjang iterasi dalam skenario pencarian terpanjang serta lamanya waktu total pencarian.

Misal sebuah susunan pola warna utama direpresentasikan sebagai array

dua dimensi, P dengan panjang kolom n dan panjang baris m. Elemen-elemen pada arrayP kemudian dibandingkan dengan pola warna hasil inputan pengguna, direpresentasikan sebagai array satu dimensi, p dengan panjang l.

Gambar 3. 1 Susunan blok warna utama 9x4, direpresentasikan sebagai arrayP dengan panjang

n=9 dan m=4.

Gambar 3. 2 Blok warna inputan pengguna p dengan panjang l=5

Susunan pola warna utama diilustrasikan pada gambar 3.1 sebagai array P

dengan panjang 9 kolom dan 4 baris. Array P ini kemudian dijadikan landasan pencarian untuk susunan array p yang dimasukkan pengguna, digambarkan pada gambar 3.2 sebagai array dengan panjang 5. Pencarian dilakukan secara berurut mulai dari horizontal, vertikal, diagonal naik, dan diagonal turun. Apabila terjadi kecocokan elemen array p di dalam array P, maka indeks P dimana dimulainya kecocokan terjadi disimpan ke dalam sebuah array penampung hasil, H. Artinya, ada kemungkinan kecocokan terjadi lebih dari sekali untuk array p di dalam array

(47)

3.1.1. Analisis Pencarian Solusi Pada Permainan

Pada analisis permainan telah dijelaskan bahwa di dalam game ini, program mencari kecocokan warna yang diinput pengguna pada susunan warna utama. Sebelum menjelaskan cara-cara yang digunakan sebagai metode penyelesaian kasus pada game ini, ada beberapa hal dan istilah yang perlu didefinisikan di dalam game ini.

1. Warna pada setiap blok akan diwakilkan dengan inisial huruf untuk kemudahan penjelasan dalam analisis ini.

2. P[n][m] merepresentasikan susunan pola utama dengan panjang kolom n dan baris m.

3. p[l] merepresentasikan susunan pola masukan pengguna dengan panjang l. 4. Proses pencarian awal dilakukan pada susunan pola utama dengan mengiterasi

dari kiri ke kanan, posisi blok di pojok kiri atas sebagai awal pencarian (elemen array P[0][0]). Ketika pencarian selesai, maka pencarian berikutnya akan dilakukan secara vertikal dari atas ke bawah dengan posisi blok di pojok kiri atas sebagai awal pencarian. Ketika pencarian kedua selesai, maka dilakukan pencarian berikutnya secara diagonal dari kiri atas ke kanan bawah dengan posisi blok di kanan atas sebagai awal pencarian (panjang indeks [n] pada

arrayP). Ketika pencarian ketiga selesai, maka dilakukan pencarian berikutnya secara diagonal dari kiri bawah ke kanan atas dengan posisi blok di kanan bawah sebagai awal pencarian (panjang indeks [m] dan panjang indeks [n] pada arrayP).

5. Array yang digunakan untuk menyimpan informasi hasil pencarian blok di sini,

H, merupakan array asosiatif satu dimensi yang menyimpan informasi posisi indeks arrayP dimana ditemukan kecocokan, panjang urutan pola yang cocok, dan arah pola kecocokan.

3.1.1.1. Analisis Pencarian Solusi dengan Algoritma Naïve Search/brute force

(48)

Pada kasus pencarian di game ini, langkah-langkah yang dilakukan untuk mencari kecocokan pola dengan menggunakan metode naïve search atau brute force

adalah sebagai berikut: a) Arah Horizontal:

1. Buat peubah i, j, k, dan m. Inisiasikan semuanya dengan nilai 0.

2. Jika belum ada, buat sebuah array asosiatif untuk menampung indeks hasil,

H. Dimana masing-masing elemen H adalah peubah array yang

merepresentasikan arah hasil pencarian, yaitu: “horizontal”, “vertikal”, “diagonal_turun”, dan “diagonal_naik”. melebihi jumlah kolom pada array P - 1, ulangi langkah 3.

c. Apabila nilai i sama dengan jumlah array p-1 dan nilai k+i belum melebihi jumlah kolom pada array P - 1, maka pencarian dikatakan berhasil. Simpan nilai variabel k dan m ke dalam array H indeks ke-j. Kemudian tambahkan variabel j dengan 1. Tambahkan nilai k dengan 1. Nilai i menjadi 0. Kemudian ulangi langkah 3.

(49)

c. Apabila nilai k melebihi jumlah kolom pada array P-1, maka pencarian di baris m dikatakan gagal. Hentikan pencarian. Tambahkan nilai m dengan 1. Nilai k dan i masing-masing menjadi 0.

d. Apabila nilai m belum melebihi jumlah baris pada array P – 1, ulangi langkah 3.

e. Apabila nilai m melebihi jumlah baris pada arrayP – 1, maka pencarian secara keseluruhan dikatakan gagal.

Berikut ini merupakan pseudocode dari metode bruteforce

Gambar 3.3 Pseudocode metode Brute Force untuk pencarian pada pola horizontal

(50)

b) Arah Vertikal:

1. Buat peubah i, j, k, dan m. Inisiasikan semuanya dengan nilai 0.

2. Jika belum ada, buat sebuah array asosiatif untuk menampung indeks hasil,

H. Dimana masing-masing elemen H adalah peubah array yang

merepresentasikan arah hasil pencarian, yaitu: “horizontal”, “vertikal”, “diagonal_turun”, dan “diagonal_naik”. melebihi jumlah baris pada array P - 1, ulangi langkah 3.

c. Apabila nilai i sama dengan jumlah array p dan nilai k+i belum melebihi jumlah baris pada array P - 1, maka pencarian dikatakan berhasil. Simpan nilai variabel k dan m ke dalam array H indeks ke-j. Kemudian tambahkan variabel j dengan 1. Tambahkan nilai k dengan 1. Nilai i

menjadi 0. Kemudian ulangi langkah 3.

d. Apabila nilai k+i melebihi jumlah baris pada array P - 1, maka pencarian

c. Apabila nilai k melebihi jumlah baris pada array P-1, maka pencarian di kolom m dikatakan gagal. Hentikan pencarian. Tambahkan nilai m

(51)

d. Apabila nilai m belum melebihi jumlah kolom pada array P – 1, ulangi langkah 3.

e. Apabila nilai m melebihi jumlah kolom pada arrayP– 1, maka pencarian secara keseluruhan dikatakan gagal.

Berikut ini merupakan pseudocode dari pencarian vertikal dengan metode

bruteforce dengan langkah-langkah yang telah dijabarkan sebelumnya.

Gambar 3.4 Pseudocode metode Brute Force untuk pencarian pada pola vertikal

(52)

Kompleksitas waktu dari algoritma brute force di atas adalah: O((nm-Tm-1)r)

Dimana n adalah jumlah masukan dari pola utama untuk satu baris, m adalah jumlah masukan pengguna, Tm-1 adalah fungsi triangular untuk setiap m-1, dan r

adalah jumlah baris dari susunan pola utama.

Berikut adalah flowchart dari algoritma Brute Force pada game:

(53)

Menggunakan contoh susunan blok warna sebelumnya, algoritma brute force akan mencoba mencari solusi pencarian. Disini, warna dari masing-masing blok warna yang telah dicontohkan akan diwakilkan dengan inisial warna. Berikut adalah inisial warna dan artinya:

Tabel 3.1 Array P (Susunan Blok Utama)

Index 0 1 2 3 4 5 6 7 8

Tabel 3.2 Array p (Susunan masukan pengguna)

Index 0 1 2 3 4

p ht hj pn un pn

(54)

membutuhkan 46 kali iterasi dari total kompleksitas waktu O(36x5) atau O(180) atau dari iterasi maksimal 180 kali dalam kasus terburuk.

3.1.1.2. Analisis Pemecahan Masalah dengan Algoritma Knuth-Morris-Pratt Pada algoritma KMP, kita menyimpan informasi yang digunakan untuk melakukan pergeseran lebih jauh, tidak hanya satu karakter seperti algoritma

Brute Force. Algoritma ini melakukan pencocokan dari kiri ke kanan.

Sebelum melakukan proses pencarian dengan menggunakan metode KMP, kita akan melakukan perhitungan pra-pencarian untuk mencari overlap dalam pola yang dicari. Overlap dalam hal ini adalah urutan kata/pola yang mengulang di dalam satu pola yang dicari sehingga kita dapat melakukan pergeseran lebih jauh pada tahap pencarian.

Berikut algoritma yang dilakukan dalam mencari overlap dari pola m:

Gambar 3.6 Pseudocode penacrian overlap

(55)

Berikut adalah flowchat dari proses pencarian overlap berdasarkan algoritma diatas:

(56)

Dengan menggunakan contoh pola yang berbeda dengan penyelesaian kasus secara Brute Force, berikut adalah hasil overlap dari sebuah array p dengan menggunakan algoritma diatas.

Tabel 3.3 Hasil pencarian overlap pada tabel p

Index 0 1 2 3 4

p ht hj Pn Un Pn

Overlap 0 0 0 0 0

Setelah selesai mencari milai-nilai overlap, sekarang kita akan mencari kecocokan pola p pada pola utama P berikut:

Tabel 3.4. Tabel P

Index 0 1 2 3 4 5 6 7 8

P mr pt kn br br ht hj kn un

Index 9 10 11 12 13 14 15 16 17

P or mr ht hj pn un pn or hj

Index 18 19 20 21 22 23 24 25 26

P un pn or un hj mr or br kn

Index 27 28 29 30 31 32 33 34 35

(57)

Berdasarkan informasi nilai overlap yang sebelumnya dicari, maka proses pencarian dilakukan. Berikut adalah pseudocode untuk pencarian pola dengan menggunakan algoritma Knuth-Morris-Pratt untuk urutan pola horizontal (dari kiri ke kanan):

Gambar 3.8 Pseudocodestring matching secara horizontal

dengan metode Knuth-Morris-Pratt

Kompleksitas waktu dari algoritma Knuth-Morris-Pratt di atas adalah O((n+m)r). Dimana n adalah jumlah masukan dari pola utama untuk satu baris, m

adalah jumlah masukan dan r adalah jumlah baris dari susunan pola utama.

Hasil iterasi dari pencarian pola dengan menggunakan metode KMP Pada iterasi ke-18 dengan menggunakan KMP, kecocokan ditemukan.

(58)

3.2. Analisis Kebutuhan Non-fungsional

Analisis kebutuhan non-fungsional merupakan analisis yang dibutuhkan untuk menentukan spesifikasi kebutuhan sistem. Spesifikasi ini juga meliputi elemen atau komponen-komponen apa saja yang dibutuhkan untuk sistem yang akan dibangun sampai dengan sistem tersebut diimplementasikan. Analisis kebutuhan ini juga menentukan spesifikasi masukan yang diperlukan sistem, keluaran yang akan dihasilkan sistem dan proses yang dibutuhkan untuk mengolah masukan sehingga menghasilkan suatu keluaran yang diinginkan. Pada analisis kebutuhan sistem non-fungsional ini dijelaskan analisis mengenai perangkat keras (hardware), perangkat lunak (software), dan pengguna (user) sebagai bahan analisis kekurangan dan kebutuhan yang harus dipenuhi dalam perancangan.

3.2.1. Analisis Kebutuhan Perangkat Keras

Perangkat keras yang dapat digunakan untuk menjalankan program puzzle game ini adalah dengan spesifikasi minimal sebagai berikut:

Tabel 3.5. Tabel Spesifikasi Kebutuhan Perangkat Keras

Nama Perangkat Spesifikasi

Processor 1.0Ghz single core

Harddisk Drive 4Gb free

(59)

3.2.2. Analisis Kebutuhan Perangkat Lunak

Beberapa perangkat lunak yang dibutuhkan dalam menjalankan aplikasi puzzle game ini adalah sebagai berikut:

Tabel 3.6. Tabel Spesifikasi Kebutuhan Perangkat Lunak

Nama Perangkat Lunak Spesifikasi

Web Browser

Chrome, Firefox, Safari, Internet Explorer versi

terbaru

Framework Enchant.js

Sistem Operasi Windows, Mac, Linux

3.2.3. Analisis Pengguna (user)

Aplikasi ini tidak membedakan level pengguna, sehingga semua pengguna dapat menggunakan fasilitas yang sama, dengan asumsi telah memiliki kemampuan dalam menggunakan dan berinteraksi dengan komputer personal atau laptop.

3.3. Analisis Kebutuhan Fungsional

Analisis kebutuhan fungsional akan membahas perancangan sistem di dalam aplikasi. Perancangan sistem adalah penggambaran, perancangan dan pembuatan sketsa. Pada tahap ini, tools / alat bantu yang digunakan untuk menganalisis dan merancang sistem adalah UML (Unified Modeling Language).

3.3.1. UseCase Diagram

(60)

Gambar 3.9 Use Case pada program game

3.3.1.1. Skenario UseCase

Skenario setiap bagian pada use case menunjukkan proses apa yang terjadi pada setiap bagian didalam use case tersebut, dimana pengguna memberikan perintah pada setiap bagian dan respon apa yang diberikan oleh sistem kepada pengguna setelah pengguna memberikan perintah pada setiap bagian-bagian use case.

Tabel 3.7. Skenario Use Case Memulai Permainan

Identifikasi

Nama Memulai Permainan

Tujuan Menginstruksikan program untuk menjalankan permainan

Deskripsi Proses inisiasi dimulainya permainan

Aktor Pengguna

Skenario Utama

Kondisi Awal Pengguna berada di menu utama pada program

Aksi actor Reaksi Sistem

1. Menekan tombol “START” 2. Menginstansiasi objek-objek yang diperlukan

dalam permainan

Gambar

Gambar 3.5 Flowchart dari algoritma Brute Force pada game
Gambar 3.6 Pseudocode penacrian overlap
Gambar 3.7 Flowchart tahap pencarian overlap dari algoritma KMP pada game
Gambar 3.8 Pseudocode string matching secara horizontal
+7

Referensi

Dokumen terkait

Tujuan dari Penelitian ini adalah, untuk menghasilkan soal-soal open-ended yang valid dan praktis pada pokok bahasan segitiga dan segiempat di SMP, serta untuk melihat

[r]

Landasan hukum yang melatarbelakangi disusunnya Program Kerja UAS ini adalah peraturan yang tercantum dalam Keputusan Pemerintah yang dijabarkan

Whereas empirical methods provide a time efficient and easy to use calibration method in close range imaging, they The International Archives of the Photogrammetry, Remote Sensing

(3) Pelayanan Terpadu pada masing-masing lembaga yang temlasuk dalam sistent pelal'anan terpadu bersilat mengikat instansi, lembaga dan organisasi untuk melakukall

Dengan hormat kami beritahukan bahwa Panitia Pengadaan Jasa Konstruksi Pekerjaan Rehabilitasi 4 Ruang Kelas MTs Negeri Sumbang Tahun Anggaran 2012, bermaksud mengundang Saudara

Sedangkan pemberian IBA yang tinggi dan tidak diimbangi dengan pemberian sitokinin,pada perlakuan dapat menghambat pertumbuhan akar, hal ini juga diduga bahwa telah

Sekali-sekali pasien akan mengalami rasa napas yang pendek (seperti orang yang kelelahan) dan bukanya tekanan pada substernal.Sekali-sekali bisa pula