SORTING DENGAN ALGORITMA DIVIDE AND CONQUER

dokumen-dokumen yang mirip
Quick Sort dan Merge Sort. Arna Fariza Yuliana Setiowati

Sorting Algorithms. Algoritma dan Struktur Data. Sorting algorithms

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

Studi Mengenai Perbandingan Sorting Algorithmics Dalam Pemrograman dan Kompleksitasnya

STRATEGI DIVIDE AND CONQUER

Outline STRUKTUR DATA. VII. Sorting

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

Algoritma Divide and Conquer (Bagian 2)

Politeknik Elektronika Negeri Surabaya

Bab Tujuan. 6.2 Insertion Sort

Analisis Kecepatan Sorting Dengan Notasi Big O

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

Decrease and Conquer

Politeknik Elektronika Negeri Surabaya

ALGORITMA PENGURUTAN & PENCARIAN

STRUKTUR DATA. Nama : Sulfikar Npm : STMIK Handayani Makassar

Perbandingan Kecepatan/Waktu Komputasi Beberapa Algoritma Pengurutan (Sorting)

Solusi UTS Stima. Alternatif 1 strategi:

Objectives. Struktur Data & Algoritme (Data Structures & Algorithms) Sort. Outline. Bubble Sort: idea. Bubble Sort. Sorting

BAB VII ALGORITMA DIVIDE AND CONQUER

Algoritma dan Struktur Data. Algoritma Pengurutan (Sorting)

Kompleksitas Algoritma Sorting yang Populer Dipakai

SORTING ARRAY FAKULTAS TEKNOLOGI INFORMASI UNISBANK SEMARANG : ANDY KRISTIANTO : Disusun Oleh :

MAKALAH ALGORITMA DIVIDE AND CONQUER

METODE DEVIDE AND CONQUER (DANDC)

ANALISA RUNNING TIME

ANALISIS PERBANDINGAN METODE ALGORITMA QUICK SORT DAN MERGE SORT DALAM PENGURUTAN DATA TERHADAP JUMLAH LANGKAH DAN WAKTU

Algoritma Divide and Conquer. (Bagian 2)

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

Aplikasi Strategi Algoritma dalam Pembagian Kelompok Tugas Besar

Perbandingan Algoritma Pengurutan Merge Sort, Quick Sort dan Heap Sort Dilihat dari Kompleksitasnya

SORTING. Hartanto Tantriawan, S.Kom., M.Kom

Kemangkusan Algoritma Pada Beberapa Variasi Quick Sort

BAB 2 LANDASAN TEORI

Sorting Algorithms. Divide and Conquer

SORTING (BAGIAN II) Proses kelima

Kompleksitas Algoritma Pengurutan Selection Sort dan Insertion Sort

Pemanfaatan Algoritma BFS pada Graf Tak Berbobot untuk Mencari Jalur Terpendek

Menghitung Inversion Pada Barisan Dengan Menggunakan Modifikasi Bubble Sort, Insertion Sort, dan Merge Sort

Modul Praktikum 6 Pemograman Berorientasi Objek

Algoritma Bubble Sort dan Quick Sort

Design and Analysis Algorithm. Ahmad Afif Supianto, S.Si., M.Kom. Pertemuan 07

Komparasi Algoritma Mergesort dengan Quicksort pada Pengurutan Data Integer

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

Sorting. Selection Sort. Straight insertion Sort. Merge Sort Paradigma Divide-and-Conquer. Quicksort

BAB 2 LANDASAN TEORI

ANALISIS KOMPLEKSITAS ALGORITMA UNTUK BERBAGAI MACAM METODE PENCARIAN NILAI (SEARCHING) DAN PENGURUTAN NILAI (SORTING) PADA TABEL

Aplikasi Algoritma Brute Force Pada Knight s Tour Problem

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-8 Pengurutan (Sorting) 1

MODUL PRAKTIKUM BASIS DATA PENGENALAN STRUKTUR DATA DAN KOMPLEKSITAS WAKTU

Kompleksitas Algoritma Quick Sort

Penerapan Divide and Conquer dalam Membandingkan Alur Proses 2 Source Code

Pohon Biner Sebagai Struktur Data Heap dan Aplikasinya

Heap Tree dan Kegunaannya dalam Heap Sort

Kompleksitas Algoritma dalam Strategi Algoritma Sorting

A. TUJUAN PEMBELAJARAN

BAB II PEMBAHASAN. A. USE CASE 1. Pengertian Use Case

Algoritma Divide and Conquer (Bagian 1)

ALGORITMA DIVIDE AND CONQUER

ANALISIS PERBANDINGAN ALGORITMA BUBBLE SORT, MERGE SORT, DAN QUICK SORT DALAM PROSES PENGURUTAN KOMBINASI ANGKA DAN HURUF

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-9 Pengurutan (Sorting) 2

PERBANDINGAN KOMPLEKSITAS ALGORITMA PENCARIAN BINER DAN ALGORITMA PENCARIAN BERUNTUN

ANALISIS ALGORITMA BINARY SEARCH

Gambar 13.1 Ilustrasi proses algoritma sorting

KOMPLEKSITAS ALGORITMA PENGURUTAN (SORTING ALGORITHM)

Analisis Algoritma Bubble Sort

Pembuatan Peta Permainan dengan BSP

Teknik Pengurutan Kartu Remi

STRUKTUR DATA SORTING ARRAY

Algoritma Sorting. Ahmad Kamsyakawuni, S.Si, M.Kom. Jurusan Matematika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Jember

Multithreading untuk Algoritma Divide and Conquer

Kompleksitas Algoritma Dalam Algoritma Pengurutan

ALGORITMA PENCARIAN SIMPUL SOLUSI DALAM GRAF

Yaitu proses pengaturan sekumpulan objek menurut urutan atau susunan tertentu Acuan pengurutan dibedakan menjadi :

Algoritma Transposisi (Bubble Sort/pengurutan gelembung)

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA BUBBLE SORT, SELECTION SORT, INSERTION SORT

DIKTAT STRUKTUR DATA Oleh: Tim Struktur Data IF

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

NASKAH UJIAN UTAMA. JENJANG/PROG. STUDI : DIPLOMA TIGA / MANAJEMEN INFORMATIKA HARI / TANGGAL : Kamis / 18 FEBRUARI 2016

BAHASA PEMROGRAMAN JAVA

Penerapan strategi BFS untuk menyelesaikan permainan Unblock Me beserta perbandingannya dengan DFS dan Branch and Bound

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA SILABUS ALGORITMA PEMROGRAMAN

Praktikum 9. Pengurutan (Sorting) Quick Sort, Merge Sort

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA SILABUS ALGORITMA DAN STRUKTUR DATA

Politeknik Elektronika Negeri Surabaya

S O R T I R 6.1 SORTIR TERHADAP RECORD

Pencarian Solusi Permainan Fig-Jig Menggunakan Algoritma Runut-Balik

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

7. SORTING DAN SEARCHING

ALGORITMA PENGURUTAN. Oleh : S. Thya Safitri, MT

QUICKSORT: METODE PENGURUTAN ARRAY SATU DIMENSI YANG CEPAT DAN EFISIEN. (Quicksort: Quick and Efficient One-Dimension Array Sorting Method)

Aplikasi Divide and Conquer pada Perkalian Large Integer untuk Menghitung Jumlah Rute TSP Brute Force

PENGGUNAAN ALGORITMA BRANCH AND BOUND UNTUK MENYELESAIKAN PERSOALAN PENCARIAN JALAN (PATH-FINDING)

1. Kompetensi Mengenal dan memahami algoritma percabangan yang komplek.

ANALISIS ALGORITMA QUICKSORT

A. TUJUAN Mahasiswa diharapkan mampu : 1. Memahami Konsep Binary Search Tree 2. Mengimplementasaikan Binary Search Tree

2. Definisi Masalah Masalah yang akan dibahas dalam paper ini adalah mengetahui Comparison based

Analisis Kompleksitas Waktu Untuk Beberapa Algoritma Pengurutan

Penerapan Pohon Dalam Heap Sort

PERBANDINGAN APLIKASI ALGORITMA BRUTE-FORCE DAN KOMBINASI ALGORITMA BREADTH FIRST SEARCH DAN GREEDY DALAM PENCARIAN SOLUSI PERMAINAN TREASURE HUNT

Transkripsi:

SORTING DENGAN ALGORITMA DIVIDE AND CONQUER Ibnu Alam (13506024) Teknik Informatika Institut Teknologi Bandung Jalan Ganesha 10 if16024@students.if.itb.ac.id ABSTRAK Kemangkusan program adalah salah satu tujuan utama pembelajaran Strategi Algoritmik. Algoritma Divide and Conquer adalah salah satu dasar dari konsep kemangkusan program. Dalam makalah ini dibahas dua buah penggunaan algoritma Divide and Conquer dalam sorting, yaitu Merge Sort dan Quick Sort. Kata kunci: Divide and Conquer, Merge Sort, Quick Sort. 1. PENDAHULUAN Divide and Conquer (D&C) adalah algoritma pemrograman yang melakukan pemecahan masalah menjadi dua sub-masalah secara rekursif sampai setiap sub-masalah cukup sederhana untuk diselesaikan secara langsung. Tiap solusi dari masing-masing sub-masalah akan digabungkan untuk mendapatkan solusi dari masalah utama tersebut. Algoritma D&C menjadi basis dari algoritma-algoritma efisien untuk masalah-masalah seperti sorting (quick sort, merge sort) dan transformasi diskrit Fourier. Dasar dari algoritma ini dikemukakan pertama kali oleh Anatolii Karatsuba Alexeevich pada tahun 1960 sebagai algoritma perkalian dua buah angka n-digit dengan kompleksitas algoritma O(n. 2 log3). Algoritma ini sekarang dikenal dengan nama Algoritma Karatsuba, membuktikan bahwa ada algoritma perkalian yang lebih cepat dari O(n 2 ) [Kolmogorov, 1956]. Buah pikiran Kolmogorov dan penemuan Karatsuba kemudian membantu merintis penelitian performa algoritma. Algoritma Divide and Conquer secara natural diimplementasikan secara rekursif sebagai pemanggilan prosedur dalam dirinya sendiri. Sub-masalah-sub-masalah akan dikerjakan dalam procedure-call stack. Setiap submasalah yang merupakan hasil pembagian dari masalah utama biasanya dibagi tanpa menimbulkan overlapping sehingga tidak ada pengerjaan redundan. Semuanya akan dimasukkan ke dalam stack dan dikerjakan mulai dari submasalah terkecil. Tetapi, selain pengimplementasian rekursif, dengan metode lain sub-masalah yang dibentuk dapat juga disimpan dalam struktur data yang dibuat sendiri seperti stack, queue, dan priority queue. Pengimplementasian non-rekursif ini menambah kebebasan dalam pemilihan sub-masalah mana yang akan dipecahkan berikutnya. Konsep ini dikembangkan dalam algoritma-algoritma seperti Breadth First Search dan optimalisasi Branch and Bound. 2. METODE Terdapat dua metode sorting paling umum yang dipakai dalam implementasi algoritma Divide and Conquer, yaitu quick sort dan merge sort (di luar kedua ini masih ada metode lain seperti insertion sort). Keduanya berfungsi untuk mengurutkan sebuah array berisi nilai-nilai yang acak dengan cara mengurutkan sebagian dari array terlebih dahulu sebelum mengurutkan semua array secara keseluruhan. Pembahasan mendalam akan menjelaskan lebih, tetapi pada dasarnya perbedaan antara kedua metode sorting itu sebagai berikut: Pembagian masalah menjadi sub-masalah di mergesort lebih mudah daripada quicksort karena mergesort hanya perlu membagi dua masalah sedangkan pada quicksort terdapat partisi yang rumit untuk membagi masalah. Sebaliknya, mergesort rumit pada saat penggabungan karena harus mengurutkan kembali gabungan dari sub-masalah, sedangkan quicksort tinggal menempelkan array yang sudah dipecah menjadi satu kembali. Quick sort melakukan proses langsung di dalam array masalah sehingga tidak memerlukan memory tambahan untuk menyimpan submasalah. Merge sort melakukan sebaliknya.

2.1 Merge Sort Algoritma dari merge sort adalah: DIVIDE : Bagi tabel di tengah menjadi 2 tabel submasalah (Tabel [i..j] dibagi menjadi Tabel [ i..pivot] dan tabel [pivot+1..j] dimana pivot = (i+j) div 2) CONQUER: Gabungkan 2 submasalah dan urutkan, lakukan sampai semua sub-masalah bergabung lagi menjadi satu. Contoh sederhana: public abstract class MergeSort extends Object protected Object tosort[]; protected Object swapspace[]; public void sort(object array[]) if(array!= null && array.length > 1) int maxlength; Pemecahan (17, 12, 6, 19, 23, 8, 5, 10) (17, 12, 6, 19), (23, 8, 5, 10) (17, 12), (6, 19), (23, 8), (5, 10) (17), (12), (6), (19), (23), (8), (5), (10) Penggabungan dan pengurutan (12, 17), (6, 19), (8, 23), (5, 10) (6, 12, 17, 19), (5, 8, 10, 23) (5, 6, 8, 10, 12, 17, 19, 23) Implementasi dalam Java: maxlength = array.length; swapspace = new Object[maxLength]; tosort = array; this.mergesort(0, maxlength - 1); swapspace = null; tosort = null; public abstract int compareelementsat(int beginloc, int endloc); protected void mergesort(int begin, int end) if(begin!= end) int mid; mid = (begin + end) / 2; this.mergesort(begin, mid); this.mergesort(mid + 1, end); this.merge(begin, mid, end); protected void merge(int begin, int middle, int end) int firsthalf, secondhalf, count; firsthalf = count = begin; secondhalf = middle + 1;

while((firsthalf <= middle) && (secondhalf <= end)) if(this.compareelementsat(secondhalf, firsthalf) < 0) swapspace[count++] = tosort[secondhalf++]; else swapspace[count++] = tosort[firsthalf++]; if(firsthalf <= middle) while(firsthalf <= middle) swapspace[count++] = tosort[firsthalf++]; else while(secondhalf <= end) swapspace[count++] = tosort[secondhalf++]; for(count = begin;count <= end;count++) tosort[count] = swapspace[count]; 2.2 Quick Sort Seperti yang telah dinyatakan sebelumnya, quick sort mempartisi tabel sehingga (asumsi pengurutan kecil-besar dari kiri ke kanan): - Elemen T[i] berada di tempatnya yang benar (tidak perlu dipindahkan/diurutkan lagi) - Tidak ada elemen yang lebih besar nilainya di kiri i - Tidak ada elemen yang lebih kecil nilainya di kanan i Algoritma dari quick sort: Partisi tabel (secara implisit juga melakukan pengurutan tabel). Jika belum urut, partisi kembali partisi dari tabel (rekursif) Gabungkan semua partisi. Gambar 1 Ilustrasi teknik partisi

Implementasi dalam Java: Gambar 2 - contoh quick sort public class QuickSort private static long comparisons = 0; private static long exchanges = 0; /*********************************************************************** * Quicksort code from Sedgewick 7.1, 7.2. ***********************************************************************/ public static void quicksort(double[] a) shuffle(a); // to guard against worst-case quicksort(a, 0, a.length - 1); // quicksort a[left] to a[right] public static void quicksort(double[] a, int left, int right) if (right <= left) return; int i = partition(a, left, right); quicksort(a, left, i-1); quicksort(a, i+1, right); // partition a[left] to a[right], assumes left < right private static int partition(double[] a, int left, int right) int i = left - 1; int j = right; while (true) while (less(a[++i], a[right])) // find item on left to swap ; // a[right] acts as sentinel

while (less(a[right], a[--j])) if (j == left) break; if (i >= j) break; exch(a, i, j); exch(a, i, right); return i; 2.3 Kompleksitas Algoritma // find item on right to swap // don't go out-of-bounds // check if pointers cross // swap two elements into place // swap with partition element // is x < y? private static boolean less(double x, double y) comparisons++; return (x < y); // exchange a[i] and a[j] private static void exch(double[] a, int i, int j) exchanges++; double swap = a[i]; a[i] = a[j]; a[j] = swap; // shuffle the array a[] private static void shuffle(double[] a) int N = a.length; for (int i = 0; i < N; i++) int r = i + (int) (Math.random() * (N-i)); // between i and N-1 exch(a, i, r); // test client public static void main(string[] args) int N = Integer.parseInt(args[0]); // generate N random real numbers between 0 and 1 long start = System.currentTimeMillis(); double[] a = new double[n]; for (int i = 0; i < N; i++) a[i] = Math.random(); long stop = System.currentTimeMillis(); double elapsed = (stop - start) / 1000.0; System.out.println("Generating input: " + elapsed + " seconds"); // sort them start = System.currentTimeMillis(); quicksort(a); stop = System.currentTimeMillis(); elapsed = (stop - start) / 1000.0; System.out.println("Quicksort: " + elapsed + " seconds"); // print statistics System.out.println("Comparisons: " + comparisons); System.out.println("Exchanges: " + exchanges);

3. KOMPLEKSITAS ALGORITMA Merge Sort: T(N) <= 0, if N =1 Otherwise, T(N) <= T( N /2 ) + T( N /2 ) + N Solusi: T(N) = O(N 2 log N) 4. KESIMPULAN Merge Sort dan Quick Sort adalah salah satu penggunaan dari algoritma Divide and Conquer. Keduanya merupakan tool yang kuat dalam pemrosesan pengurutan data dalam program. Secara kompleksitas Quick Sort lebih cepat daripada Merge Sort. REFERENSI [1] Munir, Rinaldi. Diktat Kuliah IF 2251 Strategi Algoritmik, 2005. Quick Sort: