Priority Queue Modularitas dan Abstraksi Data
2008 | Direktorat Pembinaan SMK
515 berprioritas paling tinggi lah yang
diperoleh. Dalam pengembangannya
pertama kali adalah memformulasikan konsep
abstraksnya tanpa harus memikirkan tipe datanya, apalagi implementasi
rincinya. Implementasinya sendiri dapat dilakukan dalam dua
representasi level bawah yang berbeda: array atau linked-list yang
dapat belakangan kita buat.
Banyak ditemukan dalam masalah-masalah penjadwalan,
misalnya untuk sistem antrian untuk pelayanan pasien dalam ruang
praktek dokter, penjadwalan pembayaran tagihan, dsb. Prioritas
bisa didefinisikan dalam beberapa aspek. PQ dapat digunakan juga
untuk pengurutan data kengan key data sebagai harga prioritas:
sejumlah data tak terurut dimasukkan ke dalam PQ lalu setelah semua
masuk satu demi satu data diambil dari PQ. Pada pengurutan menaik
maka data yang diambil ditaruh dari kanan ke kiri elemen-elemen array.
Pada pengurutan menurun harga key bisa kebalikan dari harga prioritas,
alterntifnya data yang di ambil satu demi satu di taruh dari kiri ke kanan
elemen-elemen array. Terdapat sejumlah metoda
operasi yang menjadi interface: bagi pemakai kelas obyek ini.
mengkonstruksikan PQ yang diinisialisasi kosong
PQ = new PriorityQueue;
mendapatkan ukuran jumlah item data dalam PQ,
n = PQ.size;
menyisipkan item baru dalam PQ, PQ.insertX;
bila PQ tidak kosong, menghapus item dengan prioritas tertinggi
dalam PQ X
= PQ.remove; Secara sepintas bisa diketahui
bahwa terdapat suatu proses internal yang tidak perlu diketahui oleh user
di dalam skema ini yaitu pengurutan item data. Implementasi bagaimana
pun user tidak perduli. Contoh penggunaan dalam metoda
pengurutan data berdasarkan Priority Queue:
Program 15.3 void
priorityQueueSortComparisonKey[] A {
int n = A.length; PriorityQueue PQ = new PriorityQueue;
create inisialisasi PQ
for int i =
; i n; i++ PQ.insertA[i];
mengisi PQ
for int i = n‐
1 ;
i = ;
i‐‐ A[i] = PQ.remove; mengambil satusatu
} Selanjutnya contoh penggunaan
PQ dengan tipe key integer ini dapat dilihat dalam program lebih
lengkapnya. Pada saat ini definisi kelas PriorityQueue belum
diimplementasikan. Sebelum mengimplementasikannya maka key
data item yang sedang kerjakan ini dibungkus dalam tipe data yang
generik yaitu: ComparisonKey sebagai suatu interface.
516
Direktorat Pembinaan SMK | 2008
interface
ComparisonKey {
int compareToComparisonKey value; String toString;
} Selanjutnya ComparisonKey ini
diimplementasikan sesuai dengan tipe data yang sedang digunakan,
dalam hal ini misalnya kita menggunakan integer nanti kita lihat
bila key bertipe String.
Program 15.4 public
class PQItem implements ComparisonKey { private int key;
PQItemint value { key = value;
} public String toString {
return Integer.toStringkey; }
public int compareToComparisonKey value { int a = this.key;
int b = PQItem value.key; return a==b?
: a b?
1 :
‐ 1
; }
}
Pada level yang lebih rendah kelas priority queue ini dapat
diimplementasikan baik dengan array atau dengan linked list, dimana hal
tersebut dijelaskan sebagai berikut: Versi Implementasi Unsorted
Array berukuran dinamis PQ menyimpan item data dalam
suatu array yang apabila penuh panjangnya dapat diperbesar
secara otomatis. Item data masuk begitu saja di bagian belakang.
Saat di-remove maka item data dengan key terbesar dicari
dilakukan sequential search. Key yang diremove tempatnya
digantikan oleh key yang paling belakang tidak melakukan
pergeseran
Versi Implementasi Sorted Linked- list
Saat item data masuk dalam PQ maka langsung ditempatkan pada
posisi yang sesuai dalam urutan menurun dilakukan pencarian
posisi terlebih dulu lalu dilakukan insert, dan saat di-remove maka
cukup dilakukan delete-first node pertama yang diambil.
Kedua implementasi tersebut berfungsi sama tapi dengan
implementasi yang berbeda namun sekali lagi user melihatnya sesuai
dengan abstraksi spesifikasi PQ yang ditentukan. Dalam prakteknya maka
kedua versi itu bisa dipilih tanpa mengubah modul-modul pemakainya
selama spesifikasinya ditaati.
Selain implementasinya yang bisa berbeda tanpa mengubah
rancangan modul tingkat di atasnya, representasi key data pun dapat
diimplementasikan secara berbeda
2008 | Direktorat Pembinaan SMK
517 karena ComparisonKey yang
didefinisikan abstraks tersebut. Dengan abstraksi ComparisonKey di
atas maka key bertipe lain dapat menggantikan tipe key integer dalam
contoh di atas.ComparisonKey ini memiliki konsep Representation
Independent Module. Berikut ini representasi String untuk key.
Program 15.5 class
PQItem implements ComparisonKey {
private String key; PQItemString value {
key = value; }
public String toString { return key;
} public int compareToComparisonKey value {
String a = this.key; String b = PQItemvalue.key;
return a.compareTob;
metoda compareTo dalam kelas String }
} Dalam program aplikasinya
perubahan terjadi pada bagian data, sementara sejumlah metoda tetap
sama.