struktur data queue 2

10
02/05/2011 1 PI1043 Sturktur Data Priority Queue Pengertian Priority Queue Suatu kontainer yang berisi beberapa item dimana setiap item memiliki prioritas. Kemungkinan setiap item mempunyai waktu tenggat yang berbeda-beda. Item dengan prioritas tertinggi merupakan item yang akan diproses atau dilayani selanjutnya. 3/11/'06 PrioQ/rmb 2 Seringkali, penunggu dalam antrian harus diatur menurut prioritas. Antrian disimpan menurut prioritas. Aturan priority queue bukan lagi FIFO murni. Implementasi priority queue dalam sorted table. 3/11/'06 PrioQ/rmb 3 Sorted Table Pengambilan elemen untuk dilayani selalu dari HEAD Penambahan elemen dilakukan sesuai prioritas. Elemen dalam antrian selalu dalam prioritas, dengan prioritas lebih tinggi untuk dilayani selalu lebih “dekat” ke HEAD 3/11/'06 PrioQ/rmb 4

Upload: tjokorda-agung-budi-w

Post on 02-Jul-2015

314 views

Category:

Documents


21 download

DESCRIPTION

PI1043 Struktur Data Materi QueueProgram Studi Diploma 3 Teknik InformatikaFakultas InformatikaIT Telkom Bandung

TRANSCRIPT

Page 1: Struktur Data Queue 2

02/05/2011

1

PI1043 Sturktur DataPriority Queue

Pengertian Priority Queue

• Suatu kontainer yang berisi beberapa item dimana setiap item memiliki prioritas.

• Kemungkinan setiap item mempunyai waktu tenggat yang berbeda-beda.

• Item dengan prioritas tertinggi merupakan item yang akan diproses atau dilayani selanjutnya.

3/11/'06PrioQ/rmb

2

• Seringkali, penunggu dalam antrian harus diatur menurut prioritas.

• Antrian disimpan menurut prioritas.• Aturan priority queue bukan lagi FIFO murni.• Implementasi priority queue dalam sorted

table.

3/11/'06PrioQ/rmb

3

Sorted Table

• Pengambilan elemen untuk dilayani selalu dari HEAD

• Penambahan elemen dilakukan sesuai prioritas. Elemen dalam antrian selalu dalam prioritas, dengan prioritas lebih tinggi untuk dilayani selalu lebih “dekat” ke HEAD

3/11/'06PrioQ/rmb

4

Page 2: Struktur Data Queue 2

02/05/2011

2

Representasi Penyimpanan Antrian

• Queue lebih tepat direpresentasikan sebagai tabel.

• Terdapat tiga alternatif penyimpanan antrian

3/11/'06PrioQ/rmb

5

Alternatif I

• Tabel dengan hanya representasi TAIL adalah indeks elemen terakhir. HEAD selalu diset =1 jika queue tidak kosong. Jika queue kosong, maka HEAD=0. Berikut ini ilustrasi queue tidak kosong dengan 5 elemen:

3/11/'06 PrioQ/rmb

6

Alternatif I (cont’d)

• Ilustrasi queue kosong

• Algoritma paling sederhana untuk penambahan elemen▫ Jika masih ada tempat adalah dengan

“memajukan” TAIL. • Kasus khusus untuk queue kosong karena

HEAD harus diset nilainya menjadi 1.

3/11/'06 PrioQ/rmb

7

Alternatif I (cont’d)

• Algoritma paling sederhana dan “naif” untuk penghapusan elemen jika queue tidak kosong ambil nilai elemen HEAD, geser semua elemen ulai dari HEAD+1 s/d TAIL(jika ada), kemudian TAIL “mundur”.

• Kasus khusus untuk queue dengan keadaan awal berelemen 1, yaitu menyesuaikan HEAD & TAIL dengan DEFINISI. Algoritma ini mencerminkan pergeseran orang yang sedang mengantri di dunia nyata tapi tidak EFISIEN.

3/11/'06PrioQ/rmb

8

Page 3: Struktur Data Queue 2

02/05/2011

3

Alternatif II

• Tabel dengan representasi HEAD & TAIL. HEAD bergerak ketika sebuah elemen dihapus jika queue tidak kosong. Jika queue kosong maka HEAD=0.

3/11/'06PrioQ/rmb

9

Alternatif II (cont’d)

• Ilustrasi queue tidak kosong, dengan 5 elemen, kemungkinan pertama HEAD sedang di posisi awal:

3/11/'06 PrioQ/rmb

10

Alternatif II (cont’d)

• Ilustrasi queue tidak kosong, dengan 5 elemen, kemungkinan pertama HEAD tidak berada di posisi awal. Hal ini terjadi akibat algoritma penghapusan yang dilakukan

3/11/'06 PrioQ/rmb

11

Alternatif II (cont’d)

• Ilustrasi queue kosong

• Algoritma untuk penambahan elemen = alternatif I: jika masih ada tempat adalah dengan memajukan TAIL. Kasus khusus untuk queue kosong karena HEAD harus diset nilainya menjadi 1. Algoritma = alternatif I

3/11/'06 PrioQ/rmb

12

Page 4: Struktur Data Queue 2

02/05/2011

4

Alternatif II (cont’d)

• Algoritma untuk penghapusan elemen jika queue tidak kosong: ambil nilai elemen HEAD, kemudian HEAD maju. Kasus khusus untuk queue dengan keadaan awal berelemen 1, yaitu menyesuaikan HEAD & TAIL dengan DEFINISI.

• Algoritma ini tidak mencerminkan pergeseran orang yang sedang mengantri di dunia nyata, tapi efisien.

3/11/'06PrioQ/rmb

13

Alternatif II (cont’d)

• Namun suatu saat terjadi keadaan queue penuh tetapi “semu” sebagai berikut:

• Jika keadaan ini terjadi, haruslah dilakukan aksi menggeser elemen untuk menciptakan ruangan kosong. Pergeseran dilakukan jika dan hanya jika

3/11/'06 PrioQ/rmb

14

Alternatif III

• Tabel dengan representasi HEAD & TAIL “berputar” mengelilingi indeks tabel dari awal sampai akhir, kemudian kembali ke awal.

• Jika queue kosong maka HEAD=0. Representasi memungkinkan tidak perlu lagi ada pergeseran yang harus dilakukan seperti pada alternatif II pada saat penambahan elemen

3/11/'06PrioQ/rmb

15

Alternatif III (cont’d)

• Ilustrasi queue tidak kosong dengan 5 elemen dan HEAD berada di posisi awal:

3/11/'06 PrioQ/rmb

16

Page 5: Struktur Data Queue 2

02/05/2011

5

Alternatif III (cont’d)

• Ilustrasi queue tidak kosong dengan 5 elemen dan HEAD tidak berada di posisi awal, tetapi “<” atau “sebelum” TAIL.

3/11/'06 PrioQ/rmb

17

Alternatif III (cont’d)

• Ilustrasi queue tidak kosong dengan 5 elemen, HEAD tidak berada di posisi awal, tetapi “>” atau “sesudah” TAIL.

3/11/'06 PrioQ/rmb

18

Alternatif III (cont’d)

• Algoritma untuk penambahan elemen ▫ Jika masih ada tempat adalah dengan memajukan

TAIL.▫ Jika TAIL sudah mencapai IdxMax maka suksesor dari

IdxMax adalah 1 sehingga TAIL yang baru=1.▫ Jika TAIL belum mencapai IdxMax maka algoritma

penambahan elemen = altern II.• Kasus khusus untuk queue kosong karena HEAD

harus diset nilainya menjadi 1.

3/11/'06PrioQ/rmb

19

Alternatif III (cont’d)• Algoritma penghapusan elemen▫ Jika queue tidak kosong ambil nilai elemen HEAD,

kemudian HEAD maju.• Penentuan suksesor dari indeks yang sudah

diubah/”maju” dibuat seperti algoritma penambahan elemen.▫ Jika HEAD mencapai IdxMax, maka suksesor dari

HEAD =1• Kasus khusus untuk queue dengan keadaan awal

berelemen 1, yaitu menyesuaikan HEAD & TAIL dengan DEFINISI.

3/11/'06PrioQ/rmb

20

Page 6: Struktur Data Queue 2

02/05/2011

6

Alternatif III (cont’d)

Algoritma ini EFISIEN karena tidak perlu pergeseran dan seringkali strategi pemakaian

tabel semacam ini disebut sebagai “circular buffer”, dimana tabel penyimpan elemen

dianggap sebagai “buffer”

3/11/'06PrioQ/rmb

21 Representasi Penyimpanan Priority Queue

Tempat penyimpanan antrian dapat diadaptasi dari salah satu alternatif. Penomoran prioritas dapat ditentukan, misal:

• Prioritas bernilai 0 s/d PrioMax, dengan 0 untuk prioritas paling tinggi (ascending)

• Prioritas bernilai 0 s/d PrioMax, dengan 0 untuk prioritas paling rendah (descending)

3/11/'06PrioQ/rmb

22

• Contoh keadaan queue dengan prioritas 0 s/d 5, tersusun ascending

• Ilustrasi queue tidak kosong, dengan 5 elemen, dengan HEAD tidak berada di posisi awal, tetapi masih “lebih kecil” atau “sebelum” TAIL. Angka(1,0) berarti nilai informasi yang disimpan adalah 1 dengan prioritas 0.

3/11/'06PrioQ/rmb

23

ADT Priority Queue (PQ)

• Representasi fisik:▫ Tabel kontigu▫ Berkait pointer

• Primitif-primitif ADT PQ yang didefinisikan:▫ Menentukan apakah suatu PQ kosong atau tidak

(IsEmpty)▫ Menentukan apakah suatu PQ telah penuh atau belum

(IsFull)▫ Mengirimkan banyaknya elemen PQ (NbElmt)▫ Menginisialisasi sebuah PQ kosong (CreateEmpty)

3/11/'06PrioQ/rmb

24

Page 7: Struktur Data Queue 2

02/05/2011

7

Primitif PQ (cont’d)▫ Mengembalikan semua memori PQ, PQ kosong

(dealokasi)▫ Menambahkan elemen X pada PQ dengan aturan

PQ (add)▫ Menghapus elemen X pada PQ dengan aturan

FIFO (del)

3/11/'06PrioQ/rmb

25

Representasi Kontigu/*file : prioque.h*/#ifndef prioque_h#define prioque_h#include “boolean.h”#include <stdlib.h>#define Nil 0#define maxprio 5/*definisi elemen & address*/typedef struct { int info;

int prio;}infotype;typedef int address; /*indeks tabel*/typedef struct { infotype *T; /*tabel elemen*/

address HEAD;/*alamat penghapusan*/address TAIL;/*alamat penambahan*/int MaxEl;/*max elemen PQ*/

3/11/'06PrioQ/rmb

26

Representasi Kontigu (cont’d)/*jika PQ adalah prioq, maka akses elemen: */#define head(pq) (pq).head#define tail(pq) (pq).tail#define infohead(pq) (pq).T[(pq).head].info#define infotail(pq) (pq).T[(pq).tail].info#define MaxEl(pq) (pq).MaxEl

/*prototype*/boolean IsEmpty(PrioQ);/* mengirimkan true jika prioq kosong */boolean IsFull(PrioQ);/* mengirimkan true jika tabel penampung prioq sudah penuh */

3/11/'06PrioQ/rmb

27

int NbElmt(PrioQ);/* mengirimkan banyaknya elemen prioq. Mengirimkan 0 jika kosong */

void CreateEmpty(PrioQ*,int);/* I.S. sembarang *//* F.S. sebuah pq kosong terbentuk dan salah satu kondisi sbb: */

/* jika alokasi berhasil, tabel memori dialokasi berukuran Max */

/* atau: jika alokasi gagal, pq kosong dg max elemen=0 */

/* proses: melakukan alokasi, membuat sebuah pq kosong */

3/11/'06PrioQ/rmb

28

Page 8: Struktur Data Queue 2

02/05/2011

8

/* destruktor */void Dealokasi(PrioQ*);/* proses: mengembalikan memori pq *//* I.S. pq pernah dialokasi *//* F.S. pq menjadi tidak terdefinisi lagi. MaxEl(pq) diset 0 */

/*** primitif Add/Delete ***/void Add(PrioQ*,infotype);/* proses: menambahkan X pada pq shg elemen tetap terurut menaik menurut Prio(P). Tabel penyimpan elemen dipakai secara sirkuler */

/* elemen berikut setelah elemen terakhir adalah elemen dg indeks 1 */

3/11/'06PrioQ/rmb

29

/*I.S. pq mungkin kosong, tabel penampung elemen pq tidak penuh*/

/*F.S. elemen pq bertambah 1 sesuai aturan prioq dg prio menurun*/

void Del(PrioQ*,infotype*);/* proses: menghapus X pada pq dari head(pq) *//* I.S. pq tidak mungkin kosong *//* F.S. X=nilai elemen head pada I.S. jika head(pq)=MaxEl+1 */

/* head(pq) diset=1; Q mungkin menjadi kosong*/

#endif

3/11/'06PrioQ/rmb

30

Representasi List Berkait/* File: Lpqueue.h *//* deklarasi PrioQ, diimplementasi dg list berkait */

#ifndef Lpqueue_h#define Lpqueue_h#include “boolean.h”#include <stdlib.h>#define Nil NULL

/* definisi elemen & address */typedef struct { int info;

int prio;}infotype;

3/11/'06PrioQ/rmb

31

typedef struct t_ElmtQ *address;typedef struct t_ElmtQ {

infotype info;address next;

}ElmtPQ;typedef struct {

address head;address tail;

}Pqueue;

/*jika Q adalah Pqueue maka akses elemen: */#define head(Q) (Q).head#define tail(Q) (Q).tail

3/11/'06PrioQ/rmb

32

Page 9: Struktur Data Queue 2

02/05/2011

9

/* Jika P adalah address */#define info(P) ((P)->info).info#define prio(P) ((P)->info).prio#define next(P) (P)->next

/*prototype*/boolean IsEmpty(PrioQ);/* mengirimkan true jika prioq kosong */boolean IsFull(PrioQ);/* mengirimkan true jika tabel penampung prioq sudah penuh */

3/11/'06PrioQ/rmb

33

int NbElmt(PrioQ);/* mengirimkan banyaknya elemen prioq. Mengirimkan 0 jika kosong */

void CreateEmpty(PrioQ*);/* I.S. sembarang *//* F.S. sebuah pq kosong terbentuk *//* Proses. Membuat pq kosong */

/* destruktor */void Dealokasi(PrioQ*);/* proses: mengembalikan memori pq *//* I.S. pq pernah dialokasi *//* F.S. pq menjadi tidak terdefinisi lagi.*/

3/11/'06PrioQ/rmb

34

/*** primitif Add/Delete ***/void Add(PrioQ*,infotype);/* proses: menambahkan X pada pq shg elemen tetap terurut menaik menurut Prio(P). Tabel penyimpan elemen dipakai secara sirkuler */

/* elemen berikut setelah elemen terakhir adalah elemen dg indeks 1 */

/*I.S. pq mungkin kosong, tabel penampung elemen pq tidak penuh*/

/*F.S. elemen pq bertambah 1 sesuai aturan prioq dg prio menurun*/

3/11/'06PrioQ/rmb

35

void Del(PrioQ*,infotype*);/* proses: menghapus X pada pq dari head(pq) *//* I.S. pq tidak mungkin kosong *//* F.S. X=nilai elemen head pada I.S. jika head(pq)=MaxEl+1 */

/* head(pq) diset=1; Q mungkin menjadi kosong*/

#endif

3/11/'06PrioQ/rmb

36

Page 10: Struktur Data Queue 2

02/05/2011

10

References

• Liem, Inggriani. “Diktat Struktur Data”. ITB. 1999

• Thomas A. Standish,“Data Structures, Algorithms & Software Principles in C” Addison-Wesley, 1995

3/11/'06PrioQ/rmb

37