ANALISIS WAKTU ALGORITMA QUICKSORT DAN MERGESORT Oleh : Yahfizham,ST.,M.Cs Abstrak Sistem komputer yang terdiri dari perangkat keras, perangkat lunak perangkat manusia yang saling berinteraksi bekerja sama sehingga mencapai suatu tujuan tertentu. Tujuan yang dimaksud penyelesaian suatu pekerjaan atau persoalan mungkin saja menganalisis suatu peluang. Peran dalam perangkat lunak atau pemograman begitu penting, sehingga perlu memahami konsep dasar. Begitu banyak logika pemograman yang telah diciptakan, untuk kasus yang umum juga khusus. Algoritma Quick sort merge sort merupakan suatu strategi pengurutan (indexing) data, yang termasuk pada metode bagi dua selesaikan (divide-and-conquer). Algoritma dibutuhkan agar suatu permasalahan dapat diselesaikan dengan lebih efektif dengan sedikit sumber daya yang dilibatkan lebih efisien dengan durasi waktu yang dibutuhkan sedikit (cepat). Key word :, divide and conquer, quick sort merge sort. Pendahuluan Sejarah kemunculan sejalan dengan kemunculan teknologi komputer. Analisis menjadi topik bahasan utama dalam disiplin ilmu komputer. Seorang programmer komputer telah lama menggunakan untuk diterapkan pada sistem informasi manajemen yang menjalankan fungsi-fungsi akuntansi perusahaan yang disebut sistem pemrosesan transaksi (transaction information system) atau sistem pemrosesan data secara elektronik (Electronic Data Processing/EDP), yang kemudian berkembang menjadi sistem pendukung pengambilan keputusan (Decision Support System/DSS). Algoritma kumpulan instruksi yang dibuat secara jelas terhadap penyelesaian suatu masalah. Kumpulan instruksi yang dimaksud dibangun dari suatu bahasa pemograman yang dimengerti oleh komputer. Kumpulan instruksi tersebut berupa tahapan-tahapan atau langkahlangkah untuk menyelesaikan suatu pekerjaan atau penyelesaian suatu masalah secara lebih efektif dengan sedikit sumber daya yang dilibatkan lebih efisien dengan durasi waktu yang dibutuhkan sedikit (cepat). Secara bebas, kita menganggap kurang lebih sama dengan suatu prosedur yang sering dikerjakan atau dilakukan sehari-hari. 1
Contohnya memasak beras, langkah-langkahnya sebagai berikut: ambil tempat menanak nasi, masukkan beras secukupnya kedalam tempat tadi, bersihkan masukkan air sesuai takaran, masukkan kedalam magic jar, colokkan ke listrik tekan tombolnya. Contoh lain ketika kita hendak mengendarai sepeda motor, tahapan-tahapan yang kita lakukan memeriksa posisi kendaraan, melihat ban, memeriksa kunci, menghidupkan mesin jalan. French,C.S. (1984) menyatakan sejumlah konsep yang mempunyai relevansi dengan masalah rancangan program yaitu kemampuan komputer, kesulitan ketepatan. Penerapan dari konsep tersebut biasanya digunakan dalam rancangan. Dalam merancang sebuah, Fletcher (1991) memberikan beberapa cara atau metode yaitu kumpulan perintah, ekspresi, tabel instruksi, program komputer, kode semu flow chart, segkan Knuth (1973) menyarankan fundamental yaitu input, proses output. Dalam analisis terdapat bagian-bagian yang dapat dianalisis, yaitu kecepatan waktu, kapasitas biaya kapasitas ruang. Ketiganya menggunakan notasi O (big O). Divide and Conquer metode pemecahan masalah yang bekerja dengan membagi masalah (problem) menjadi beberapa submasalah (sub-problem) yang lebih kecil, kemudian menyelesaikan masing-masing sub-masalah secara independen, akhirnya menggabungkannya. Algoritma quicksort mergesort diaplikasikan dengan cara membagi tabel menjadi bagian kiri bagian kanan, perulangan dilakukan secara rekursif (reccurent). Kemudian menggabungkan hasil pengurutan masing-masing bagian menjadi tabel semula yang sudah terurut. Proses pembagiannya mudah karena hanya memerlukan proses pembagian biasa. Akan tetapi proses penggabungannya menjadi sulit karena unsur-unsur pada tabel kecil belum tentu terurut sehingga pada setiap tahap penggabungan, harus terus dilakukan pembandingan pengurutan kembali. Algoritma pengurutan (sorting algorithm) yang menyimpan suatu list pada suatu urutan tertentu, biasanya membesar atau mengecil, biasanya digunakan untuk mengurutkan angka ataupun huruf. Efisiensi pada pengurutan ini diperlukan untuk mengoptimalkan kecepatan pemrosesan. Semakin efisien suatu, maka pada saat dieksekusi dijalankan akan menghabiskan waktu yang lebih cepat bisa menerima lebih banyak masukan dari user. Terdapat banyak pengurutan yang sudah dibuat seperti selection sort, shell sort, heapsort, bubble sort, insertion sort, radix sort, quicksort, mergesort. Yang menjadi domain pada kesempatan ini mencoba untuk menganalisis kecepatan waktu dari quicksort mergesort, dengan sekali inputan data berupa bilangan bulat (integer) dalam suatu list atau array secara acak (random). Konsep Dasar Algoritma Quicksort Algoritma quicksort pertama kali dibuat oleh C.A.R.Hoare tahun 1960. Pada masalah penyortingan (sorting) data bilangan bulat (integer) secara terindeks pada suatu list atau array dari bilangan yang paling besar sampai ke bilangan yang paling kecil atau sebaliknya. Tidak hanya dapat 2
diterapkan pada pengindeksan bilangan saja, namun juga untuk pengindeksan huruf (abjad) dari A ke Z atau sebaliknya. Algoritma ini sangat baik diterapkan pada kasus pengindeksan kumpulan kata (library sort utility) atau kumpulan bilangan atau kombinasinya. Algoritma ini mengikuti langkah langkah sebagai berikut : 1. Divide Memilah rangkaian data menjadi dua sub-rangkaian A[p q-1] A[q+1 r] dimana setiap unsur A[p q-1] kurang dari atau sama dengan A[q] setiap unsur pada A[q+1 r] lebih besar atau sama dengan unsur pada A[q]. A[q] disebut sebagai unsur pivot. Perhitungan pada unsur q merupakan salah satu bagian dari prosedur pemisahan. 2. Conquer Mengurutkan unsur pada subrangkaian secara rekursif Pada quicksort, langkah kombinasi tidak di lakukan karena telah terjadi pengurutan unsur unsur pada sub-array. Quicksort termasuk pada pendekatan sulit membagi, mudah menggabung (hard split/easy join). Cara pemilihan pivot: 1) Pivot = unsur pertama/unsur terakhir/unsur tengah tabel 2) Pivot dipilih secara acak dari salah satu unsur tabel. Pivot = unsur median tabel Kasus terburuk (worst case) terjadi bila pada setiap partisi pivot selalu terpilih unsur maksimum atau unsur minimumnya. Kasus ini terjadi jika tabel sudah terurut menaik/menurun Kasus rata-rata (average case) terjadi jika pivot dipilih secara acak dari unsur tabel, peluang setiap unsur dipilih menjadi pivot sama. Rata-rata jumlah tingkatan perbandingan diatas semua permutasi urutan masukan dapat diperkirakan dengan teliti dengan pemecahan hubungan perulangan Kompleksitas Waktu Quicksort Kasus terbaik (best case) terjadi bila pivot unsur median sedemikian sehingga kedua tabel berukuran relatif sama setiap kali pempartisian. 3
Konsep Dasar Algoritma Mergesort atau Tavg (n) = O(n Deskripsi dari ini dirumuskan dalam 3 langkah berpola divide-and-conquer. Berikut penjelasan langkah kerja dari merge sort. 1. Divide Memilah unsur unsur dari rangkaian data menjadi dua bagian. 2. Conquer Setiap bagian dengan memanggil prosedur mergesort secara rekursif 3. Kombinasi Mengkombinasikan dua bagian tersebut secara rekursif untuk mendapatkan rangkaian data berurutan n)= O(n log n) Implementasi Quicksort Penerapan quicksort menggunakan antar muka bahasa pemograman berbasis visual yaitu visual basic 6.0 dengan kumpulan perintah seperti dibawah ini: Public Sub Quicksort(list() As Integer, ByVal min As Long, ByVal max As Long) Dim med_value As Long Dim hi As Long Dim lo As Long Dim i As Long If min >= max Then Exit Sub i = Int((max - min + 1) * Rnd + min) med_value = list(i) list(i) = list(min) lo = min hi = max Do Do While list(hi) >= med_value hi = hi - 1 If hi <= lo Then Exit Do If hi <= lo Then list(lo) = med_value Exit Do list(lo) = list(hi) lo = lo + 1 Do While list(lo) < med_value lo = lo + 1 If lo >= hi Then Exit Do If lo >= hi Then lo = hi list(hi) = med_value Exit Do list(hi) = list(lo) Quicksort list(), min, lo - 1 Quicksort list(), lo + 1, max End Sub Proses rekursi berhenti jika mencapai unsur dasar. Hal ini terjadi bilamana bagian yang akan diurutkan menyisakan tepat satu unsur. Sisa pengurutan satu unsur tersebut menandakan bahwa bagian tersebut telah terurut sesuai rangkaian. Mergesort termasuk pada pendekatan mudah membagi, susah menggabung (easy split/ hard join). Kompleksitas Waktu Mergesort Kasus terbaik (best case) terjadi apabila data sudah terurut, sehingga pada saat kombinasi tidak perlu mengurutkan kembali. 4
Kasus terburuk (worst case) terjadi bila data terkondisi seperti pada gambar berikut. Kasus rata-rata (average case) terjadi jika pivot dipilih secara acak dari elemen tabel. Tavg (n) = O(n n)= O(n log n) Implementasi Mergesort Penerapan mergesort menggunakan antar muka bahasa pemograman berbasis visual yaitu visual basic 6.0 dengan kumpulan perintah seperti dibawah ini: Public Sub Merge(list() As Integer, ByVal bawah As Long, ByVal tengah As Long, ByVal atas As Long) 5 Dim temp_array() As Integer Dim temp As Integer Dim vektora As Long Dim vektorb As Long Dim vektorutama As Long ReDim temp_array(bawah To atas) CopyMemory temp_array(bawah), list(bawah), (atas bawah + 1) * Len(list(bawah)) vektora = bawah vektorb = tengah + 1 vektorutama = bawah Do While (vektora <= tengah) And (vektorb <= atas) If (temp_array(vektora) <= temp_array(vektorb)) Then list(vektorutama) = temp_array(vektora) vektora = vektora + 1 Else list(vektorutama) = temp_array(vektorb) vektorb = vektorb + 1 vektorutama = vektorutama + 1 If vektora <= tengah Then CopyMemory list(vektorutama), temp_array(vektora), (tengah vektora + 1) * Len(list(bawah)) If vektorb <= atas Then CopyMemory list(vektorutama), temp_array(vektorb), (atas vektorb + 1) * Len(list(bawah)) End Sub Public Sub MergeSort(list() As Integer, ByVal first_index As Long, ByVal last_index As Long) Dim tengah As Long If (last_index > first_index) Then tengah = (first_index + last_index) \ 2 MergeSort list, first_index, tengah MergeSort list, tengah + 1, last_index Merge list, first_index, tengah, last_index
End Sub Pembahasan Walaupun tiap pengurutan menawarkan perbedaan metode sudut pang penyelesaian masalah yang berbeda, namun waktu yang dibutuhkan tetap menjadi masalah utama yang harus menjadi pertimbangan untuk menentukan mana yang lebih baik tepat untuk digunakan. Untuk mengetahui kecepatan waktu tiap, maka digunakan perangkat lunak penghitung kecepatan dalam bahasa pemograman visual basic. Hal ini digunakan untuk mendukung analisis kecepatan sorting data. Dengan mengatur perangkat lunak agar banyaknya jumlah n sesuai yang diinput secara acak, sehingga kemunculan data setiap kali program dijalankan tidak sama tidak dapat diprediksi interval data antara 100 10000. Pengujian dilakukan disebuah laptop dengan spesifikasi : platform Windows XP Profesional, processor AMD 2.2 GHz, 1GB DDR2 RAM. Gambar 2. Grafik Hasil Program Dari gambar hasil program diatas bisa kita lihat perbedaan waktu yang cukup jelas di antara tersebut. Pengurutan data dengan metode quicksort lebih cepat jika dibandingkan dengan mergesort. Hal ini dibuktikan dengan keadaan grafik waktu perbandingan quicksort mergesort. Dimana grafik waktu mergesort perubahannya lebih besar jika dibandingkan dengan quicksort. Penutup Pembuatan program komputer tidak terlepas dari, apalagi program yang dibuat sangat kompleks. Program dapat dibuat dengan mengabaikan, akan tetapi program tersebut memiliki akses yang lambat atau bahkan sangat lambat memakai memori yang banyak. Dalam menguji suatu, dibutuhkan beberapa kriteria untuk mengukur efisiensi, kriterianya memeriksa kebenaran dengan cara matematis menyederhanakannya. Dari paparan yang telah dikemukakan diatas, maka dapat dikatakan bahwa quicksort sesuai dengan namanya, lebih cepat jika dibandingkan dengan mergesort, untuk data bilangan bulat (integer) dari interval 100 10000. Gambar 1. Hasil Program 6
Daftar Bacaan Anonim. Ready-to-Run Visual Basic Algorithms, Second Edition. http://www.vbhelper.com/vba.htm,diakses 10 Nopember 2008. [2] Brassard G. and Bratley P., Fundamentals of Algorithmics. Prentice Hall, New Jersey, 1996. [3] Munir, Rinaldi. Algoritma Divide and Conquer. Institut Teknologi Bandung. Bandung 2004. [4] Sedgewick, Robert. Algorithms. Addison Wesley Publishing Company. 1983. [1] 7