Anda di halaman 1dari 13

Priority Queue

Diajukan untuk memenuhi tugas Mata Kuliah Struktur Data dan Algoritma di

Program Studi Informatika yang Diampu oleh Fauzan Asrin, S.Kom, M.Kom.

Disusun oleh :

Garda Sanjaya Hadi Barata (D1041221042)

Bintang Budi Pangestu (D1041221046)

Eric Wijaya Lay (D1041221041)

Muhammad Alghifari (D1041221044)

FAKULTAS TEKNIK

UNIVERSITAS TANJUNGPURA

PONTIANAK

2023
DAFTAR ISI

DAFTAR ISI.............................................................................................................................................2
BAB I PENDAHULUAN ........................................................................................................................... 3
BAB II PEMBAHASAN.............................................................................................................................4
2.1. Pengertian..................................................................................................................................4
1. Push().........................................................................................................................................5
2. Pop()..........................................................................................................................................5
3. Size()..........................................................................................................................................5
4. Empty()......................................................................................................................................5
5. Top()...........................................................................................................................................5
6. Swap()........................................................................................................................................5
7. Emplace()...................................................................................................................................5
2.3. Jenis Priority Queue....................................................................................................................6
1. Ascending Order Priority Queue................................................................................................6
2. Descending Order Priority Queue..............................................................................................6
2.4. Perbedaan Queue dan Priority Queue........................................................................................7
2.5. Implementasi Priority Queue......................................................................................................7
1. Menerapkan Antrian Prioritas Menggunakan Array...................................................................7
2. Menerapkan Antrian Prioritas Menggunakan Linked List:.........................................................9
2.6. Keunggulan Priority Queue.......................................................................................................12
2.7. Kekurangan Priority Queue.......................................................................................................12
Daftar Pustaka.....................................................................................................................................13

2
BAB I
PENDAHULUAN
Dalam pemrograman, ada banyak situasi di mana kita perlu mengatur data
berdasarkan prioritas tertentu. Untuk memenuhi kebutuhan semacam itu, Priority Queue
(Antrean Prioritas) hadir sebagai struktur data yang efisien dan berguna.
Priority Queue adalah jenis struktur data yang memungkinkan penyimpanan elemen dengan
prioritas terkait. Elemen dengan prioritas tertinggi ditempatkan di depan antrian, sehingga
dapat diakses dengan cepat. Struktur data ini sering kali diimplementasikan dengan
menggunakan Heap atau Binary Search Tree.
Kegunaan Priority Queue meluas ke berbagai bidang. Misalnya, dalam sistem operasi, CPU
dapat menggunakan Priority Queue untuk mengatur urutan eksekusi tugas berdasarkan
prioritas. Dalam algoritma pencarian, seperti algoritma A* untuk pencarian jalur terpendek,
Priority Queue digunakan untuk mengatur simpul-simpul yang harus dieksplorasi
berdasarkan estimasi jarak.
Dalam makalah ini, akan membahas konsep dasar Priority Queue dan cara
mengimplementasikannya. Kami juga akan melihat contoh penggunaan Priority Queue dalam
pemrograman. Dengan pemahaman tentang Priority Queue, Anda akan dapat
menggunakannya secara efisien untuk mengatasi berbagai masalah yang memerlukan
pengaturan prioritas.

3
BAB II
PEMBAHASAN
2.1. Pengertian
Priority queue adalah jenis antrian yang mengatur elemen berdasarkan nilai
prioritasnya. Elemen dengan nilai prioritas lebih tinggi biasanya diambil sebelum elemen
dengan nilai prioritas lebih rendah.
Dalam priority queue, setiap elemen memiliki nilai prioritas yang terkait dengannya. Saat
Anda menambahkan elemen ke antrean, elemen tersebut dimasukkan ke dalam posisi
berdasarkan nilai prioritasnya. Misalnya, jika Anda menambahkan elemen dengan nilai
prioritas tinggi ke antrean prioritas, elemen tersebut dapat disisipkan di dekat bagian depan
antrean, sedangkan elemen dengan nilai prioritas rendah dapat disisipkan di dekat bagian
belakang.
Antrean prioritas sering digunakan dalam sistem real-time, di mana urutan pemrosesan
elemen dapat memiliki konsekuensi yang signifikan. Mereka juga digunakan dalam algoritme
untuk meningkatkan efisiensinya, seperti algoritme Dijkstra untuk menemukan jalur
terpendek dalam graf dan algoritme pencarian A* untuk menemukan jalur.
Jadi, priority queue adalah perpanjangan dari queue dengan properti berikut. 
 Setiap item memiliki prioritas yang terkait dengannya.
 Elemen dengan prioritas tinggi di-dequeued sebelum elemen dengan prioritas rendah.
 Jika dua elemen memiliki prioritas yang sama, mereka dilayani sesuai urutannya
dalam antrian.
Dalam antrian prioritas di bawah ini, elemen dengan nilai ASCII maksimum akan
memiliki prioritas tertinggi. Elemen dengan prioritas lebih tinggi dilayani terlebih dahulu. 

Source :https://media.geeksforgeeks.org/wp-content/cdn-uploads/Priority-Queue-min-1024x512.png

4
2.2. Metode Dalam Priority Queue
1. Push()
Push pada priority queue digunakan untuk memasukkan elemen baru ke dalam antrian
dengan memperhatikan prioritasnya. Elemen baru ini akan ditempatkan pada posisi yang tepat
dalam antrian sehingga mempertahankan urutan prioritas yang benar. Proses penempatan
elemen baru ini dilakukan dengan membandingkan nilai prioritas elemen baru dengan elemen
yang sudah ada dalam antrian, dan menempatkan elemen baru pada posisi yang tepat di antara
elemen-elemen tersebut. Sebagai contoh jika elemen yang dimasukkan ke dalam priority queue
merupakan nilai numerik, maka nilai numerik yang lebih besar akan memiliki prioritas yang lebih
tinggi daripada elemen dengan nilai numerik yang lebih kecil.

2. Pop()
Pop pada priority queue digunakan untuk menghapus elemen dengan prioritas tertinggi.
Prioritas tertinggi (top) biasanya ditentukan oleh sebuah fungsi perbandingan yang
membandingkan nilai prioritas antara dua elemen dalam antrian. Setelah elemen dengan
prioritas tertinggi (top) dihapus, elemen dengan prioritas selanjutnya akan diubah menjadi
elemen dengan prioritas tertinggi (top), dan begitu seterusnya. Proses ini dilakukan hingga
antrian kosong atau tidak ada lagi elemen yang tersisa dalam antrian.

3. Size()
Size pada priority queue digunakan untuk mendapatkan jumlah elemen yang saat ini ada
dalam antrian. Operator ini akan mengembalikan nilai dengan tipe data integer yang merupakan
jumlah elemen yang ada dalam priority queue.

4. Empty()
Empty pada priority queue digunakan untuk mengetahui apakah antrian tersebut kosong
atau tidak. Jika antrian saat ini dalam keaadan kosong maka operasi pop tidak akan bisa berjalan
sedangkan jika sebaliknya maka operasi push tidaka akan bisa berjalan.

5. Top()
Top pada priority queue biasanya merujuk pada elemen dengan prioritas tertinggi yang ada
dalam priority queue. Dalam kebanyakan implementasi, elemen dengan prioritas tertinggi selalu
ditempatkan di depan atau di atas elemen-elemen lain di dalam priority queue dimana nantinya
elemen ini akan dihapus terlebih dahulu dari antrian.

6. Swap()
Swap pada priority queue adalah proses menukar dua elemen yang berbeda posisi dalam
priority queue. Biasanya, swap dilakukan untuk mengubah urutan prioritas dari dua elemen
tertentu dalam priority queue.

7. Emplace()
Emplace pada priority queue adalah metode yang digunakan untuk menambahkan elemen
baru ke dalam priority queue dengan menggunakan nilai yang diberikan untuk membuat
elemen baru pada saat penambahan. Metode ini mirip dengan metode push, namun dengan

5
emplace, kita dapat langsung memasukkan nilai yang akan digunakan untuk membuat elemen
baru, tanpa harus membuat elemen baru terlebih dahulu

2.3. Jenis Priority Queue


1. Ascending Order Priority Queue
Seperti namanya, dalam ascending order priority queue, elemen dengan nilai prioritas lebih
rendah diberikan prioritas lebih tinggi dalam daftar prioritas. Misalnya, jika kita memiliki
elemen berikut dalam priority queue yang disusun dalam urutan menaik seperti 4,6,8,9,10. Di
sini, 4 adalah angka terkecil, oleh karena itu, ia akan mendapatkan prioritas tertinggi dalam
antrean prioritas dan saat kita keluar dari antrean prioritas jenis ini, 4 akan dihapus dari
antrean dan dequeue mengembalikan 4.
2. Descending Order Priority Queue 
Simpul akar adalah elemen maksimum dalam tumpukan maksimum, seperti yang mungkin
Anda ketahui. Itu juga akan menghapus elemen dengan prioritas tertinggi terlebih
dahulu. Akibatnya, simpul akar dihapus dari antrian. Penghapusan ini menyisakan ruang
kosong, yang akan diisi dengan sisipan baru di masa mendatang. Invarian heap kemudian

dipertahankan dengan membandingkan elemen yang baru dimasukkan ke semua entri lain
dalam antrean.
Source : https://media.geeksforgeeks.org/wp-content/uploads/20220623153252/priorityqueue.jpg

6
2.4. Perbedaan Queue dan Priority Queue
Priority Queue Queue
Memproses elemen dengan prioritas tertinggi Tidak ada prioritas

Tidak ada prinsip yang diterapkan Mengikuti prinsip FIFO

Jika ada lebih dari satu elemen dengan Tidak ada proses seperti itu yang terjadi
prioritas yang sama, urutan antrian diambil

2.5. Implementasi Priority Queue


1. Menerapkan Antrian Prioritas Menggunakan Array
// C++ program to implement Priority Queue

// using Arrays
#include <bits/stdc++.h>
using namespace std;
 
// Structure for the elements in the
// priority queue
struct item {
    int value;
    int priority;
};
 
// Store the element of a priority queue
item pr[100000];
 
// Pointer to the last index
int size = -1;
 
// Function to insert a new element
// into priority queue
void enqueue(int value, int priority)
{
    // Increase the size
    size++;
 
    // Insert the element
    pr[size].value = value;
    pr[size].priority = priority;
}
 
// Function to check the top element
int peek()

7
{
    int highestPriority = INT_MIN;
    int ind = -1;
 
    // Check for the element with
    // highest priority
    for (int i = 0; i <= size; i++) {
 
        // If priority is same choose
        // the element with the
        // highest value
        if (highestPriority == pr[i].priority && ind > -1
            && pr[ind].value < pr[i].value) {
            highestPriority = pr[i].priority;
            ind = i;
        }
        else if (highestPriority < pr[i].priority) {
            highestPriority = pr[i].priority;
            ind = i;
        }
    }
 
    // Return position of the element
    return ind;
}
 
// Function to remove the element with
// the highest priority
void dequeue()
{
    // Find the position of the element
    // with highest priority
    int ind = peek();
 
    // Shift the element one index before
    // from the position of the element
    // with highest priority is found
    for (int i = ind; i < size; i++) {
        pr[i] = pr[i + 1];
    }
 
    // Decrease the size of the
    // priority queue by one
    size--;
}
 
// Driver Code
int main()

8
{
    // Function Call to insert elements
    // as per the priority
    enqueue(10, 2);
    enqueue(14, 4);
    enqueue(16, 4);
    enqueue(12, 3);
 
    // Stores the top element
    // at the moment
    int ind = peek();
 
    cout << pr[ind].value << endl;
 
    // Dequeue the top element
    dequeue();
 
    // Check the top element
    ind = peek();
    cout << pr[ind].value << endl;
 
    // Dequeue the top element
    dequeue();
 
    // Check the top element
    ind = peek();
    cout << pr[ind].value << endl;
 
    return 0;
}
Sumber : https://www.geeksforgeeks.org/priority-queue-set-1-introduction/

2. Menerapkan Antrian Prioritas Menggunakan Linked List: 


// C++ code to implement Priority Queue

// using Linked List


#include <bits/stdc++.h>
using namespace std;
 
// Node
typedef struct node {
    int data;
 
    // Lower values indicate
    // higher priority
    int priority;
 

9
    struct node* next;
 
} Node;
 
// Function to create a new node
Node* newNode(int d, int p)
{
    Node* temp = (Node*)malloc(sizeof(Node));
    temp->data = d;
    temp->priority = p;
    temp->next = NULL;
 
    return temp;
}
 
// Return the value at head
int peek(Node** head) { return (*head)->data; }
 
// Removes the element with the
// highest priority form the list
void pop(Node** head)
{
    Node* temp = *head;
    (*head) = (*head)->next;
    free(temp);
}
 
// Function to push according to priority
void push(Node** head, int d, int p)
{
    Node* start = (*head);
 
    // Create new Node
    Node* temp = newNode(d, p);
 
    // Special Case: The head of list has
    // lesser priority than new node
    if ((*head)->priority < p) {
 
        // Insert New Node before head
        temp->next = *head;
        (*head) = temp;
    }
    else {
 
        // Traverse the list and find a
        // position to insert new node
        while (start->next != NULL

10
               && start->next->priority > p) {
            start = start->next;
        }
 
        // Either at the ends of the list
        // or at required position
        temp->next = start->next;
        start->next = temp;
    }
}
 
// Function to check is list is empty
int isEmpty(Node** head) { return (*head) == NULL; }
 
// Driver code
int main()
{
 
    // Create a Priority Queue
    // 7->4->5->6
    Node* pq = newNode(4, 1);
    push(&pq, 5, 2);
    push(&pq, 6, 3);
    push(&pq, 7, 0);
 
    while (!isEmpty(&pq)) {
        cout << " " << peek(&pq);
        pop(&pq);
    }
    return 0;
}
Sumber : https://www.geeksforgeeks.org/priority-queue-set-1-introduction/

11
2.6. Keunggulan Priority Queue
1. Membantu untuk mengakses elemen dengan cara yang lebih cepat. Ini karena elemen
dalam antrian prioritas diurutkan berdasarkan prioritas, seseorang dapat dengan mudah
mengambil elemen dengan prioritas tertinggi tanpa harus mencari di seluruh antrian.
2. Pengurutan elemen dalam Priority Queue dilakukan secara dinamis. Elemen-elemen
dalam antrean prioritas dapat diperbarui nilai prioritasnya, yang memungkinkan antrean
untuk mengurutkan ulang secara dinamis saat prioritas berubah.
3. Algoritma yang efisien dapat diimplementasikan. Antrean prioritas digunakan dalam
banyak algoritme untuk meningkatkan efisiensinya, seperti algoritme Dijkstra untuk
menemukan jalur terpendek dalam graf dan algoritme pencarian A* untuk pencarian
jalur.
4. Termasuk dalam sistem real-time. Ini karena antrean prioritas memungkinkan Anda
mengambil elemen dengan prioritas tertinggi dengan cepat, antrean tersebut sering
digunakan dalam sistem waktu nyata di mana waktu adalah hal yang sangat penting.
2.7. Kekurangan Priority Queue
1. Kompleksitas tinggi. Antrean prioritas lebih kompleks daripada struktur data sederhana
seperti larik dan daftar tertaut, dan mungkin lebih sulit untuk diterapkan dan dipelihara.
2. Konsumsi memori yang tinggi. Menyimpan nilai prioritas untuk setiap elemen dalam
antrian prioritas dapat menghabiskan memori tambahan, yang mungkin menjadi
perhatian dalam sistem dengan sumber daya terbatas.
3. Itu tidak selalu merupakan struktur data yang paling efisien. Dalam beberapa kasus,
struktur data lain seperti tumpukan atau pohon pencarian biner mungkin lebih efisien
untuk operasi tertentu, seperti menemukan elemen minimum atau maksimum dalam
antrean.
4. Kadang-kadang kurang dapat diprediksi :. Ini karena urutan elemen dalam antrean
prioritas ditentukan oleh nilai prioritasnya, urutan pengambilan elemen mungkin
kurang dapat diprediksi dibandingkan dengan struktur data lain seperti tumpukan atau
antrean, yang mengikuti first-in, first-out ( FIFO) atau last-in, first-out (LIFO).

12
Daftar Pustaka

https://media.geeksforgeeks.org/wp-content/cdn-uploads/Priority-Queue-min-1024x512.png

https://media.geeksforgeeks.org/wp-content/uploads/20220623153252/priorityqueue.jpg

https://www.geeksforgeeks.org/priority-queue-set-1-introduction/

13

Anda mungkin juga menyukai