Middle
Ce este o stivă (în contextul structurilor de date)?
sobes.tech AI
Răspuns de la AI
Un heap este un arbore specializat utilizat ca structură de date. Proprietatea principală a heap-ului este ordonarea parțială: pentru orice vârf, condiția este ca valoarea vârfului părinte să fie mai mare sau egală cu valoarea oricărui dintre copiii săi (max-heap) sau mai mică sau egală (min-heap).
Caracteristici cheie:
- Arbore binar: De obicei implementat ca un arbore binar, unde fiecare nod are cel mult doi descendenți.
- Arbore binar complet: Pe toate nivelurile, cu excepția posibil ultimei, arborele este complet umplut. Nodurile de pe ultimul nivel sunt umplute de la stânga la dreapta. Acest lucru permite stocarea eficientă a heap-ului sub formă de array.
- Proprietatea heap-ului:
- Max-heap: Valoarea fiecărui nod este mai mare sau egală cu valorile descendenților săi. Elementul maxim se află întotdeauna în rădăcină.
- Min-heap: Valoarea fiecărui nod este mai mică sau egală cu valorile descendenților săi. Elementul minim se află întotdeauna în rădăcină.
Operații principale cu heap-ul:
- Inserarea unui element: Adăugarea unui nou element și menținerea proprietății heap-ului.
- Eliminarea unui element: Eliminarea elementului rădăcină (maxim sau minim, în funcție de tipul de heap) și menținerea proprietății heap-ului.
- Construirea heap-ului: Construirea unui heap dintr-un array de elemente.
Aplicații ale heap-ului:
- Sortare: Algoritmul de sortare prin heap (Heapsort).
- Cozi de prioritate: Implementare eficientă a cozilor în care elementele sunt procesate în ordinea priorității.
- Algoritmi de căutare: De exemplu, căutarea elementului k-ésimo după valoare.
- Algoritmi pe grafuri: De exemplu, algoritmul lui Dijkstra.
Reprezentarea heap-ului în array:
Deoarece heap-ul este un arbore binar complet, poate fi stocat eficient în array fără utilizarea pointerilor.
- Dacă un nod se află la indexul
i, copilul său stâng se află la indexul2*i + 1. - Copilul său drept se află la indexul
2*i + 2. - Părintele său se află la indexul
(i - 1) / 2.
# Exemplu de reprezentare a unui min-heap sub formă de array
heap_array = [10, 15, 20, 17, 25, 30]
# Rădăcină: heap_array[0] = 10
# Copilul stâng al rădăcinii: heap_array[2*0 + 1] = heap_array[1] = 15
# Copilul drept al rădăcinii: heap_array[2*0 + 2] = heap_array[2] = 20
# Părintele elementului de la indexul 3 (17): heap_array[(3-1)//2] = heap_array[1] = 15