A számítástechnikában a kupac egy speciális fa típusú adatstruktúra , amely kielégíti a kupac tulajdonságot: ha B az A csomópont gyermekcsomópontja , akkor kulcs( A ) ≥ kulcs( B ). Ebből következik, hogy a legnagyobb kulcsú elem mindig a kupac gyökércsomópontja, ezért néha az ilyen kupacokat max-halomnak nevezik (vagy ha az összehasonlítás megfordul, mindig a legkisebb elem lesz a gyökércsomópont, az ilyen kupacokat ún. min-halmok ). Nincs korlátozás arra vonatkozóan, hogy az egyes kupaccsomópontok hány gyermekcsomóponttal rendelkeznek, bár a gyakorlatban ez a szám általában nem több, mint kettő. A kupac a prioritási sornak nevezett absztrakt adattípus leghatékonyabb megvalósítása . A halmok kulcsfontosságúak néhány hatékony gráfalgoritmusban , például Dijkstra algoritmusában a d-halmok és a heapsort esetében .
A kupac adatszerkezetet nem szabad összetéveszteni a kupac fogalmával a dinamikus memóriafoglalásban . A kifejezést először kifejezetten adatstruktúrákra használták. Egyes korai népszerű programozási nyelvek, mint például a LISP , dinamikus memóriaelosztást biztosítottak a "kupac" adatstruktúra segítségével, amely a lefoglalt memóriamennyiség nevét adta. [1] .
A kupacokat általában tömbként valósítják meg, így nincs szükség mutatókra az elemei között.
A következő műveleteket általában a kupacokon hajtják végre:
Az alábbiakban becslések találhatók a számítások időbeli összetettségére vonatkozóan bizonyos típusú kupacokon végzett műveleteknél. [1] Ahol egy érték csillaggal van megjelölve, a becslés amortizációs elemzésen (legrosszabb idő) alapul, ellenkező esetben a becslés a szokásos legrosszabb eset. O(F) aszimptotikus felső korlátot ad, Θ(F) pedig aszimptotikusan pontos becslést (lásd az "O" nagy és az "o" kicsi jelölést ). A műveletnevek a min-halomhoz vannak kiválasztva.
(*) Amortizációs idő
(**) Ahol n a legnagyobb kupac mérete
Ne feledje, hogy a "Brodal's queue" egy párhuzamos prioritási sor megvalósítása, amelyet egy Gert Brodal vezette csoport fejlesztett ki. [3]
A kupac adatstruktúráknak számos felhasználási módja van.
Egy teljes és majdnem teljes bináris kupac nagyon hatékonyan ábrázolható egy indextömb segítségével . Az első (vagy utolsó) elem tartalmazza a gyökért. A tömb következő két eleme tartalmazza a gyökér gyermekcsomópontjait. A következő négy elem két csomópontból négy gyermeket tartalmaz, amelyek a gyökér gyermekei, és így tovább. Így a szintcsomópont gyermekei a npozíciókban 2nés 2n+1az egyből indexelt tömbnél, vagy a pozíciókban 2n+1és 2n+2egy indexelt tömbnél helyezkednek el. nulláról. Ez lehetővé teszi, hogy felfelé vagy lefelé mozogjon a fában egyszerű tömbindex számítások elvégzésével. A halomkiegyenlítés a nem megfelelő elemek átrendezésével történik. Mivel a kupacot extra memóriával nem rendelkező tömbből építhetjük fel (például csomópontokhoz), a heapsort segítségével rendezhetjük a tömböt a helyére.
Adatstruktúrák | |
---|---|
Listák | |
fák | |
Számít | |
Egyéb |
Az operációs rendszerek szempontjai | |||||
---|---|---|---|---|---|
| |||||
Típusok |
| ||||
Sejtmag |
| ||||
Folyamatmenedzsment _ |
| ||||
Memóriakezelés és címzés | |||||
Betöltési és inicializálási eszközök | |||||
Héj | |||||
Egyéb | |||||
Kategória Wikimedia Commons Wikikönyvek Wikiszótár |