binary heap

Üdvözlöm, Ön a binary heap szó jelentését keresi. A DICTIOUS-ban nem csak a binary heap szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a binary heap szót egyes és többes számban mondani. Minden, amit a binary heap szóról tudni kell, itt található. A binary heap szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. Abinary heap és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.

Főnév

binary heap (tsz. binary heaps)

  1. (informatika) bináris kupac

A binary heap (bináris kupac) egy olyan teljes bináris fa, amely kielégíti a heap-tulajdonságot, vagyis minden szülő-gyerek kapcsolatnál az alábbiak igazak:

  • Min-heap: a szülő kisebb vagy egyenlő, mint a gyermekei → könnyen lekérhető minimum
  • Max-heap: a szülő nagyobb vagy egyenlő, mint a gyermekei → könnyen lekérhető maximum

A binary heap gyakori alapja a prioritási soroknak (priority queues), illetve a Heapsort algoritmusnak.



📦 Jellemzők

  • Teljes bináris fa: minden szint balról jobbra teljesen kitöltött (kivéve az utolsó szintet)
  • Tömb (array) alapú reprezentáció:
    • Gyökér: heap
    • Bal gyerek: heap
    • Jobb gyerek: heap
    • Szülő: heap



🛠️ Alapműveletek és komplexitás

Művelet Leírás Időkomplexitás
insert(x) Új elem hozzáadása O(log n)
getMin() / getMax() Gyökér visszaadása O(1)
extractMin() / extractMax() Gyökér eltávolítása és újrarendezés O(log n)
heapify() Egész fa újrarendezése O(log n)
buildHeap() Lista átalakítása kupaccá O(n)



📊 Példa (Min-heap)

        5
      /   \
    10     8
   /  \   /
 15  12  11

Tömbként tárolva:


Minden szülő kisebb a gyerekeinél → min-heap.



🔄 Működés

insert(x)

  1. Beszúrjuk x-et a tömb végére.
  2. Fölfele “bubble-up”: összehasonlítjuk a szülőjével, és szükség szerint cserélünk.

extractMin() (min-heap)

  1. Kivesszük a heap elemet.
  2. Helyére betesszük az utolsó elemet.
  3. Lefele “heapify-down”: a gyerekekkel cserélgetjük, amíg a heap-tulajdonság helyre nem áll.



🔄 heapify(i) (top-down)

void heapify(vector<int>& heap, int i) {
    int smallest = i;
    int l = 2 * i + 1;
    int r = 2 * i + 2;

    if (l < heap.size() && heap < heap) smallest = l;
    if (r < heap.size() && heap < heap) smallest = r;

    if (smallest != i) {
        swap(heap, heap);
        heapify(heap, smallest);
    }
}

🔃 buildHeap() (bottom-up)

void buildHeap(vector<int>& heap) {
    for (int i = heap.size() / 2 - 1; i >= 0; --i) {
        heapify(heap, i);
    }
}

Ez O(n) időben alakít át egy rendezetlen tömböt egy min-heap struktúrává.



💡 Alkalmazások

  • Prioritási sor (priority queue)
  • Heapsort
  • Dijkstra algoritmus (bináris vagy Fibonacci heap-pel)
  • Event scheduling szimulációkban
  • Median kiszámítása 2 kupaccal (min + max)



🔍 Bináris vs. egyéb heap-ek

Adatszerkezet Insert Extract Min Decrease Key Merge
Binary heap O(log n) O(log n) O(log n) O(n)
Binomiális heap O(log n) O(log n) O(log n) O(log n)
Fibonacci heap O(1) O(log n)* O(1) O(1)



🧪 C++ osztályváz (Min-heap)

class BinaryHeap {
    vector<int> heap;

    void heapifyDown(int i);
    void heapifyUp(int i);

public:
    void insert(int val);
    int getMin();
    int extractMin();
};

✅ Összefoglalás

A binary heap egy hatékony, tömbben tárolt prioritási sor, amely lehetővé teszi a minimum vagy maximum gyors elérését és módosítását. Használata egyszerűbb, mint a haladóbb struktúráké (pl. Fibonacci heap), és a legtöbb gyakorlati célra tökéletesen megfelel.