Zestawy rozmówBlog

Twoja wymarzona praca? Lets Git IT.
Interaktywna platforma przygotowująca do rozmów technicznych dla nowoczesnych programistów.

XGitHub

Platforma

  • Kategorie

Zasoby

  • Blog
  • O aplikacji
  • FAQ
  • Sugestie

Prawne

  • Polityka prywatności
  • Regulamin

© 2026 LetsGit.IT. Wszelkie prawa zastrzeżone.

LetsGit.IT/Kategorie/Struktury danych
Struktury danycheasy

Czym jest kolejka priorytetowa?

Tagi
#priority-queue#heap#big-o
Wróć do kategoriiPrzejdź do quizu

Odpowiedź

Kolejka priorytetowa wyjmuje element o najwyższym (lub najniższym) priorytecie, a nie najstarszy. Zwykle jest zaimplementowana kopcem, więc wstawienie/usunięcie to O(log n).

import java.util.PriorityQueue;

PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(5);
pq.add(1);
System.out.println(pq.poll()); // 1

Odpowiedź zaawansowana

Głębiej

Kolejka priorytetowa to ADT, gdzie zdejmujesz element o „najlepszym” priorytecie (min lub max). Najczęściej implementuje się ją kopcem binarnym.

Typowe koszty dla kopca binarnego:

  • peek (min/max): O(1)
  • insert: O(log n)
  • pop (remove min/max): O(log n)

To idealna struktura, gdy wielokrotnie potrzebujesz „następnego najlepszego” elementu, a zbiór w trakcie się zmienia.

Zastosowania

  • Dijkstra / A*: zawsze wybierasz najmniejszy dystans.
  • Scheduler: uruchamiasz najpilniejsze zadanie.
  • Top-K: trzymasz kopiec rozmiaru k podczas skanowania strumienia.

Przykłady

// Min-heap po pierwszym polu (priorytet)
PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> Integer.compare(a[0], b[0]));
pq.add(new int[]{5, 42});
pq.add(new int[]{1, 7});
int[] next = pq.poll(); // [1, 7]

Typowe pułapki

  • Oczekiwanie stabilnej kolejności przy równych priorytetach (nie jest gwarantowana).

Powiązane pytania

Struktury danych
Kopiec binarny vs drzewo BST: które operacje są wydajne?
#heap#bst#priority-queue
Struktury danych
Co to jest segment tree i jaką złożoność daje dla zapytań i aktualizacji zakresowych?
#segment-tree#range-query#updates
Struktury danych
Jakie operacje wspiera kolejka priorytetowa i jak jest zwykle zaimplementowana?
Potrzeba szybkiego usuwania dowolnego elementu (kopiec wymaga dodatkowego indeksowania).
  • Pomylenie min-heap vs max-heap (kierunek comparatora).
  • #priority-queue#heap#ordering
    Struktury danych
    Budowanie kopca z tablicy: dlaczego może być O(n), a nie O(n log n)?
    #heap#heapify#complexity
    Struktury danych
    Dlaczego resize tablicy haszującej może powodować skoki latencji i jak temu zapobiegać?
    #hash-table#rehash#latency
    Struktury danych
    Co to jest sparse table i do jakich problemów się nadaje?
    #sparse-table#rmq#preprocessing