BAB IV PERANCANGAN. IV.1 Evaluasi Usulan untuk Perancangan Iteratif

dokumen-dokumen yang mirip
BAB III ANALISIS. Mekanisme Penyimpanan dan Pengambilan Sequence

Strategi Implementasi Peningkatan Waktu Proses Algoritma PrefixSpan untuk Sequential Pattern Mining

Analisa dan Perancangan Algoritma. Ahmad Sabri, Dr Sesi 2: 16 Mei 2016

DAFTAR REFERENSI. xiii. Computer Science Education, San Jose, United States, 1997.

BAB III ANALISIS DAN PERANCANGAN

Algoritma Pemrograman 2B (Pemrograman C++)

BAB III ANALISA MASALAH DAN RANCANGAN PROGRAM

BAB III ANALISIS DAN PERANCANGAN APLIKASI 3.1 ANALISIS

PENCARIAN BERUNTUN (SEQUENTIAL SEARCHING)

JAVA BASIC PROGRAMMING Joobshet

BAB III ANALISIS DAN PERANCANGAN

BAB III ANALISIS DAN PERANCANGAN. Dalam proses produksi terdapat beberapa faktor yang akan mempengaruhi

2.2 Data Mining. Universitas Sumatera Utara

STRUKTUR DATA. Nama : Sulfikar Npm : STMIK Handayani Makassar

Divide and Conqueradalah strategi militer yang dikenal dengan nama divide ut imperes.

BAB VII ALGORITMA DIVIDE AND CONQUER

ALGORITMA DIVIDE AND CONQUER

Penerapan Divide and Conquer dalam Membandingkan Alur Proses 2 Source Code

Implementasi Algoritma Runut Balik dalam Pengenalan Citra Wajah pada Basis Data

MAKALAH ALGORITMA DIVIDE AND CONQUER

KONSEP DASAR. menyusunnya menjadi potongan-potongan mudah untuk ditangani dibanding. conquer.

OPERASI PERNYATAAN KONDISI

Team project 2017 Dony Pratidana S. Hum Bima Agus Setyawan S. IIP

LOGO STRUKTUR DATA QUEUE

Array. Tim PHKI Modul Dasar Pemrograman Fakultas Ilmu Komputer UDINUS Semarang

BAB IV IMPLEMENTASI DAN PENGUJIAN

Algoritma Brute Force

Design and Analysis of Algorithms CNH2G3- Week 4 Kompleksitas waktu algoritma rekursif part 1

Penggunaan Algoritma Greedy untuk menyelesaikan Permainan Othello

BAB III METODE PENELITIAN / PERANCANGAN SISTEM. perancangan dan pembuatan program ini meliputi : dengan konversi notasi infix, prefix, dan postfix.

Program pendek dan simple = mudah dihandle. Program besar, banyak dan kompleks = tidak

KOTLIN, SIAPA SUKA. Dasar. P. Tamami BPPKAD Kab. Brebes

Perbandingan Algoritma Brute Force dan Backtracking dalam Permainan Word Search Puzzle

Aplikasi Graf Breadth-First Search Pada Solver Rubik s Cube

PROCEDURE DAN FUNCTION

Algoritma Heap Sort. Sekolah Teknik Elektro & Informatika Departemen Teknik Informatika, Institut Teknologi Bandung Jl. Ganesha 10, Bandung

VI. FUNGSI. Fungsi Main ( ) Fungsi a ( ) Fungsi b ( ) Fungsi c ( ) Fungsi c1 ( ) Fungsi c2 ( ) Fungsi c3 ( ) Bentuk umumnya :

Penggunaan Algoritma Greedy Dalam Perancangan Papan Teka Teki Silang

ALGORITMA PENGURUTAN & PENCARIAN

Pendahuluan Struktur Data. Nisa ul Hafidhoh

ALGORITMA DAN STRUKTUR DATA POINTER DAN FUNCTION

2. Sebuah prosedur langkah demi langkah yang pasti untuk menyelesaikan sebuah masalah disebut : a. Proses b. Program c. Algoritma d. Prosesor e.

BAB III ANALISIS DAN PERANCANGAN

PENGGUNAAN EXHAUSTIVE SEARCH SEBAGAI SOLUSI PERMAINAN SCRAMBLE

Algoritma Exhaustive Search Dalam Permainan Congklak

QUEUE (ANTRIAN) Struktur Data - Queue

Kompleksitas Algoritma untuk Penyelesaian Persoalan Penukaran Koin dengan Algoritma Greedy

SOAL C++ Created by Yuli Astuti,S.Kom Copyright 2009

Algoritma Brute Force (Bagian 1) Oleh: Rinaldi Munir

Algoritma dan Struktur Data

Pencarian. 1. Memahami konsep pencarian 2. Mengenal beberapa algoritma pencarian 3. Menerapkan algoritma pencarian dalam program

LAPORAN PRAKTIKUM ALGORITMA DAN PEMROGRAMAN ( Implementasi Rekursi Pada Java)

STRATEGI DIVIDE AND CONQUER

PENERAPAN ALGORITMA BFS PADA CHINESE SLIDE BLOCK PUZZLE (KLOTSKI)

Pemrograman Berorientasi. Class dan Obyek 2

BAB III ANALISIS DAN PERANCANGAN

Kurikulum Qt. Chapter 5 Pointer dan References. Agenda. Apa itu Pointer? Memory Komputer. Mengambil Alamat Memory dari Variabel

III Bab III Analisis dan Perancangan

ALGORITMA & PEMROGRAMAN

Back end. Generate soal. logic. Generate plan. output. N-puzzle solved GUI. Parsing output dari solver

BAB III ANALISIS ALGORITMA

A. Dasar Teori. Urutan (Sequence) Pemilihan (Selection) Pengulangan (Iteration) Pernyataan Kondisional (If Statement)

PENCARIAN SOLUSI TTS ANGKA DENGAN ALGORITMA RUNUT BALIK BESERTA PENGEMBANGANNYA

ANALISA PERANCANGAN PROGRAM

BAB III ANALISIS DAN DESAIN SISTEM

Algoritma dan Struktur Data. Ramos Somya

PENGGUNAAN ALGORITMA DIVIDE AND CONQUER UNTUK OPTIMASI KONVERSI BILANGAN DESIMAL KE BINER

BAB III PEMODELAN MASALAH

BAB III ANALISIS DAN PERANCANGAN SISTEM

PROGRAM STUDI S1 SISTEM KOMPUTER UNIVERSITAS DIPONEGORO. Oky Dwi Nurhayati, ST, MT

Yudha Dwi P. N. S.Kom. Pertemuan 3 Aturan Penulisan Teks Algoritma

SATUAN ACARA PERKULIAHAN MATA KULIAH PEMROGRAMAN PASCAL * (TK) KODE / SKS: KK /2 SKS

Algoritma Runut-balik (Backtracking) Bagian 1

A. TUJUAN PEMBELAJARAN

LOGIKA ALGORITMA. Pertemuan 6. By: Augury

ANALISIS ALGORITMA. Disusun Oleh: Analisis Masalah dan Running Time. Adam Mukharil Bachtiar Teknik Informatika UNIKOM

Pencarian Solusi Permainan Fig-Jig Menggunakan Algoritma Runut-Balik

1. Kompetensi Mengenal dan memahami algoritma percabangan yang komplek.

BAB 5 PERULANGAN DAN ARRAY

Penerapan Algoritma Runut-balik pada Permainan Math Maze

Penerapan Algoritma Greedy pada Artificial Inteligence dalam Permainan Defence of the Ancient

BAB III ANALISIS MASALAH DAN RANCANGAN PROGRAM

Decrease and Conquer

Gambar 3.1. Circular Single Linked List. Deklarasi bisa dilihat kembali di Single Linked List atau Double Linked List.

ALGORITMA DAN STRUKTUR DATA

TUGAS Mata Kuliah : Sistem Terdistribusi

Method. Pemrograman Dasar Sistem Informasi PTIIK Herman Tolle

IX. Implementasi ADT : Stacks & Queues. Operasi dasar Contoh kegunaan Implementasi Array-based dan linked list-based

ALGORITMA RINTA KRIDALUKMANA SISKOM UNDIP

Algoritma Brute Force

IMPLEMENTASI STRUKTUR DATA LIST, QUEUE DAN STACK DALAM JAVA

Aplikasi Algoritma Pencarian String Dalam Sistem Pembayaran Parkir

1. Pendahuluan Selama ini penjadwalan pelajaran hampir di semua sekolah yang meliputi jadwal mata pelajaran dan pembagian guru di setiap kelas yang

Copyright 2007 Fadhly Permata

Pembangkit Teka-Teki Silang dengan Algoritma Backtracking serta Aplikasi Permainannya yang Berbasis Web

Struktur dan Kondisi Perulangan. Struktur Kondisi

PENERAPAN ALGORITMA BACKTRACKING PADA PERMAINAN WORD SEARCH PUZZLE

TIPE DATA ABSTRAK MENGGUNAKAN BAHASA C

MODUL PRAKTIKUM. MODUL I - VIII Modul penuntun dan bahan praktikum matakuliah algoritma dan pemograman

1. Kompetensi Mengenal dan memahami notasi-notasi algoritma yang ada.

Transkripsi:

Prosedure PrefixSpan(input: a: l: integer, S: Sequence database) { Mencari Sequential Pattern pada sequence database S } Deklarasi D : Temporary Sequence Database Lst : List of Sequential Pattern Sq : Sequence Algoritma BAB IV PERANCANGAN Pada Bab IV ini akan dijelaskan perancangan program dengan mengimplementasikan alternatif solusi yang dikemukakan pada Subbab III.5. IV.1 Evaluasi Usulan untuk Perancangan Iteratif Berikut akan diberikan evaluasi usulan yang diberikan. 1. Bentuk iteratif PrefixSpan. Perubahan dari rekursif menjadi iteratif mutlak dilakukan untuk melakukan pencegahan program berhenti ketika dijalankan. Adapun algoritma iteratif dari PrefixSpan dapat dilihat pada Algoritma IV-1. Lst.add( <>,S) Sq <- Lst.Pop( ) While Sq!= NULL D <- Sq.database D.findOneSequence( ) Foreach OneSequence do D.projected( each Elmt ) Lst.add( concat (Sq.value, each Elmt) ) Endfor Endwhile Algoritma IV-1 Algoritma PrefixSpan iteratif 2. Penggunaan multithreading. Penggunaan multi-threading akan menyebabkan perubahan pada arsitektur program dan terdapat penambahan kelas, namun tidak merubah algoritma atau proses yang terjadi pada masing-masing kelas yang sudah ada sebelumnya, hanya tata cara pencarian sequential pattern yang mengalami perubahan untuk mengakomodasi penggunaan multi-threading. 3. Penyimpanan sequence database pada file external. Sesuai dengan analisis dan percobaan yang dilakukan, penyimpanan harus dilakukan pada file external. Implementasi hal ini memerlukan sedikit perubahan pada mekanisme pembacaan IV-1

IV-2 sequence pada kelas Data. Tentunya perlu penambahan untuk keperluan penanganan I/O. 4. Scan database dengan menggunakan metode divide and conquer. Divide and conquer memiliki kinerja yang lebih baik apabila algoritma tersebut tidak harus memeriksa semua baris dari data untuk menyelesaikan prosesnya. Sedangkan untuk kasus ini, setiap sequence yang ada memang harus diperiksa seluruhnya, sehingga scan database untuk metode divide and conquer tidak diimplementasi karena tidak akan meningkatkan kinerja. 5. Perubahan cara mencari frequent sequence 1 elemen. Hal ini tentunya akan merubah detail algoritma bagaimana cara mencari frequent sequence 1 elemen. Namun perubahan itu hanya pada tingkat method, tidak sampai mengubah arsitektur kelas karena input dan outputnya masih sama seperti sebelumnya. IV.2 Rancangan Implementasi Alternatif yang Digunakan Dari alternatif yang dianalisis di IV.1, usulan yang pertama kali diimplementasikan adalah usulan nomor satu, yaitu mengubah PrefixSpan dari rekursif menjadi iteratif. Berdasarkan konsep yang dijelaskan pada II.4.2, PrefixSpan terdiri dari tiga kegiatan utama, yaitu mendapatkan 1-length frequent sequence, mengabungkan dengan prefix yang berkaitan dengannya, dan memroyeksikan untuk pencarian sequential pattern lainnya. Oleh karena itu, algoritma PrefixSpan dalam bentuk iteratifnya harus dibangun dengan memperhatikan tiga kegiatan utama tersebut. Dengan analisis seperti itu, konsep algoritma PrefixSpan versi iteratif dapat dilihat pada Gambar IV-1. Konsep pada Gambar IV-1 membuka peluang untuk dilakukan multi-threading yang baik, karena setiap sequential pattern yang dihasilkan memiliki alamat sequence database per sequence, sehingga proses pencarian setiap elemen dalam queue dapat dilakukan terpisah. Dengan alur seperti pada Gambar IV-1, multithreading dapat digunakan dengan baik pada saat mencari 1-length frequent sequence dalam database, karena pada proses tersebut, setiap sequential pattern dalam queue memiliki projected database masingmasing.

IV-3 Gambar IV-1 Alur Konsep algoritma PrefixSpan iteratif Untuk alternatif format data yang akan digunakan, akan diimplementasikan dalam kelas Sequence, sedangkan kelas Data akan mengimplementasikan metode scan dengan menggunakan divide and conquer. Dan untuk algoritma PrefixSpan versi iteratif, akan menjadi salah satu method dalam kelas PrefixSpan pada rancangan yang ditunjukkan oleh Gambar III-2. Kelas diagram rancangan program setelah mengimplementasikan strategi alternatif dapat dilihat pada Gambar IV-2. Pada diagram tersebut, perbedaan yang paling terlihat dengan kelas diagram yang lama adalah adanya kelas baru, yaitu kelas Job. Pada arsitektur ini, kelas Job dimasukkan untuk memfasilitasi program multithreading, dimana akan ada satu thread untuk setiap instance kelas ini. Selain itu, pencarian sequential pattern menjadi tanggung jawab dari kelas Job ini, karena proses-proses inti untuk mencari sequential pattern tidak lagi dipanggil oleh kelas PrefixSpan, melainkan oleh kelas Job.

IV-4 Gambar IV-2 Diagram Kelas perancangan Pada arsitektur baru ini, kelas PrefixSpan akan menciptakan instance baru dari kelas Job untuk setiap sequential pattern terdapat pada list of sequential pattern. Setiap instance job yang dipanggil akan mencari sequential pattern baru untuk dimasukkan ke dalam list yang dikelola oleh instance PrefixSpan yang memanggilnya. Untuk lebih jelas, Sequence diagram dari pencarian sequential pattern dapat dilihat pada Gambar IV-3. Gambar IV-3 Sequence Diagram perancangan

IV-5 Setelah pengguna memasukkan nama file yang menjadi sequence database, instance kelas PrefixSpan akan menciptakan instance Job dari sequential pattern "<>", dimana Sequence tersebut merupakan prefix untuk pencarian oleh instance Job ini. Pada Gambar IV-3, instance Job hanya melakukan pencarian untuk projected database yang diberikan, sedangkan untuk keseluruhan sequential pattern, didapatkan dengan menciptakan banyak instance kelas Job. Nantinya akan dibangun empat program PrefixSpan, yaitu PrefixSpan Dasar, PrefixSpan Multithread, PrefixSpan Pembahasan, dan PrefixSpan keseluruhan. Hal ini dilakukan untuk melihat efek dari masing-masing alternatif yang dikemukakan terhaap waktu proses dari PrefixSpan. Hubungan antara keempat PrefixSpan dengan alternatif yang dikemukakan dapat dilihat pada Tabel IV-1. Tabel IV-1 Pemetaan Program dengan Alternatif Algoritma Iteratif Dasar Multithread Pembatasan Keseluruhan Penyimpanan data pada file Multithreading Pembatasan pembangkitan Meski mengimplementasikan alternatif yang berbeda, dasar dari empat program tersebut adalah sama. Keempat algoritma tersebut bahkan memiliki diagram kelas yang sama kecuali antara yang mengimplementasikan multithread. Perancangan yang dibahas pada Bab ini adalah perancangan untuk PrefixSpan Keseluruhan. IV.3 Rancangan Multithread Sesuai dengan analisis yang dilakukan pada III.6, multithreading program terletak para pemrosesan sequential pattern yang dimiliki. Akan diciptakan beberapa thread yang siap untuk melakukan pekerjaannya yaitu mencari sequential pattern dari sequence database. Main thread program yang akan memberikan pekerjaan tersebut dan mengaktifkan thread yang mendapatkannya. Setelah selesai mencari sequential pattern, suatu thread akan menunggu hingga diberikan tugas berikutnya, atau dimatikan jika tidak ada tugas lanjutan.

IV-6 IV.4 Rancangan Kelas Rancangan kelas keseluruhan dapat dilihat pada Gambar IV-2, Berikut akan dipaparkan lebih lanjut mengenai kelas-kelas tersebut dan hubungannya dengan masalah yang terdapat pada Bab Analisis. IV.4.1 Sequence Kelas Sequence adalah kelas yang dirancang untuk melakukan penyimpanan sequence, proyeksi sequence terhadap suatu prefix dan penggabungan suatu postfix dengan prefixnya. Pada kelas ini, sequence disimpan dalam tipe data string. Ketika hendak melakukan proses yang berkaitan dengan sequence tersebut, suatu array of string dibangkitkan untuk mempermudah proses. Array tersebut akan dibebaskan ketika proses untuk sequence tersebut telah selesai, sehingga memory yang dibutuhkan tetap akan stabil. Kelas ini dirancang untuk memfasilitasi mekanisme proyeksi. Seperti yang telah dijelaskan pada Subbab III.1.2, terdapat enam kemungkinan bentuk yang harus ditangani dalam proses ini. Semua tercakup dalam satu fungsi yang bernama Projection, yang menerima masukkan string prefix dan string projector, dan mengembalikan string sequence yang telah terproyeksi. Method ini terdiri dari tiga tahap, tahap pembentukkan array, tahap proses dengan mengiterasi array, dan tahap penggabungan array. Prinsipnya, ketika proyeksi hendak dilakukan, dibangkitkan dua array of string, array of string projector dan array of string sequence. Kemudian, dilakukan iterasi terhadap array of string sequence, dan akan diperiksa apakah elemen tersebut terkadung dalam array of projector. Apabila ada, maka akan ada variabel I yang mencatat pada elemen ke berapakah suatu projector terkandung. Jika sampai pada akhir iterasi, tidak semua array of projector terkandung dalam array of sequence, maka tidak aka nada tahap penggabungan array, karena hasilnya memang seharusnya sequence kosong. Jika terkandung semua, maka penggabunga dimulai dari elemen dengan urutan yang diacu variabel i sampai pada akhir array. Rancangan algoritmanya dapat dilihat pada Algoritma IV-2. Pada Algoritma IV-2, hanya terdapat empat cabang if, yang berarti hanya terdapat empat kasus. Hal ini tampak berbeda dengan yang terdapat pada Subbab III.1.2.

IV-7 Namun sebenarnya tidak, karena dua kasus lainnya sudah tertangani dengan otomatis oleh algoritma tersebut. Function Projection(input: prefix: string, Projector: string)-> string { Memroyeksi this.sequence dengan Projector } Deklarasi Return_value : string; Algoritma TableOfSequenceElemen <- this.sequence.split(, ); TableOfProjectorElemen <- Projector.split(, ); Int I <- 0; Int j <- 0; While(I < TableOfSequence.Length) do If Projector mengandung _ dan elemen mengandung _ then /*Proyeksi untuk kasus tersebut*/ Else If Projector mengandung _ dan elemen mengandung ( then /*Proyeksi untuk kasus tersebut*/ Else If Elemen mengandung ( then /*Proyeksi untuk kasus tersebut*/ Else j++; endif /*Proses setelah proyeksi. Memajukan counter untuk TableOfSequence*/ Endwhile /*lakukan penggabungan kembali dari TableOfSequence menjadi string*/ Return Return_value; Algoritma IV-2 Algoritma Proyeksi Untuk penggabungan prefix dengan posfixnya, dari sembilan kasus yang mungkin terjadi seperti yang dikemukakan pada Subbab III.1.3, penanganannya cukup dengan memperhatikan dua kasus utama, seperti yang telah dipaparkan pada Subbab III.1.3.1 dan Subbab III.1.3.2. IV.4.2 Data Berbeda dengan kelas Sequence yang dibangun untuk keperluan pemrosesan per sequence, kelas Data dibangun untuk memfasilitasi pemrosesan keseluruhan sequence yang terdapat dalam sequence database. Sehingga kelas Data juga bertanggung jawab

IV-8 dalam menangani akses terhadap file external, tempat dimana sequence database tersebut disimpan. Function findfrequentsequenceoneelemen(input: prefix: string)-> List of string { Mencari Frequent Sequence satu elemen pada sequence database } Deklarasi Return_value : List of string; Algoritma /*inisiasi variabel variabel local pendukung proses*/ While(masih terdapat sequence dalam sequence database) do While (masih terdapat elemen pada sequence) do Foreach frequent sequence 1 elemen do If sama dengan elemen yang tersimpan do Tambahkan counter untuk elemen tersebut Endif Endfor Endwhile Endwhile /*iterasi kembali list of frequent sequence 1 elemen, elemen dengan nilai counter yang melewati threshold akan dimasukkan ke dalam Return_value.*/ Return Return_value; Algoritma IV-3 Algoritma pencarian frequent sequence satu elemen Kelas Data bertanggung jawab dalam mencari frequent sequence dengan 1 elemen dan proyeksi terhadap keseluruhan sequence database. Lain hanya dengan proses proyeksi, dimana kelas Data dapat mendelegasikannya kepada kelas Sequence, pencarian frequent sequence memang hanya dapat dilakukan oleh kelas ini. Algoritma pencarian ini terdiri dari tiga tahap, tahap insiasi, tahap iterasi, dan tahap penghapusan. Pada tahap inisiasi, dilakukan pembangkitan Map dengan sequence satu elemen sebagai key-nya dan integer sebagai value-nya. Sequence yang tersimpan adalah kandidat frequent sequence, sedangkan integer pada value sebagai penghitung jumlah kemunculannya pada sequence database. Tahap iterasi melakukan pengisian Map tersebut, sedangkan tahap penghapusan melakukan penghapusan terhadap elemen pada Map tersebut yang value-nya tidak sesuai dengan nilai threshold. Algoritma umumnya dapat dilihat pada Algoritma IV-3.

IV-9 IV.4.3 Job Kelas Job adalah kelas yang dibangun untuk keperluan multithreading. Pada rancangan program yang single-thread, kelas Job ini tidak ada. Pada proses pencarian sequential pattern, kelas Job ini berperan dalam pemanggilan pencarian frequent sequence 1 elemen, menggabungkan frequent sequence tersebut dengan prefixnya dan menyimpan hasil gabungan ke dalam list of sequential pattern. Setiap instance kelas Job, yang mewakili satu thread untuk masing-masing, akan memegang sequence database sendiri sehingga tidak ada informasi yang dipertukarkan antar thread. Kelas ini pada implementasikan merupakan turunan dari interface Runnable, sehingga harus mengimplementasi method Run(). Algoritma yang terdapat pada Algoritma IV-1 diimplementasikan pada method Run() ini. IV.4.4 SP Kelas ini lebih tepat disebut dengan tipe data, karena tidak memiliki method selain default konstruktor. Kelas ini terdiri dari dua atribut, yaitu sequence dan filename, yang mana keduanya adalah variabel bertipe string. Kelas ini berfungsi untuk menyimpan sequence dari sequential pattern yang dihasilkan, dan hasil proyeksi database tersebut terhadap sequence-nya. IV.4.5 PrefixSpan Kelas ini pada tahap Perancangan mengalami perubahan fungsi dibandingkan dengan pada tahap Analisis. Pekerjaan yang dilakukan kelas ini pada tahap Analisis telah didelegasikan kepada kelas Job, sehingga kelas PrefixSpan tetap dibutuhkan untuk mengelola thread-thread yang nantinya akan banyak bermunculan. Method utama pada kelas ini, findsequentialpattern(), terdiri dari dua tahap. Tahap pertama adalah tahap inisiasi variabel-variabel pendukung proses, tahap kedua adalah tahap iterasi pembangkitan instance kelas Job. Iterasi akan dilakukan selama masih terdapat instance Job yang sedang berjalan dan elemen frequent sequence yang masih dapat diproses untuk menghasilkan frequent sequence lebih lanjut.