ANALISIS WAKTU ALGORITMA QUICKSORT DAN …e-dokumen.kemenag.go.id/files/7iFskaSb1342421271.pdf ·...

7
1 ANALISIS WAKTU ALGORITMA QUICKSORT DAN MERGESORT Oleh : Yahfizham,ST.,M.Cs Abstrak Sistem komputer yang terdiri dari perangkat keras, perangkat lunak dan perangkat manusia yang saling berinteraksi dan bekerja sama sehingga mencapai suatu tujuan tertentu. Tujuan yang dimaksud adalah penyelesaian suatu pekerjaan atau persoalan dan mungkin saja menganalisis suatu peluang. Peran algoritma dalam perangkat lunak atau pemograman begitu penting, sehingga perlu memahami konsep dasar algoritma. Begitu banyak logika pemograman yang telah diciptakan, untuk kasus yang umum dan juga khusus. Algoritma Quick sort dan merge sort merupakan suatu strategi pengurutan (indexing) data, yang termasuk pada metode bagi dua dan selesaikan (divide-and-conquer). Algoritma dibutuhkan agar suatu permasalahan dapat diselesaikan dengan lebih efektif dengan sedikit sumber daya yang dilibatkan dan lebih efisien dengan durasi waktu yang dibutuhkan sedikit (cepat). Key word : algoritma, divide and conquer, quick sort dan merge sort. Pendahuluan Sejarah kemunculan algoritma sejalan dengan kemunculan teknologi komputer. Analisis algoritma menjadi topik bahasan utama dalam disiplin ilmu komputer. Seorang programmer komputer telah lama menggunakan algoritma 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 adalah 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 langkah- langkah untuk menyelesaikan suatu pekerjaan atau penyelesaian suatu masalah secara lebih efektif dengan sedikit sumber daya yang dilibatkan dan lebih efisien dengan durasi waktu yang dibutuhkan sedikit (cepat). Secara bebas, kita menganggap algoritma kurang lebih sama dengan suatu prosedur yang sering dikerjakan atau dilakukan sehari-hari.

Transcript of ANALISIS WAKTU ALGORITMA QUICKSORT DAN …e-dokumen.kemenag.go.id/files/7iFskaSb1342421271.pdf ·...

1

ANALISIS WAKTU ALGORITMA QUICKSORT DANMERGESORT

Oleh : Yahfizham,ST.,M.Cs

Abstrak

Sistem komputer yang terdiri dari perangkat keras,perangkat lunak dan perangkat manusia yang salingberinteraksi dan bekerja sama sehingga mencapai suatutujuan tertentu. Tujuan yang dimaksud adalahpenyelesaian suatu pekerjaan atau persoalan dan mungkinsaja menganalisis suatu peluang. Peran algoritma dalamperangkat lunak atau pemograman begitu penting,sehingga perlu memahami konsep dasar algoritma. Begitubanyak logika pemograman yang telah diciptakan, untukkasus yang umum dan juga khusus. Algoritma Quick sortdan merge sort merupakan suatu strategi pengurutan(indexing) data, yang termasuk pada metode bagi dua danselesaikan (divide-and-conquer). Algoritma dibutuhkanagar suatu permasalahan dapat diselesaikan dengan lebihefektif dengan sedikit sumber daya yang dilibatkan danlebih efisien dengan durasi waktu yang dibutuhkan sedikit(cepat).

Key word : algoritma, divide and conquer, quick sort danmerge sort.

Pendahuluan

Sejarah kemunculan algoritmasejalan dengan kemunculan teknologikomputer. Analisis algoritma menjaditopik bahasan utama dalam disiplinilmu komputer. Seorang programmerkomputer telah lama menggunakanalgoritma untuk diterapkan pada sisteminformasi manajemen yangmenjalankan fungsi-fungsi akuntansiperusahaan yang disebut sistempemrosesan transaksi (transactioninformation system) atau sistempemrosesan data secara elektronik(Electronic Data Processing/EDP),yang kemudian berkembang menjadisistem pendukung pengambilankeputusan (Decision SupportSystem/DSS).

Algoritma adalah kumpulaninstruksi yang dibuat secara jelasterhadap penyelesaian suatu masalah.Kumpulan instruksi yang dimaksuddibangun dari suatu bahasapemograman yang dimengerti olehkomputer. Kumpulan instruksi tersebutberupa tahapan-tahapan atau langkah-langkah untuk menyelesaikan suatupekerjaan atau penyelesaian suatumasalah secara lebih efektif dengansedikit sumber daya yang dilibatkandan lebih efisien dengan durasi waktuyang dibutuhkan sedikit (cepat). Secarabebas, kita menganggap algoritmakurang lebih sama dengan suatuprosedur yang sering dikerjakan ataudilakukan sehari-hari.

2

Contohnya adalah memasakberas, langkah-langkahnya adalahsebagai berikut: ambil tempat menanaknasi, masukkan beras secukupnyakedalam tempat tadi, bersihkan danmasukkan air sesuai takaran, masukkankedalam magic jar, colokkan ke listrikdan tekan tombolnya. Contoh lainketika kita hendak mengendarai sepedamotor, tahapan-tahapan yang kitalakukan adalah memeriksa posisikendaraan, melihat ban, memeriksakunci, menghidupkan mesin dan jalan.

French,C.S. (1984) menyatakansejumlah konsep yang mempunyairelevansi dengan masalah rancanganprogram yaitu kemampuan komputer,kesulitan dan ketepatan. Penerapan darikonsep tersebut biasanya digunakandalam rancangan algoritma. Dalammerancang sebuah algoritma, Fletcher(1991) memberikan beberapa cara ataumetode yaitu kumpulan perintah,ekspresi, tabel instruksi, programkomputer, kode semu dan flow chart,sedangkan Knuth (1973) menyarankanalgoritma fundamental yaitu input,proses dan output.

Dalam analisis algoritmaterdapat bagian-bagian yang dapatdianalisis, yaitu kecepatan waktu,kapasitas biaya dan kapasitas ruang.Ketiganya menggunakan notasi O (bigO). Divide and Conquer adalahmetode pemecahan masalah yangbekerja dengan membagi masalah(problem) menjadi beberapa sub-masalah (sub-problem) yang lebihkecil, kemudian menyelesaikanmasing-masing sub-masalah secaraindependen, dan akhirnyamenggabungkannya.

Algoritma quicksort danmergesort diaplikasikan dengan caramembagi tabel menjadi bagian kiri danbagian kanan, perulangan dilakukansecara rekursif (reccurent). Kemudianmenggabungkan hasil pengurutan

masing-masing bagian menjadi tabelsemula yang sudah terurut. Prosespembagiannya mudah karena hanyamemerlukan proses pembagian biasa.Akan tetapi proses penggabungannyamenjadi sulit karena unsur-unsur padatabel kecil belum tentu terurut sehinggapada setiap tahap penggabungan, harusterus dilakukan pembandingan danpengurutan kembali.

Algoritma pengurutan (sortingalgorithm) adalah algoritma yangmenyimpan suatu list pada suatu urutantertentu, biasanya membesar ataumengecil, biasanya digunakan untukmengurutkan angka ataupun huruf.Efisiensi pada pengurutan inidiperlukan untuk mengoptimalkankecepatan pemrosesan. Semakin efisiensuatu algoritma, maka pada saatdieksekusi dan dijalankan akanmenghabiskan waktu yang lebih cepatdan bisa menerima lebih banyakmasukan dari user.

Terdapat banyak algoritmapengurutan yang sudah dibuat sepertiselection sort, shell sort, heapsort,bubble sort, insertion sort, radix sort,quicksort, dan mergesort. Yangmenjadi domain pada kesempatan iniadalah mencoba untuk menganalisiskecepatan waktu dari algoritmaquicksort dan mergesort, dengan sekaliinputan data berupa bilangan bulat(integer) dalam suatu list atau arraysecara acak (random).

Konsep Dasar Algoritma Quicksort

Algoritma quicksort pertamakali dibuat oleh C.A.R.Hoare tahun1960. Pada masalah penyortingan(sorting) data bilangan bulat (integer)secara terindeks pada suatu list atauarray dari bilangan yang paling besarsampai ke bilangan yang paling kecilatau sebaliknya. Tidak hanya dapat

3

diterapkan pada pengindeksan bilangansaja, namun juga untuk pengindeksanhuruf (abjad) dari A ke Z atausebaliknya. Algoritma ini sangat baikditerapkan pada kasus pengindeksankumpulan kata (library sort utility) ataukumpulan bilangan atau kombinasinya.

Algoritma ini mengikuti langkah– langkah sebagai berikut :1. Divide

Memilah rangkaian data menjadidua sub-rangkaian A[p…q-1] danA[q+1…r] dimana setiap unsurA[p…q-1] adalah kurang dari atausama dengan A[q] dan setiap unsurpada A[q+1…r] adalah lebih besaratau sama dengan unsur pada A[q].A[q] disebut sebagai unsur pivot.Perhitungan pada unsur qmerupakan salah satu bagian dariprosedur pemisahan.

2. ConquerMengurutkan unsur pada sub-rangkaian secara rekursif Padaalgoritma quicksort, langkah”kombinasi” tidak di lakukankarena telah terjadi pengurutanunsur – unsur pada sub-array.Quicksort termasuk padapendekatan sulit membagi, mudahmenggabung (hard split/easy join).Cara pemilihan pivot:1) Pivot = unsur pertama/unsur

terakhir/unsur tengah tabel2) Pivot dipilih secara acak dari

salah satu unsur tabel.Pivot = unsur median tabel

Kompleksitas Waktu Quicksort

Kasus terbaik (best case) terjadibila pivot adalah unsur mediansedemikian sehingga kedua tabelberukuran relatif sama setiap kalipempartisian.

Didapatkan kompleksitas waktunyaadalah

Sehingga menjadi bentuk yang lebihsederhana

Kasus terburuk (worst case) terjadi bilapada setiap partisi pivot selalu terpilihunsur maksimum atau unsurminimumnya. Kasus ini terjadi jikatabel sudah terurut menaik/menurun

Didapatkan kompleksitas waktunyaadalah

Sehingga menjadi bentuk yang lebihsederhana

Kasus rata-rata (average case) terjadijika pivot dipilih secara acak dari unsurtabel, dan peluang setiap unsur dipilihmenjadi pivot adalah sama. Rata-ratajumlah tingkatan perbandingan diatassemua permutasi urutan masukan dapatdiperkirakan dengan teliti denganpemecahan hubungan perulangan

4

atauTavg (n) = O(n n)= O(n log n)

Implementasi Quicksort

Penerapan algoritma quicksortmenggunakan antar muka bahasapemograman berbasis visual yaituvisual basic 6.0 dengan kumpulanperintah seperti dibawah ini:

Public Sub Quicksort(list() AsInteger, ByVal min As Long, ByValmax As Long)Dim med_value As LongDim hi As LongDim lo As LongDim i As Long If min >= max ThenExit Subi = Int((max - min + 1) * Rnd +min) med_value = list(i)

list(i) = list(min)lo = minhi = maxDo

Do While list(hi) >= med_valuehi = hi - 1If hi <= lo Then Exit Do

LoopIf hi <= lo Then

list(lo) = med_valueExit Do

End Iflist(lo) = list(hi)lo = lo + 1

Do While list(lo) < med_valuelo = lo + 1If lo >= hi Then Exit Do

LoopIf lo >= hi Then

lo = hilist(hi) = med_valueExit Do

End Iflist(hi) = list(lo)

LoopQuicksort list(), min, lo - 1Quicksort list(), lo + 1, maxEnd Sub

Konsep Dasar AlgoritmaMergesort

Deskripsi dari algoritma inidirumuskan dalam 3 langkah berpoladivide-and-conquer. Berikut adalahpenjelasan langkah kerja dari mergesort.1. Divide

Memilah unsur – unsur darirangkaian data menjadi dua bagian.

2. ConquerSetiap bagian dengan memanggilprosedur mergesort secara rekursif

3. KombinasiMengkombinasikan dua bagiantersebut secara rekursif untukmendapatkan rangkaian databerurutan

Proses rekursi berhenti jikamencapai unsur dasar. Hal ini terjadibilamana bagian yang akan diurutkanmenyisakan tepat satu unsur. Sisapengurutan satu unsur tersebutmenandakan bahwa bagian tersebuttelah terurut sesuai rangkaian.Mergesort termasuk pada pendekatanmudah membagi, susah menggabung(easy split/ hard join).

Kompleksitas WaktuMergesort

Kasus terbaik (best case) terjadiapabila data sudah terurut, sehinggapada saat kombinasi tidak perlumengurutkan kembali.

5

Didapatkan kompleksitas waktunyaadalah

Sehingga menjadi bentuk yang lebihsederhana

Kasus terburuk (worst case)terjadi bila data terkondisi seperti padagambar berikut.

Didapatkan kompleksitas waktunyaadalah

Sehingga menjadi bentuk yang lebihsederhana

Kasus rata-rata (average case) terjadijika pivot dipilih secara acak darielemen tabel.Tavg (n) = O(n n)= O(n log n)

ImplementasiMergesort

Penerapan algoritma mergesortmenggunakan antar muka bahasapemograman berbasis visual yaituvisual basic 6.0 dengan kumpulanperintah seperti dibawah ini:

Public Sub Merge(list() As Integer,ByVal bawah As Long, ByValtengah As Long, ByVal atas AsLong)

Dim temp_array() As IntegerDim temp As IntegerDim vektorA As LongDim vektorB As LongDim vektorUtama As LongReDim temp_array(bawah To atas)

CopyMemorytemp_array(bawah), list(bawah),(atas - bawah + 1) *Len(list(bawah))

vektorA = bawahvektorB = tengah + 1vektorUtama = bawahDo While (vektorA <= tengah)

And (vektorB <= atas)If (temp_array(vektorA) <=

temp_array(vektorB)) Thenlist(vektorUtama) =

temp_array(vektorA)vektorA = vektorA + 1

Elselist(vektorUtama) =

temp_array(vektorB)vektorB = vektorB + 1

End IfvektorUtama = vektorUtama + 1

LoopIf vektorA <= tengah Then

CopyMemorylist(vektorUtama),temp_array(vektorA), (tengah -vektorA + 1) * Len(list(bawah))

End IfIf vektorB <= atas Then

CopyMemory list(vektorUtama),temp_array(vektorB), (atas -vektorB + 1) * Len(list(bawah))

End IfEnd SubPublic Sub MergeSort(list() AsInteger, ByVal first_index As Long,ByVal last_index As Long)Dim tengah As Long

If (last_index > first_index) Thentengah = (first_index +

last_index) \ 2MergeSort list, first_index,

tengahMergeSort list, tengah + 1,

last_indexMerge list, first_index, tengah,

last_indexEnd If

6

End SubPembahasan

Walaupun tiap algoritmapengurutan menawarkan perbedaanmetode dan sudut pandangpenyelesaian masalah yang berbeda,namun kompleksitas waktu yangdibutuhkan tetap menjadi masalahutama yang harus menjadipertimbangan untuk menentukanalgoritma mana yang lebih baik dantepat untuk digunakan. Untukmengetahui kecepatan waktu tiapalgoritma, maka digunakan perangkatlunak penghitung kecepatan algoritmadalam bahasa pemograman visualbasic. Hal ini digunakan untukmendukung analisis kecepatan sortingdata.

Dengan mengatur perangkatlunak agar banyaknya jumlah n sesuaiyang diinput secara acak, sehinggakemunculan data setiap kali programdijalankan tidak sama dan tidak dapatdiprediksi dan interval data antara 100 -– 10000. Pengujian dilakukan disebuahlaptop dengan spesifikasi : platformWindows XP™ Profesional, processorAMD™ 2.2 GHz, dan 1GB DDR2RAM.

Gambar 1. Hasil Program

Gambar 2. Grafik Hasil Program

Dari gambar hasil programdiatas bisa kita lihat perbedaan waktuyang cukup jelas di antara algoritma-algoritma tersebut. Pengurutan datadengan metode quicksort lebih cepatjika dibandingkan dengan mergesort.Hal ini dibuktikan dengan keadaangrafik waktu perbandingan quicksortdan mergesort. Dimana grafik waktumergesort perubahannya lebih besarjika dibandingkan dengan quicksort.

Penutup

Pembuatan program komputertidak terlepas dari algoritma, apalagiprogram yang dibuat sangat kompleks.Program dapat dibuat denganmengabaikan algoritma, akan tetapiprogram tersebut memiliki akses yanglambat atau bahkan sangat lambat danmemakai memori yang banyak. Dalammenguji suatu algoritma, dibutuhkanbeberapa kriteria untuk mengukurefisiensi algoritma, kriterianya adalahmemeriksa kebenaran algoritmadengan cara matematis danmenyederhanakannya.

Dari paparan yang telahdikemukakan diatas, maka dapatdikatakan bahwa algoritma quicksortsesuai dengan namanya, “lebih cepat”jika dibandingkan dengan mergesort,untuk data bilangan bulat (integer) dariinterval 100 – 10000.

7

Daftar Bacaan

[1] Anonim.”Ready-to-Run VisualBasic Algorithms, SecondEdition”. http://www.vb-helper.com/vba.htm,diakses10 Nopember 2008.

[2] Brassard G. and Bratley P.,“Fundamentals ofAlgorithmics”. PrenticeHall, New Jersey, 1996.

[3] Munir, Rinaldi. “Algoritma Divideand Conquer”. InstitutTeknologi Bandung.Bandung 2004.

[4] Sedgewick, Robert. “Algorithms”.Addison Wesley PublishingCompany. 1983.