Komleksitas Algoritma Quick Sort Fachrie Lantera NIM: 130099 Program Studi Teknik Informatika, Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung Jln. Ganesha 10, Bandung E-mail : if099@students.if.itb.ac.id Abstract Makalah ini membahas komleksitas algoritma dari Quick Sort yang meruakan algoritma engurutan. Dalam sebuah ermasalahan daat memunyai banyak algoritma enyelesaian. Algoritma enyelesaian tersebut tidak harus benar, tetai juga harus mangkus (efisien). Kemangkusan algoritma diukur dari waktu eksekusi dan kebutuhan ruang memori yang digunakan. Algoritma yang efisien adalah algoritma yang meminimumkakan waktu eksekusi dan kebutuhan ruang memori. Kata Kunci : efisien, komleksitas algoritma, komleksitas waktu asimtotik. dieksekusi dikarenakan arsitektur komuter C lebih baik dibandingkan arsitektur komuter D. Oleh karena itu kita memerlukan model abstrak engukuran waktu/ruang yang bebas dari ertimbangan arsitektur komuter dan comiler bahasa emrograman. Besaran yang diakai untuk menerangkan model abstrak engukuran waktu/ruang ini adalah komleksitas algoritma. Ada dua macam komleksitas algoritma, yaitu : komleksitas waktu dan komleksitas ruang. Komleksitas waktu disimbolkan dengan T(n) dan komleksitas ruang S(n). Komleksitas waktu, T(n), diukur dari jumlah tahaan komutasi yang dibutuhkan untuk menjalankkan algoritma sebagai fungsi dari ukuran masukan n. Komlesitas ruang, S(n), diukur dari memori yang digunakan oleh struktur data yang terdaat di dalam algoritma sebagai fungsi dari ukuran masukan n. Dengan menggunakan besaran komleksitas waktu/ruang algoritma, kita daat menentukan laju eningkatan waktu (ruang) yang dierlukan algoritma dengan meningkatnya ukuran masukan n. 1 Di dalam sebuah algoritma terdaat bermacam jenis oerasi: 1. Pendahuluan 1.1 Komleksitas Algoritma Kita sering bertanya mengenai algortima mana yang lebih baik dalam menyelesaikan masalah tertentu. Untuk menjawab masalah di atas tentunya ada hal yang harus diukur suaya kita bisa menilai aakah algoritma tersebut lebih baik atau tidak. Jika kita mencoba mengeksekusi rogram dengan algoritma A ada komuter C dan rogram ada algoritma B ada komuter D. Kita tidak daat mengatakan algoritma A lebih baik dibandingkan dengan algoritma B hanya karena rogram dengan algoritma A jauh lebih ceat dieksekusi. Komuter-komuter yang kita gunakan tidak semua memiliki arsitektur yang sama. Sehingga waktu komutasinya un juga berbeda. Comiler bahasa emrograman un juga berbeda-beda dalam menghasilkan kode mesin. Sehingga ada kasus di atas, bisa jadi rogram dengan algoritma A jauh lebih ceat - Oerasi baca/tulis, - Oerasi aritmetika (+, -, *, /) - Oerasi engisian nilai (assignment) - Oerasi engaksesan elemen larik - Oerasi emanggilan fungsi/rosedur - dll Dalam raktek, kita hanya menghitung jumlah oerasi khas (tiikal) yang mendasari suatu algoritma. 1.2 Komleksitas Waktu Asimtotik Terkadang kita tidak terlalu membutuhkan komleksitas waktu yang detil dari sebuah algoritma. Yang kita butuhkan terkadang adalah besaran komleksitas waktu yang menghamiri komleksitas waktu yang sebenarnya. Komleksitas waktu yang demikian disebut komleksitas waktu asimtotik yang dinotasikan dengan O (baca : O-Besar ). Komleksitas waktu asimtotik dieroleh dengan mengambil term yang memberikan komleksitas waktu terbesar. Misalkan T(n) = 3n 3 + 2n 2 + n + 1. Maka
komleksitas waktu asimtotiknya adalah O(n 3 ). Karena n 3 yang memberikan komleksitas waktu terbesar. Kita tidak erlu menambahkan engali dari term dari n 3. Kelomok Algoritma O(1) O(log n) O(n) O(n log n) O(n 2 ) O(n 3 ) O(2 n ) O(n!) Nama konstan logaritmik lanjar n log n kuadratik kubik eksonensial faktorial Tabel 1. Pengelomokan Algoritma Berdasarkan Notasi O-Besar Urutan sektrum komleksitas waktu algoritma adalah : O(1) < O(log n) < O(n)< O(nlog n) < O(n 2 ) < O(n 3 ) <... < O(2 n ) < O(n!) 2 Algoritma Quick Sort Quick sort juga disebut juga dengan artition Exchange sort. Disebut Quick Sort, karena terbukti memunya average behaviour yang terbaik di antara metoda engurutan yang ada. Disebut Partition Exchange Sort karena konsenya membuat artisi-artisi, dan sort dilakukan er artisi. Teknik memartisi tabel: (ii) ilih x {a1, a2,..., an} sebagai elemen ivot, indai (scan) tabel dari kiri samai ditemukan elemen a x (iii) indai tabel dari kanan samai ditemukan elemen a x ertukarkan a <-> a (v) algortima olinominal algortima eksonensial ulangi (ii) dari osisi +1, dan (iii) dari osisi -1, samai kedua emindaian bertemu di tengah tabel. Dalam algoritma uick sort, emilihan ivot adalah hal yang menentukan aakah algoritma uick sort tersebut akan memberikan erforma terbaik atau terburuk. Berikut beberaa cara emilihan ivot : 1. = elemen ertama, elemen terakhir, atau elemen tengah tabel. Cara ini hanya bagus jika elemen tabel tersusun secara acak, tetai tidak bagus jika elemen tabel semula sudah terurut. Misalnya, jika elemen tabel semula menurun, maka semua elemen tabel akan terkumul di uatabel kana. 2. diilih secara acak dari salah satu elemen tabel. Cara ini baik, tetai mahal, sebab memerlukan biaya (cost) untuk embangkitan rosedur acak. Lagi ula, ita tidak mengurangi komleksitas waktu algoritma. 3. = elemen median tabel. Cara ini aling bagus, karena hasil artisi menghasilkan dua bagian tabel yang berukuran seimbang (masingmasing n/2 elemen). Cara ini memberkan komleksitas waktu yang minimum. Masalahnya, mencari median dari elemen tabel yang belum terurut adalah ersoalan tersendiri. Berikut Pseudo-code Quick Sort : Procedure QuickSort (inut/outut a : array [1..n] of integer, inut i,j : integer ) {mengurutkan tabel a[i..j] dengan algoritma uick sort. Masukkan: Tabel a[i..j] yang sudah terdefinisi elemen-elemennya. Keluaran: Tabel a[i..j] yang terurut menaik. } Deklarasi : k : integer; Algoritma : if (i<j) then Partisi(a,i,j,k) { Ukuran (a) > 1} QuickSort(a,i,k) QuickSort(a,k+1, j) Endif Procedure Partisi (inut/outut: a : array[1..n] of integer, inut i, j : integer, outut : integer) {Membagi tabel a[i..j] menjadi uatabel a[i..] dan a[+1..j] Keluaran uatabel a[i..] dan uatabel a[+1..j] Sedemikian sehingga elemen tabel a[i..] lebih kecil dari elemen tabel a[+1..j] } Deklarasi :, tem : integer Algoritma : <- A[(i+j) div 2] { ivot = elemen tengah } <- i <- j
reeat while a[] < ivot do <- + 1 endwhile { A >= ivot } while a[] > ivot do <- 1 endwhile { A >= ivot } 4 (<, berhenti). if ( ) then { ertukarkan a[] dengan a[]} tem <- a[] a[] <- a[] a[] <- tem { tentukan awal emindaian berikutnya} <- + 1 <- - 1 endif until > Hasil artisi ertama adalah : Kiri : (< ) 4 Kanan ( ) Misalkan tabel yang akan diurut adalah berikut : 4 Langkah-langkah emartisian tabel.. ivot ivot 4 4 4 4 Jika dilanjutkan. Maka rosesnya adalah sebagai berikut: - Rekursif untuk tabel artisi kiri a 4 Langkah-langkah emartisian tabel ivot ivot 4 ivot 4 ivot (<, berhenti). Kiri (< ) 4 4 4 4 Kanan ( ) Rekursif untuk tabel artisi kanan a.1
(<, berhenti). (<, berhenti). Kiri (< ) ivot 1 3 3 Kiri (<) Kanan ( ) Kanan ( ) Rekursif untuk tabel artisi kanan a.1.1 (<, berhenti). Rekursif Untuk Tabel Partisi Kanan b.1 Rekursif untuk tabel artisi kanan a.1.1 (<, berhenti). 4 Tabel telah terurut menaik. - Rekursif untuk tabel artisi kanan b ivot 2.1 Komleksitas Algoritma Quick Sort Terdaat 3 kemungkinan kasus dari erforma algoritma uick sort ini yaitu terbaik (best case), terburuk (worst case), dan rata-rata (average case). 2.1.1 Kasus Terbaik (Best Case) Kasus terbaik terjadi bila ivot adalah elemen median sedemikian sehingga kedua ua-tabel berukuran relatif sama setia kali emartisian. Menentukan median tabel adalah ersoalan tersendiri, sebab kita harus menentukan median dari tabel yang belum terurut. (ii) & (iii)
Pohon berikut menggambarkan ua-tabel kiri dan uatabel kanan setia kali emartisian samai menghasilkan tabel terurut : n n/2 n/2 n/4 n/4 n/4 n/4 n/8 n/8 n/8 n/8 n/8 n/8 n/8 n/8........................ 1 1 1 1...1 1 1... 1 1 1... 1 1...1 111 111 Komleksitas waktu engurutan dihitung dari jumlah erbandingan elemen-elemen tabel : T min (n) = waktu artisi + waktu emanggilan rekurens (Quick Sort untuk dua bagian tabel hasil artisi) Kasus ini terjadi bila ada setia artisi ivot selalu elemen masksimum (atau elemen minimum) tabel. Hal ini menyebabkan embagian menghasilkan uatabel kiri (atau kanan) berukuran satu elemen dan uatabel kanan (atau kiri) berukuran n 1 elemen. Keadaan kedua ua tabel ini digambarkan sebagai ohon berikut: n 1 n-1 1 n-2 1 n-3... 2 1 1 Komleksitas rosedur artisi adalah t(n) = cn = O(n), sehingga komleksitas algoritma uick sort menjadi (dalam bentuk relasi rekurens) : T(n) =,, Penyelesaian ersamaan rekurens : T(n) = 2T(n/2) + cn = 2(2T(n/4) + cn/2) + cn = 4(T(n/4) + 2cn = 4(2(T(n/8) + cn/4) + 2cn = 8T(n/8) + 3cn =.. = 2 k (T(n/2 k ) + kcn Persamaan terakhir daat diselesaikan karena basis rekursif adalah ketika ukuran tabel = 1, n/2 k = 1 k = 2 log n sehingga T(n) = nt(1) + cn 2 log n = na + c n 2 log n = O(n 2 log n) 2.1.2 Kasus Terburuk (Worst Case) Komleksitas waktu engurutan : T(n) = T(n) = cn + T(n-1),, = bn + { b.(n-1) + T(n-2) } = bn + b(n-1) + {b(n-2) + T(n-3)} =... = b(n+(n-1)+(n-2)..+2) +a =b{(n-1)(n+2)/2} + a = bn 2 /2 + bn/2 + ((a-b) = O(n 2 ) 2.1.3 Kasus Rata-Rata Kasus ini terjadi jika ivot diilih secara acak dari elemen tabel, dan eluang setia elemen diilih menjadi ivot adalah sama. Komleksitas waktunya adalah T avg (n) = O(n 2 log n). Pembuktiannya lebih rumit. 3 Kesimulan Algoritma Quick Sort daat kita ketahui sebagai algoritma yang handal dalam melakukan engurutannya dari besarnya waktu asimtotik yang dierlukan aabila diberikan n buah masukan. Dimana komleksitas algoritma dari algoritma ini memiliki 3 kasus yaitu O(n 2 log n) untuk kasus terbaik, O(n 2 ) untuk kasus terburuk, dan O(n 2 log n) untuk kasus
rata-rata. Komleksitas tersebut diengaruhi karena emilihan ivot. Oleh karena itu roses emilihan ivot erlu diertimbangkan. yang terkadang digunakan yaitu elemen tengah dari tabel yang akan diurut. DAFTAR PUSTAKA [1] Munir, Rinaldi. (200). Diktat Kuliah IF213 Matematika Diskrit Edisi Keemat. Deartemen Teknik Informatika, Institut Teknologi Bandung. [2] Munir, Rinaldi. (2007). Diktat Kuliah IF221 Strategi Algoritmik, Deartemen Teknik Informatika, Institut Teknologi Bandung. [3] Moh. Sjukani. (2007). Struktur Data (Algoritma & Struktur Data 2) dengan C, C++,Mitra Wacana Media. Jakarta