Middle
Mi az a halom (adatszerkezetek kontextusában)?
sobes.tech MI
Válasz az MI-től
Egy halom (heap) egy speciális fa, amely adatstruktúraként használható. A halom fő tulajdonsága a részleges rendezés: minden csúcs esetében a szülő csúcs értéke nagyobb vagy egyenlő, mint bármelyik gyermekének értéke (max-heap), vagy kisebb vagy egyenlő (min-heap).
Fő jellemzők:
- Kettős fa: Általában kettős faként valósítják meg, ahol minden csúcsnak legfeljebb két leszármazottja van.
- Teljes kettős fa: Minden szinten, kivéve esetleg az utolsót, a fa teljesen kitöltött. Az utolsó szinten lévő csúcsokat balról jobbra töltik ki. Ez lehetővé teszi a halom hatékony tárolását tömbként.
- A halom tulajdonsága:
- Max-heap: Minden csúcs értéke nagyobb vagy egyenlő, mint leszármazottainak értékei. A legnagyobb elem mindig a gyökérben található.
- Min-heap: Minden csúcs értéke kisebb vagy egyenlő, mint leszármazottainak értékei. A legkisebb elem mindig a gyökérben található.
Fő műveletek a halommal:
- Elem beszúrása: Új elem hozzáadása és a halom tulajdonságának fenntartása.
- Elem törlése: A gyökér elem törlése (legnagyobb vagy legkisebb, a halom típusától függően), és a halom tulajdonságának fenntartása.
- Halom építése: Halom építése tömbből.
A halom alkalmazásai:
- Rendezés: Halom rendezési algoritmus (Heapsort).
- Prioritási sorok: Hatékony megvalósítás olyan sorokhoz, ahol az elemek prioritás szerint kerülnek feldolgozásra.
- Keresési algoritmusok: Például a k-dik legnagyobb elem keresése.
- Graf algoritmusok: Például Dijkstra algoritmusa.
A halom tömbben való ábrázolása:
Mivel a halom teljes kettős fa, hatékonyan tárolható tömbben pointerek használata nélkül.
- Ha egy csúcs indexe
i, akkor bal gyermekének indexe2*i + 1. - Jobb gyermekének indexe
2*i + 2. - Szülője indexe
(i - 1) / 2.
# Példa egy min-heap tömbben való ábrázolására
heap_array = [10, 15, 20, 17, 25, 30]
# Gyökér: heap_array[0] = 10
# A gyökér bal gyermek: heap_array[2*0 + 1] = heap_array[1] = 15
# A gyökér jobb gyermek: heap_array[2*0 + 2] = heap_array[2] = 20
# Az index 3 (17) elem szülője: heap_array[(3-1)//2] = heap_array[1] = 15