ANALISA RUNNING TIME

dokumen-dokumen yang mirip
Struktur Data & Algoritma

Recursion Properties. Factorial: MaxSubseqSum Recursive version. MaxSubseqSum Recursive version

Struktur Data dan Algoritma

Struktur Data & Algoritme (Data Structures & Algorithms)

Algoritme. Struktur Data & Algoritme (Data Structures & Algorithms) Expected Outcome. Analisa Algoritme: motivasi. Analisa Algoritme: what?

Setelah mempelajari topik Analisis Algoritma di kuliah SDA, ada beberapa kompetensi yang perlu Anda kuasai:

Struktur Data & Algoritme (Data Structures & Algorithms)

LAPORAN PRAKTIKUM PEMROGRAMAN DASAR TIPE-TIPE FUNGSI ATAU METHOD

SORTING DENGAN ALGORITMA DIVIDE AND CONQUER

Aplikasi Algoritma Brute Force Pada Knight s Tour Problem

Pertemuan 2 (2) : Membuat Class dan mengakses Anggota Class

Algoritma dan Pemrograman

MODUL III ARRAYLIST TUGAS PENDAHULUAN

Mata Kuliah : Pemrograman Berbasis Objek Pertemuan : 4

Outline STRUKTUR DATA. VII. Sorting

Percabangan & Perulangan

Belajar Rekursif di Java

PERTEMUAN 2 ARRAY, PERCABANGAN, DAN PERULANGAN

Insertion Sort Dengan Algoritma Divide And Conquer

BAB 8 Argumen dari Command-line

Perulangan / Looping

BAHASA PEMROGRAMAN JAVA

A. TEORI ARRAY 1 DIMENSI

Sorting. Struktur Data dan Algoritma. Suryana Setiawan, Ruli Manurung & Ade Azurat (acknowledgments: Denny) Fasilkom UI

MODUL PRAKTIKUM TI014 STRUKTUR DATA Season 1

BAB 8 Argumen dari Command-line

Modul Praktikum 6 Pemograman Berorientasi Objek

Metode Binnary Searching di Java Console

MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK

int i = 0; while (i < 10) { System.out.println( Informatika Unpas ); i++; }

Pemrograman Berorientasi Objek (PBO) PERTEMUAN X (LOOPING)

LAPORAN PRAKTIKUM ALGORITMA DAN PEMROGRAMAN ( Implementasi Rekursi Pada Java)

2.1 if Jenis-jenis Percabangan if adalah if, if else, If else if else if - else

MODUL PRAKTIKUM BASIS DATA PENGENALAN STRUKTUR DATA DAN KOMPLEKSITAS WAKTU

Penggunaan Algoritma Backtrack dan Aturan Warnsdorff Untuk Menyelesaikan Knight s Tour Problem

Modul 3: Kendali program dan teknik. penyimpanan data

BAB VI ARRAY Mendeklarasikan Variabel Array int[ ] bilangan; int bilangan[ ]; Mendefinisikan Array Bilangan = new int[5]; Latihan 21. ArrSatu.

Pertemuan 2 Struktur Kontrol Percabangan

Politeknik Elektronika Negeri Surabaya

Array Sebagai Parameter Method

Pertemuan 4 Array pada Java

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

ANALISIS ALGORITMA BINARY SEARCH

Bahasa Pemrograman 2.

Decrease and Conquer

Gambar 1. Langkah-langkah pengurutan metode Insertion Sort (1)

1. Mana diantara pilihan-pilihan berikut ini yang merupakan penulisan loop yang benar?

A. TEORI ARRAY 1 DIMENSI

Pembuatan Peta Permainan dengan BSP

Arrays. Misalkan kita ingin menyimpan 100 buah integer Buat 100 variabel bertipe integer. Tidak efisien!

Method. Pemrograman Dasar Sistem Informasi PTIIK Herman Tolle

IKG2I4 / Software Project I

Struktur Kontrol Pemrograman Java : PERCABANGAN

Obyektif : KONTROL ALUR PROGRAM

Metode Sequential Searching di Java Console

Politeknik Elektronika Negeri Surabaya

Metode Insertion Sort di Java Console

Array Multidimensi. Pemrograman Dasar. Java

Fungsi Rekursif PEMROGRAMAN DASAR. Dr. Eng. Herman Tolle, ST., MT. Sistem Informasi PTIIK UB Semester Ganjil 2014/2015

BAB 1 PENDAHULUAN. Universitas Sumatera Utara

PERTEMUAN 2 ARRAY, PERCABANGAN, DAN PERULANGAN

Quick Sort dan Merge Sort. Arna Fariza Yuliana Setiowati

Modul Praktikum 3 Pemograman Berorientasi Objek

Pemrograman. Pertemuan-3 Fery Updi,M.Kom

Struktur Data & Algoritma

Pertemuan 3 Struktur Perulangan pada Java

Pemrograman JAVA INPUT-OUTPUT

Politeknik Elektronika Negeri Surabaya

Penyeleksi Kondisi / Percabangan

Penyelesaian Barisan Rekursif dengan Kompleksitas Logaritmik Menggunakan Pemangkatan Matriks

Aplikasi Divide and Conquer pada: 1. Grafika Komputer 2. Evaluasi expression tree. Oleh: Rinaldi Munir Informatika STEI-ITB

Modul Praktikum 4 Pemograman Berorientasi Objek

Design and Analysis of Algorithm

Modul 3 Flow Control dan Input

Politeknik Elektronika Negeri Surabaya

Design and Analysis of Algorithms CNH2G3- Week 5 Kompleksitas waktu algoritma rekursif part 2: Metode Karakteristik

Pada akhir pembahasan, peserta diharapkan mampu untuk:

Latihan Ujian Pemrograman Berorientasi Objek. Semester Genap 2016/2017

Pemrograman Berorientasi Object

Belajar ArrayList di Java

Sorting Algorithms. Algoritma dan Struktur Data. Sorting algorithms

TELAAH WAKTU EKSEKUSI PROGRAM TERHADAP KOMPLEKSITAS WAKTU ALGORITMA BRUTE FORCE DAN DIVIDE AND CONQUER DALAM PENYELESAIAN OPERASI LIST

IKG2I4 / Software Project I

I. Tujuan Instruksional Umum Komunikasi antar objek pada kelas yang berbeda Memahami berbagai macam modifier dan karakteristiknya II.

BAB III ANALISIS KOMPLEKSITAS ALGORITMA

Pengenalan Algoritma

ARRAY. 7 th week Estu Sinduningrum ST,MT

Penerapan Algoritma Brute Force dalam mencari Faktor Prima pada suatu Bilangan

MODUL 3 ARRAY. Pemograman Berorientasi Objek

Jobsheet 09. Overloading and Overriding Method

Method / Fungsi / Sub Program

MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK (JAVA) PERTEMUAN 4 CONTROL FLOW STATEMENT

KENDALI PROSES. Untuk mengatur arus program, pemrograman java menyediakan struktur perulangan (looping), kondisional, percabangan, dan lompatan.

BAB 1 KONSEP DASAR JAVA

Algoritma dan Pemrograman Array/Tabel[1] Oleh: Eddy Prasetyo N

OBJECT ORIENTED PROGRAMMING (OOP)

Bab Tujuan. 6.2 Insertion Sort

Definisi Eksepsi (exception)

IF PEMROGRAMAN LANJUT ARRAY. Oleh : Andri Heryandi, M.T.

IF PEMROGRAMAN LANJUT PERULANGAN. Oleh : Andri Heryandi, M.T.

Transkripsi:

ANALISA RUNNING TIME Maximum Contiguous Subsequence Sum I KETUT RESIKA ARTHANA NPM : 1006747864 MAGISTER ILMU KOMPUTER FAKULTAS ILMU KOMPUTER UNIVERSITAS INDONESIA 1

Deskripsi Singkat Permasalahan Maximum Contiguous Subsequence Sum (MCSS) Algorithm adalah algoritma yang digunakan untuk mencari hasil pejumlahan maksimum dari deret bilangan. Nilai maksimum dari hasil penjumlahan suatu deret akan menjadi 0 jika semua nilai dalam deret bernilai negatif. Contoh : diberikan deret bilangan : 7-8 7 2-1 MCSS dari deret di atas adalah 9 Contoh lain 7-1 2 2-9 MCSS dari deret di atas adalah 10 Deskripsi Singkat Algoritma dan Kompleksitas Ada beberapa pendekatan algoritma yang digunakan untuk menyelesaikan permasalahan Maximum Contiguous Subsequence Sum. 1. Algoritma 1 (menggunakan metode brute force) Algoritma yang pertama menggunakan metode brute force, yaitu mencoba semua jumlah sub sequence. 0 1 2 3 4 7-1 2 2-9 Maka akan dicari hasil jumlah dari masing-masing subsqence: jum(x,y)= dijumlahkan dari larik ke x sampai larik ke y. jum(0,0), jum(0,1), jum(0,2), jum(0,3), jum(0,4) jum(1,1), jum(1,2), jum(1,3), jum(1,4) jum(2,2), jum(2,3), jum(2,4), jum(3,3), jum(3,4) jum(4,4), setelah diperoleh masing-masing jumlah, maka akan dicari yang mana terbesar. Berikut adalah algoritmanya dalam bahasa pemrograman Java public int maxsubsum1( int [] A ) int maxsum = 0; for(int ii = 0; ii < A.length; ii++) for( int jj = ii; jj < A.length; jj++) int thissum= 0; for(int kk = ii; kk <= jj; kk++) thissum += A[kk]; if( thissum > maxsum ) maxsum = thissum; return maxsum ; 2

Terdapat iterasi KK sebanyak N kali yang berada dalam iterasi JJ sebanyak N kali dan berada dalam iterasi II sebanyak n kali, maka dapat dinotasikan sebagai O(N 3 ) atau algoritma kubik. 2. Algoritma 2 (Menghilangkan 1 iterasi) Untuk mengefektifkan runtime algoritma brute force di atas, pada kasus ini dimungkinkan untuk menghilangkan 1 iterasi yang dianggap tidak efisien, sebagai gantinya nilai thissum untuk jj bisa diisi dengan nilai thissum sebelumnya. Berikut adalah algoritma kedua yang menghilangkan 1 iterasi. public int maxsubsum2( int [ ] A ) int maxsum = 0; for( int ii = 0; ii < A.length; ii++ ) int thissum = 0; for( int jj = ii; jj < A.length; jj++ ) thissum += A[jj]; if( thissum > maxsum ) maxsum = thissum; return maxsum ; Dari algoritma di atas, dapat dilihat bahwa terdapat iterasi JJ sebanyak N kali dimana iterasi JJ tersebut berada dalam iterasi II sebanyak N kali juga. jadi bisa disimpulkan bahwa algoritma kedua termasuk notasi O(N 2 ) atau algoritma kuadrat. 3. Algoritma 3 (Rekursif) Algoritma ketiga diimplementasikan dengan rekursif yang sesuai dengan pendekatan divide and conquer. Divide and Conquer adalah metode yang membagi permasalahan menjadi bagian yang lebih kecil dan kemudian menyelesaikannya. Berikut adalah algoritma dengan rekursif private int maxsumrec (int[] a, int left, int right) int center = (left + right) / 2; if(left == right) // Base case return a[left] > 0? a[left] : 0; int maxleftsum = maxsumrec (a, left, center); int maxrightsum = maxsumrec (a, center+1, right); int leftbordersum=0; int rightbordersum=0; int maxleftbordersum = 0; int maxrightbordersum=0; for(int ii = center; ii >= left; ii--) leftbordersum += a[ii]; if(leftbordersum > maxleftbordersum) maxleftbordersum = leftbordersum; for(int jj = center + 1; jj <= right; jj++) 3

rightbordersum += a[jj]; if(rightbordersum > maxrightbordersum) maxrightbordersum = rightbordersum; if (maxleftsum>maxrightsum && maxleftsum>(maxleftbordersum + maxrightbordersum)) return maxleftsum; else if(maxrightsum>(maxleftbordersum + maxrightbordersum)) return maxrightsum; else return (maxleftbordersum + maxrightbordersum); public int maxsubsum3 (int [] a) return maxsumrec (a, 0, a.length-1); Algoritma rekursif yang menyelesaikankan permasalahan dengan membagi dua permasalahan kemudian melakukan proses linear (menggabung atau memecah) notasi algoritma ini adalah O(N log N) 4. Algoritma 4 (Linier) Algoritma keempat menggunakan pendekatan linier. public int maxsubsum4 (int a[]) int maxsum = 0; int thissum = 0; for (int jj = 0; jj < a.length; jj++) thissum += a[jj]; if (thissum > maxsum) maxsum = thissum; else if (thissum < 0) thissum = 0; return maxsum; Pada algoritma di atas, dilakukan iterasi sebanyak N kali. Pada setiap iterasi akan dicari jumlah sampa ke j. jika iterasi berikutnya memiliki jumlah lebih besar dari hasil penjumlahan sebelumnya maka hasil penjumlahan maksimum sementara akan dianggap sama dengan hasil penjumlahan pada iterasi tersebut. Namun jika hasil penjumlahan pada saat itu bernilai negatif (<0) maka hasil penjumlahan saat itu dianggap 0. Pada algoritma ini hanya menggunakan satu iterasi sebanyak N kali. Algoritma ini bisa dinyatakan dengan notasi O(N) Metode Uji Coba Metode yang digunakan untuk uji coba analisa running time dengan mengimplementasikan algoritma ini ke dalam bahasa Java dengan editor Netbeans. Selanjutnya akan diberikan input yang sama untuk membandingkan waktu yang diperlukan masing-masing algoritma untuk mencari jumlah deret terbesar. 4

Keseluruhan algoritma ini (1-4) diimplementasikan menjadi 1 class yang diberi nama MaxSubSum.java. Disamping algoritma di atas class ini juga diisi dengan beberapa method yang menunjang proses analisa runtime. Method tersebut adalah : generateinput Method generateinput() berfungsi untuk membangkitkan array sebanyak N dengan isi masing-masing elemen dari -20 sampai 20. public int[] generateinput(int jum) int[] arr= new int[jum]; Random ran=new Random(); for (int i=0; i<jum;i++) arr[i]=ran.nextint(20)-ran.nextint(20); System.out.println(); return arr; arr[i]=ran.nextint(20)-ran.nextint(20); berfungsi untuk menggenerate bilangan random dari - 20 sampai 20. Fungsi ran.nextint(20) hanya menggenerate dari 0 sampai 20, jadi dibuat selisih keduanya untuk memungkinkan mendapat nilai rentang -20 sampai 20. Contoh hasil generate input (sebanyak 100) : 3 16-14 -9 0-7 -3 11-14 -16-8 5-4 -5 15 8 13-11 3 2-1 11-6 0 14-11 -1 2 0 9-14 9-1 3-19 0 3 9-9 -2 7 5 2 7-4 -3-4 10-1 -4-5 -5 7-13 2-2 6 11 0-9 13 14 4 7-8 3-4 14-3 -12 12 0-10 -5-3 0-9 10 9 13 11 4-3 -8 0-1 -9 9 14 9-4 -3 3 5-5 2 6-9 - 3 0 printarray PrintArray berfungsi untuk menampilkan isi array public void printarray(int arr[]) System.out.print(" "); for (int i=0;i<arr.length;i++) System.out.print(""+arr[i]+" "); System.out.println(); Method main public static void main(string[] args) MaxSubSum mss=new MaxSubSum(); int juminput=1000; //jumlah input int[] inputarr=mss.generateinput(juminput); mss.printarray(inputarr); //print array System.out.println("MSS 1="+mss.maxSubSum1(inputArr)); System.out.println("MSS 2="+mss.maxSubSum2(inputArr)); System.out.println("MSS 3="+mss.maxSubSum3(inputArr)); System.out.println("MSS 4="+mss.maxSubSum4(inputArr)); 5

Jumlah input ditentukan pada main program. Pada jumlah input yang besar, beberapa algoritma terpaksa dinonaktifkan karena memiliki waktu runtime yang lama (diberi simbol NA) Netbeans dilengkapi dengan fasilitas profiling yang bisa digunakan untuk menganalisa performance dari program yang diekskusi. Fasilitas profiling ini yang digunakan penulis untuk menganalisa running time masing-masing algoritma. Cara kerja profiling program pada netbeans adalah dengan cara mencatat waktu awal dan waktu akhir sebuah method saat dijalankan. Setelah selesai method tersebut dijalankan maka akan dicari selisih waktu akhir-waktu awal untuk mendapatkan runtime masing-masing method. Langkah-langkah profiling method pada netbeans. Klik tombol profile Pilih CPU dan tentukan part method yang ingin dicatat runtimenya Klik Run 6

7

Analisa Running Time (dalam satuan ms) Source code terlampir (sumber dari slide kuliah dengan beberapa modifikasi) Jumlah Input Algoritma 1 (ms) O(N 3 ) Algoritma 2 (ms) O(N 2 ) Algoritma 3 (ms) O(N log N) 100 1.44 0.191 1.15 0.009 1000 278 1.89 6.19 0.038 5000 NA 24.8 25.5 0.17 10000 NA 96.0 47.2 0.364 100000 NA 9800 536 1.22 1000000 NA 1070483 5019 5.91 Jumlah Data 100 Algoritma 4 (ms) O(N) Jumlah Data 1000 Jumlah Data 5000 Jumlah Data 10000 Jumlah Data 100000, maxsubsum1(na) Jumlah Data 1000000, maxsubsum1(na) Berdasarkan hasil analisa di atas, dapat disimpulkan bahwa runtime Algoritma MaxSubSum1 dengan notasi O(N 3 ) > Algoritma MaxSubSum2 dengan notasi O(N 2 ) > Algoritma MaxSubSum3 dengan notasi 8

O(N log N) > Algoritma MaxSubSum4 dengan notasi O(N) pada jumlah data yang besar (kira-kira di atas 10.000). Sedangkan pada jumlah data < dari 10.000, runtime Algoritma MaxSubSum2 dengan notasi O(N 2 ) < Algoritma MaxSubSum3 dengan notasi O(N log N) Referensi : Algoritma diperoleh dari Slide kuliah Struktur Data & Algoritma dengan beberapa penambahan untuk diimplementasikan pada bahasa pemrograman Java 9