Kolejka priorytetowa
| Ten artykuł od 2012-05 wymaga uzupełnienia źródeł podanych informacji. Informacje nieweryfikowalne mogą zostać zakwestionowane i usunięte. Aby uczynić artykuł weryfikowalnym, należy podać przypisy do materiałów opublikowanych w wiarygodnych źródłach. |
Kolejka priorytetowa (ang. priority queue) – abstrakcyjny typ danych służący do przechowywania elementów zbioru, na którym określono relację porządku. Implementacja kolejki priorytetowej przy użyciu kopca charakteryzuje się bardzo szybkim (
) dostępem do elementu maksymalnego. Najczęściej kolejkę priorytetową realizuje się za pomocą kopca lub tablicy asocjacyjnej, która mapuje wartość priorytetu na listę wartości z tym priorytetem.
Kolejka priorytetowa ma zastosowanie tam, gdzie obiekty są pobierane z dynamicznej struktury i przetwarzane w kolejności od obiektu o najwyższym priorytecie do obiektu o najniższym priorytecie. Przy czym, w trakcie procesu przetwarzania nowe obiekty mogą być dodawane do kolejki.
W jądrze systemu operacyjnego Linux zastosowana jest kolejka priorytetowa w module szeregującym procesy. Kolejka została zaimplementowana przy użyciu tablicy.
Złożoność obliczeniowa podstawowych operacji:
| Operacja | Kopiec (binarny) | Kopiec dwumianowy | Tablica | Lista | Równoważone BST | Kopiec Fibonacciego | Kolejka Brodala |
|---|---|---|---|---|---|---|---|
| Wstawienie elementu | ![]() |
. zamortyzowane: ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
| Dostęp do elementu minimalnego | ![]() |
albo ![]() |
![]() |
![]() |
albo ![]() |
![]() |
![]() |
| Usunięcie elementu minimalnego | ![]() |
![]() |
![]() |
![]() |
![]() |
- zamortyzowane |
![]() |
| Dostęp/usunięcie dowolnego elementu | ![]() |
![]() |
![]() |
![]() |
![]() |
- zamortyzowane |
![]() |
| Złączenie dwóch kolejek | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
| Zmniejszenie priorytetu dowolnego elementu | ![]() |
![]() |
![]() |
![]() |
- zamortyzowane |
![]() |
|
| Stworzenie nowej kolejki z zadanych n elementów | ![]() |
![]() |
![]() |
![]() |
![]() |
||
| Stworzenie pustej kolejki | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
gdzie:
- n - liczba elementów w kolejce
- m - liczba priorytetów (w przypadku tablicy jest ona zwykle z góry ograniczona)
W przypadku BST oraz kopca dwumianowego, findmin (znajdowanie elementu minimalnego), można łatwo przyśpieszyć do
, poprzez zapamiętywanie najmniejszego elementu w kopcu. Wartość ta jest aktualizowane przy dodawaniu elementów do kopca lub usuwanie elementu minimalnego z kopca, bez zwiększania ich złożoności obliczeniowej.







