2005 edhy sutanta makalah maret 2005 hal 51-57 integrasi

10

Upload: vudieu

Post on 21-Jan-2017

225 views

Category:

Documents


0 download

TRANSCRIPT

MENYIGI PENGGUNAAN METODE SHELLSORT DALAM PENGURUTAN DATA

Edhy Sutanta

Jurusan Teknik Informatika, Fakultas Teknologi Industri, Institut Sains & Teknologi AKPRIND Yogyakarta

Jl. Kalisahak 28, Komplek Balapan, Yogyakarta 55222 Phone: 0274-563029-121, Fax: 0274-563847, e-Mail: [email protected]

Abstract

Sorting is an important data operation on data processing. Many sorting algorithms was developed, there are straight selection, buble-sort (exchange sort), straight insertion, binary insertion, Shellsort (diminishing increment sort), quick sort (partition exchange sort), Radix sort and merge sort (two-ways merge sort). The aim of this research is analyzing the possibility of error of Shellsort on sorting algorithm and getting alternative solutions to repair the algorithm that make the valid data sorting. The research will analyze the cases of data sorting by Turbo Pascal. The results of this research showed that Shellsort algorithm using start interval N div 2 and comparing them on the value of data have got unvalid data sorting. So, it is two alternative solutions found from the research.

Keywords: sorting, Shellsort algorithm, N div 2.

Pendahuluan Pengurutan data atau sorting merupakan salah satu jenis operasi penting dalam pengolahan data. Hampir setiap saat dalam kehidupan sehari-hari, selalu dijumpai permasalahan-permasalahan yang harus diselesaikan dengan melibatkan operasi pengurutan data. Begitu pentingnya operasi tersebut, sehingga sampai saat ini telah banyak dikembangkan metode-metode pengurutan data. Pada dasarnya terdapat dua macam data urut, yaitu urut naik (ascending) dan urut turun (descending). Contoh sekumpulan data urut naik dan urut turun, adalah sebagai berikut :

Urut naik : 40 47 51 52 69 70 72 84 90 Urut turun : 90 84 72 70 69 52 51 47 40

Hingga saat ini telah dikenal beberapa metode pengurutan data, antara lain seleksi langsung (straight selection), gelembung (buble-sort atau exchange sort), penyisipan langsung (straight insertion), penyisipan biner (binary insertion), Shellsort (diminishing increment sort), quick sort (partition exchange sort), radix sort serta merge sort (two_way merge sort).

Penelitian ini akan menganalisis kemungkinan adanya kelemahan metode Shellsort, dan selanjutnya mencari alternatif perbaikan terhadap prosedur dalam metode tersebut, sehingga diperoleh jaminan bahwa penggunaan metode yang sudah diperbaiki tersebut akan memberikan hasil berupa data yang benar-benar urut. Hasil penelitian ini diharapkan memberikan masukan bagi pemrogram aplikasi agar terhindar dari kesalahan hasil operasi saat menerapkan metode Shellsort.

Tinjauan Pustaka Metode Shellsort (diminishing increment) pertama kali dikenalkan pada tahun 1959 oleh Donald L.Shell. Proses pengurutan data dengan metode ini secara ringkas dapat dijelaskan sebagai berikut ini. Untuk mengurutkan sebuah vektor yang memuat N elemen data secara ascending, mula-mula data pertama dibandingkan dengan data pada jarak tertentu dari data pertama tersebut, misal N/6 atau N-5, N-4, N-3, N-2, atau N-1. Jika data pertama lebih besar, maka posisi data saling ditukarkan. Berikutnya, data kedua dibandingkan dengan data pada jarak yang sama sebagaimana dilakukan pada data pertama. Lakukan pertukaran data jika diperlukan. Demikian seterusnya proses perbandingan dan pertukaran data dilakukan pada seluruh data (data ke-N) [6,7,8,11,13].

Pengurutan data secara ascending dengan metode Shellsort dapat dituliskan seperti di bawah ini.

[Pengurutan elemen menggunakan metode Shellsort. Masukan dinyatakan sebagai vektor K (belum terurutkan) dan N (banyak elemen). Keluaran adalah vektor K yang sudah dalam keadaan erurutkan.] Langkah 0 Baca vektor yang akan diurutkan (dalam program utama) Langkah 1 Tentukan: JARAK = N div 2 Langkah 2 Kerjakan langkah-3 selama JARAK > 0 Langkah 3 Kerjakan langkah 4 dan langkah 5 untuk I=1 sampai N-JARAK Langkah 4 Tentukan J = I + JARAK Langkah 5 Test: apakah K[I] > K[J] ? Jika ya, tukarkan nilai kedua elemen ini Langkah 6 Tentukan JARAK = JARAK div 2 Langkah 7 Selesai

Metodologi Penelitian Penelitian dilakukan dengan cara pengujian contoh-contoh kasus pengurutan data menggunakan simulasi program aplikasi komputer dengan bahasa Turbo Pascal. Langkah-langkah yang dilakukan dalam penelitian ini adalah:

1. Memahami prosedur pengurutan data dengan metode Shellsort dari berbagai literatur dan referensi

2. Mengembangkan program aplikasi komputer sesuai dengan prosedur dalam metode Shellsort yan dikenal selama ini

3. Menguji program aplikasi untuk beberapa kasus pengurutan data yang berbeda 4. Menganalisis kemungkinan terjadinya kesalahan hasil operasi pengurutan data 5. Mengembangkan alternatif perbaikan prosedur metode Shellsort 6. Menguji prosedur hasil perbaikan untuk beberapa kasus pengurutan data 7. Menyusun dokumentasi laporan penelitian

Analisis dan Pembahasan Perancangan Program Aplikasi Untuk mempermudah analisis dalam penelitian ini, perlu dikembangkan alat bantu berupa program aplikasi komputer yang akan dikembangkan dengan bahasa Turbo Pascal. Program aplikasi dibuat dalam dua versi, yaitu versi pertama untuk prosedur asli dan versi kedua untuk hasil perbaikan. Untuk masing-masing versi, program aplikasi dirancang dalam tiga modul sebagai berikut: 1. INPUT DATA, modul ini berfungsi untuk pemasukan data sumber 2. PROSES, modul ini berfungsi untuk proses pengurutan data secara ascending 3. CEK HASIL, modul ini berfungsi untuk menampilkan informasi pengecekan hasil pengurutan data.

Bagian ini mempunyai dua kemungkinan hasil, yaitu hasil proses pengurutan ascending sudah benar, yaitu jika hasil pengurutan data benar-benar memberikan hasil data urut ascending. Kemungkinan kedua adalah bahwa hasil pengecekan ternyata masih memuat adanya kesalahan hasil operasi, yaitu belum menghasilkan data urut ascending

Analisis Prosedur Metode Shellsort Versi Pertama Proses pengurutan data dengan metode Shellsort secara ringkas dapat dijelaskan sebagai berikut ini. Untuk mengurutkan sebuah vektor yang memuat N elemen data secara ascending, mula-mula data pertama dibandingkan dengan data pada jarak tertentu dari data pertama tersebut. Jarak yang digunakan pada langkah pertama umumnya adalah N div 2, artinya data pertama (=K[1]) akan dibandingkan dengan data pada urutan ke-N div 2 (=K[N div 2]). Jika K[1]>K[N div 2], maka posisi data saling ditukarkan. Berikutnya, K[2] dibandingkan dengan data pada jarak yang sama sebagaimana dilakukan pada data pertama, yaitu K[N div 2+1]. Lakukan pertukaran data jika K[2]<K[N div 2+1]. Demikian seterusnya proses perbandingan dan pertukaran data dilakukan pada seluruh data, hingga K[N]. Pada langkah kedua, proses perbandingan dan pertukaran data seperti di atas diulang kembali dengan jarak yang lebih kecil, yaitu N div 2-1. Untuk langkah ketiga perbandingan dilakukan dengan jarak N div

2-2. Demikian seterusnya, proses perbandingan dan pertukaran dilakukan dengan menggunakan jarak yang semakin diperkecil. Proses akan dihentikan hingga jarak perbandingan antar data sama dengan satu (JARAK=1). Dalam kondisi demikian ini, maka semua data dalam vektor N telah selesai diproses. Untuk menguji validitas prosedur dalam metode Shellsort versi pertama yaitu yang dikenal selama ini, maka diuji untuk 100 kasus pengurutan data numerik. Hasil pengujian ini menunjukkan bahwa dalam contoh kasus pengurutan data dalam vektor K yang memuat 7 elemen data numerik, yaitu:

7 3 2 5 4 1 6 Selanjutnya, vektor K akan diurutkan secara ascending menggunakan prosedur Shellsort. JARAK yang digunakan pada langkah pertama adalah N div 2 atau 9 div 2 = 4. Langkah pengurutannya adalah sebagai berikut: Langkah 1:

JARAK : 7 div 2 = 3 Data : 7 3 2 5 4 1 6 Dengan jarak 3, maka akan diperoleh hasil sebagai berikut: Data : 5 3 1 6 4 2 7

Langkah 2: JARAK : 3-1 = 2 Data : 5 3 1 6 4 2 7 Dengan jarak 2, maka akan diperoleh hasil sebagai berikut: Data : 1 3 4 2 5 6 7

Langkah 3: JARAK : 2-1 = 1 Data : 1 3 4 2 5 6 7 Dengan jarak 3, maka akan diperoleh hasil sebagai berikut: Data : 1 3 2 4 5 6 7

Berdasarkan contoh di atas, maka ternyata dijumpai adanya kesalahan hasil pengurutan pada vektor K. Hasil akhir yang diperoleh adalah vektor baru yang memiliki urutan sebagai berikut:

1 3 2 4 5 6 7 Hasil yang benar dan seharusnya diperoleh adalah:

1 2 3 4 5 6 7 Terlihat, bahwa elemen data 3 menempati pada urutan kedua dan elemen data 2 justru menempati urutan ketiga. Seharusnya elemen data 2 menempati pada urutan kedua dan elemen data 3 menempati urutan ketiga. Kasus ini menunjukkan bahwa penggunaan prosedur Shellsort yang umumnya digunakan selama ini, yaitu menggunakan jarak N div 2 sebagai jarak perbandingan pada langkah pertama, (N div 2)-1 sebagai jarak perbandingan pada langkah kedua, (N div 2)-2 sebagai jarak perbandingan pada langkah ketiga, dan seterusnya hingga akhirnya proses dihentikan setelah JARAK=1 selesai diproses, ternyata masih memberikan hasil yang salah.

Permasalahan dan Alternatif Perbaikan Penyebab terjadinya kesalahan hasil pengurutan dengan menggunakan metode Shellsort dalam contoh kasus di atas adalah penetapan jarak perbandingan antar data, utamanya pada penetapan jarak pada langkah pertama. Oleh karena itu, maka solusi perbaikan yang dilakukan adalah difokuskan pada penyebab terjadinya kesalahan tersebut. Alternatif perbaikan yang dapat dilakukan untuk menghindari kesalahan hasil pengurutan menggunakan metode Shellsort adalah sebagai berikut [9,10]: 1. Jarak perbandingan adalah dimulai pada nilai ((N div 2)+1) bukan (N div 2), pada langkah

selanjutnya (N div 2), ((N div 2)-1), ((N div 2)-2) dan seterusnya

2. Jarak perbandingan untuk langkah pertama adalah dimulai pada nilai (N-1) bukan (N div 2), pada langkah selanjutnya (N-2), (N-3), dan seterusnya

Alternatif 1 dan alternatif 2 dapat diimplementasikan ke dalam program aplikasi dengan modifikasi prosedur pengurutan. Prosedur Perbaikan Alternatif 1 Algoritma prosedur perbaikan alternatif 1 adalah sebagai berikut [9]: Masukan vektor K yang memuat N buah data yang akan diurutkan. Data-data yang akan diurutkan dibaca sebagai K.

1. Mulai 2. Tentukan harga awal jarak perbandingan data

JARAK = (N div 2)+1 3. Proses berulang langkah-4 s/d langkah-7

While JARAK >= 1 4. Proses berulang langkah-5 s/d langkah-6 untuk mengurutkan data

For I = 1 To N-JARAK 5. Tentukan

J = I + JARAK 6. Bandingkan antar data

If K[I] > K[J] Jika ya, tukarkan posisi kedua data

BANTU = K[I] K[I] = K[J] K[J] = BANTU

7. Tentukan jarak baru untuk langkah berikutnya JARAK = JARAK-1

8. Cetak hasil 9. Selesai

Prosedur Perbaikan Alternatif 2 Algoritma prosedur perbaikaan alternatif 2 adalah sebagai berikut [9]: Masukan vektor K yang memuat N buah data yang akan diurutkan. Data-data yang akan diurutkan dibaca sebagai X.

1. Mulai 2. Tentukan harga awal jarak perbandingan data

JARAK = N-1 3. Proses berulang langkah-4 s/d langkah-7

While JARAK >= 1 4. Proses berulang langkah-5 s/d langkah-6 untuk mengurutkan data

For I = 1 To N-JARAK 5. Tentukan

J = I + JARAK 6. Bandingkan antar data

If K[I] > K[J] Jika ya, tukarkan posisi kedua data

BANTU = K[I] K[I] = K[J] K[J] = BANTU

7. Tentukan jarak baru untuk langkah berikutnya JARAK = JARAK-1

8. Cetak hasil 9. Selesai

Pengujian Prosedur Perbaikan Alternatif 1 Untuk menguji validitas prosedur perbaikan alternatif 1, maka contoh pengurutan data yang salah sebelumnya akan diselesaikan menggunakan alternatif 1. Vektor K yang akan diurutkan memuat 7 elemen data numerik, yaitu:

7 3 2 5 4 1 6 Secara ringkas, prosedur pengurutan data secara ascending menggunakan prosedur perbaikan alternatif 1 ditampilkan dalam Tabel I.

Tabel I. Contoh pengurutan data ascending dengan alternatif 1 Iterasi ke JARAK Hasil proses

0 1 2 3 4

- 4 3 2 1

7 3 2 5 4 1 6 4 1 2 5 7 3 6 4 1 2 5 7 3 6 2 1 4 3 6 5 7 1 2 3 4 5 6 7

Hasil perbaikan prosedur pada alternatif 1 selanjutnya juga diuji untuk 100 kasus pengurutan data numerik random, dan menunjukkan bahwa hasil operasi pengurutan data telah memberikan hasil yang benar.

Pengujian Alternatif 2 Untuk menguji validitas prosedur perbaikan alternatif 2, maka contoh pengurutan data yang salah sebelumnya akan diselesaikan menggunakan alternatif 2. Vektor K yang akan diurutkan memuat 7 elemen data numerik, yaitu:

7 3 2 5 4 1 6 Secara ringkas, prosedur pengurutan data secara ascending menggunakan prosedur perbaikan alternatif 2 ditampilkan dalam Tabel II.

Tabel II. Contoh pengurutan data ascending dengan alternatif 2 Iterasi ke JARAK Hasil proses

0 1 2 3 4 5 6

- 6 5 4 3 2 1

7 3 2 5 4 1 6 6 3 2 5 4 1 7 1 3 2 5 4 6 7 1 3 2 5 4 6 7 1 3 2 5 4 6 7 1 3 2 5 4 6 7 1 2 3 4 5 6 7

Hasil perbaikan prosedur pada alternatif 1 selanjutnya juga diuji untuk 100 kasus pengurutan data numerik random, dan menunjukkan bahwa hasil operasi pengurutan data telah memberikan hasil yang benar.

Implementasi Program Aplikasi Implementasi ke dalam program aplikasi komputer untuk alternatif 1 dan alternatif 2 dapat dilakukan dengan cara melakukan modifikasi pada nilai variabel JARAK yang digunakan pada langkah pertama. Sedangkan bagian lain relatif sama dengan metode Shellsort versi pertama. Selanjutnya, hasil implementasi program aplikasi untuk alternatif 1 dan alternatif 2 dapat saling dibandingkan. Alternatif 1 memiliki kelebihan dalam hal kecepatan. Cacah proses perulangan dalam alternatif 1 lebih sedikit dibandingkan alternatif 2. Hal ini berarti, bahwa efisiensi waktu proses pengurutan alternatif 1 lebih baik dibandingkan alternatif 2. Namun demikiam, alternatif 1 relatif kurang aman dibandingkan alternatif 2. Sekalipun alternatif 2 lebih lambat dan tidak efisien, namun alternatif 2 jauh lebih aman dibandingkan alternatif 1. Dalam kondisi cacah data sangat besar, maka alternatif 1 lebih baik digunakan daripada alternatif 2. Dalam hal waktu proses dapat diabaikan (bukan menjadi permasalahan utama), maka alternatif 2 lebih baik dibandingkan alternatif 1.

Kesalahan hasil pengurutan data dengan metode Shellsort versi pertama yang dikenal selama ini juga bisa terjadi pada pengurutan descending, dan perbaikannya dapat dilakukan dengan cara yang sama dengan alternatif solusi 1 dan 2, tetapi penukaran akan dilakukan jika nilai data pada urutan lebih awal kurang dari nilai data pada urutan yang lebih akhir. Prosedur perbaikan alternatif 1 dan alternatif 2 selanjutnya juga dapat dikembangkan untuk berbagai macam tipe data, tidak terbatas untuk data numerik, serta untuk pengurutan data secara ascending maupun descending. Kesimpulan Berdasarkan hasil penelitian ini, maka dapat disimpulkan sebagai berikut: 1. Prosedur Shellsort versi pertama yang umumnya digunakan, dengan menggunakan jarak awal N div

2 sebagai JARAK awal untuk perbandingan antar data ternyata masih mungkin menimbulkan kesalahan pada hasil operasi pengurutan.

2. Alternatif perbaikan yang dapat dilakukan untuk menghindari kesalahan tersebut adalah dapat dipilih salah satu di antara dua alternatif berikut: a. Alternatif 1:

Jarak perbandingan pertama kali dimulai pada posisi ((N div 2)+1) bukan (N div 2), pada langkah selanjutnya (N div 2), ((N div 2)-1), ((N div 2)-2) dan seterusnya

b. Jarak perbandingan untuk langkah pertama adalah dimulai pada nilai (N-1) bukan (N div 2), selanjutnya menggunakan jarak (N-2), (N-3), dan seterusnya

3. Alternatif 1 memiliki kelebihan dalam hal kecepatan dibandingkan alternatif 2. Namun demikian, alternatif 1 relatif kurang aman dibandingkan dengan alternatif 2. Sekalipun alternatif 2 relatif lebih lambat dan tidak efisien, namun alternatif 2 relatif lebih aman dibandingkan dengan alternatif 1. Dalam kondisi cacah data sangat besar, maka alternatif 1 lebih baik digunakan daripada alternatif 2. Dalam hal waktu proses bukan menjadi permasalahan utama, maka alternatif 2 akan lebih baik dibandingkan dengan alternatif 1.

Daftar Pustaka [1]. Behforooz, A. and Holoien, M.O. (1986), “Problem Solving and Structured Programming with

PASCAL”, Brooks/Cole Publishing Co., A Division of Wadworth Inc., California [2]. Brand, K.W. (1986), “Problem Solving with PASCAL”, Kent Publishing Co., A Division of

Wadworth Inc., USA [3]. Goodman, SE. and Hedetniemi, S.T. (1985), “Introduction to the Design and Analysis of

Algorithms”, Mc.Graw_Hill Int’l Book Co. [4]. Lipshutz, M.M. and Lipschutz, S. (1982), “Theory and Problems of Data Processing”, Schaum’s

Outline Series, McGraw_Hill Int’l Book Co. [5]. Lisanti, B., Mann, L. and Zlotnick, F. (1987), “Algorithms, Programming, Pascal”, Wardworth

Publishing Co., California [6]. Pranata, A. (2000), “Algoritma dan Pemrograman”, edisi 2, J&J Learning, Yogyakarta [7]. Santosa, P.I. (1989), “Pemrograman Pascal Tingkat Lanjut & Pengantar Struktur Data

Menggunakan Tubo Pascal 5.0”, edisi 1, cetakan ke-1, Andi Offset, Yogyakarta [8]. Santosa, P.I. (1994), “Program-Program Terapan Menggunakan Quick Basic”, edisi 2, Andi

Offset, Yogyakarta [9]. Sutanta, E. (2004), “Menyigi Penggunaan Metode Shellsort Dalam Pengurutan Data”, Laporan

Penelitian, IST AKPRIND, Yogyakarta [10]. Sutanta, E. (2004), “Algoritma: Teknik Penyelesaian Permasalahan Untuk Komputasi”, edisi 1,

Graha Ilmu, Yogyakarta [11]. Sutedjo, B. dan Michael AN (1997), “Algoritma dan Teknik Pemrograman, Konsep, Implementasi,

dan Aplikasi”, edisi 1, Andi, Yogyakarta [12]. Trembly, J.P. and Bunt, R.B. (1981), “An Introduction to Computer Science an Algorithmic

Approach”, Int’l Student edition, McGraw_Hill Int’l Book Co., Singapore [13]. Wirth, N. (1997), “Algoritma+Struktur Data=Program”, edisi 1 (terjemahan), Andi, Yogyakarta