Kiejtés

  • IPA: [ ˈkupɒt͡s]

Főnév

kupac

  1. (informatika) A kupac (más néven halom) egy speciális fa alapú adatszerkezet, amely eleget tesz a kupac tulajdonságnak, azaz ha a B csúcs fia az A csúcsnak, akkor kulcs(A) ≥ kulcs(B) - és ebben az esetben a kupacot max-kupacnak (vagy maximum-kupacnak) nevezzük. Az összehasonlítás megfordításával min-kupacot (azaz minimum-kupacot) kapunk, melyben minden A csúcsból leszármazó B csúcshoz kulcs(B) ≥ kulcs(A). A kupac egy maximálisan hatékony implementációja a prioritási sor adatszerkezetnek.

Íme egy egyszerű kupac (heap) implementáció Pythonban a beépített heapq modul használatával, valamint egy saját megvalósítás is, ha mélyebb megértést szeretnél.



1. Python beépített heapq modul

A Python heapq modulja egy min-heap megvalósítást biztosít.

import heapq

# Kezdeti üres kupac
heap = []

# Elemek beszúrása a kupacba
heapq.heappush(heap, 10)
heapq.heappush(heap, 1)
heapq.heappush(heap, 5)

# Kupac tartalma
print("Heap tartalma:", heap)  # Min-heap, nem feltétlen rendezett lista, de a legkisebb az első.

# Legkisebb elem kivétele
min_elem = heapq.heappop(heap)
print("Kivett legkisebb elem:", min_elem)

# Csak a legkisebb elem megnézése
peek = heap[0]
print("Legkisebb elem (megnézve):", peek)

# Tömbből kupac készítése
array = [10, 1, 5, 7, 2]
heapq.heapify(array)
print("Kupacosított tömb:", array)

2. Max-Heap megvalósítása a heapq modul segítségével

Mivel a heapq csak min-heap-et támogat, egy egyszerű trükk segítségével megvalósíthatunk egy max-heap-et: az elemeket negatív előjellel tároljuk.

import heapq

# Kezdeti üres kupac
max_heap = []

# Elemek beszúrása (negatív előjellel)
heapq.heappush(max_heap, -10)
heapq.heappush(max_heap, -1)
heapq.heappush(max_heap, -5)

# Kupac tartalma (negatív számok, de logikailag max-heap)
print("Max-heap tartalma (negatív):", max_heap)

# Legnagyobb elem kivétele
max_elem = -heapq.heappop(max_heap)
print("Kivett legnagyobb elem:", max_elem)

3. Saját bináris heap implementáció

Ha szeretnél saját min-heap-et megvalósítani, íme egy egyszerű példa:

class MinHeap:
    def __init__(self):
        self.heap = []

    def push(self, val):
        """Elem beszúrása a kupacba"""
        self.heap.append(val)
        self._bubble_up(len(self.heap) - 1)

    def pop(self):
        """Legkisebb elem kivétele a kupacból"""
        if len(self.heap) == 0:
            raise IndexError("Üres a kupac!")
        if len(self.heap) == 1:
            return self.heap.pop()

        min_val = self.heap[0]
        self.heap[0] = self.heap.pop()
        self._bubble_down(0)
        return min_val

    def peek(self):
        """Legkisebb elem megtekintése"""
        if not self.heap:
            raise IndexError("Üres a kupac!")
        return self.heap[0]

    def _bubble_up(self, index):
        """Buborékolás felfelé"""
        parent = (index - 1) // 2
        while index > 0 and self.heap[index] < self.heap[parent]:
            self.heap[index], self.heap[parent] = self.heap[parent], self.heap[index]
            index = parent
            parent = (index - 1) // 2

    def _bubble_down(self, index):
        """Buborékolás lefelé"""
        child = 2 * index + 1
        while child < len(self.heap):
            # Kiválasztjuk a kisebbik gyermeket
            if child + 1 < len(self.heap) and self.heap[child + 1] < self.heap[child]:
                child += 1

            if self.heap[index] <= self.heap[child]:
                break

            self.heap[index], self.heap[child] = self.heap[child], self.heap[index]
            index = child
            child = 2 * index + 1

# Használat
heap = MinHeap()
heap.push(10)
heap.push(1)
heap.push(5)

print("Kupac csúcsa:", heap.peek())  # 1
print("Kivett legkisebb:", heap.pop())  # 1
print("Kivett legkisebb:", heap.pop())  # 5

Ezekkel a megoldásokkal könnyen kezelhetsz kupac alapú prioritási sorokat Pythonban!

Fordítások

  • kupac - Értelmező szótár (MEK)
  • kupac - Etimológiai szótár (UMIL)
  • kupac - Szótár.net (hu-hu)
  • kupac - DeepL (hu-de)
  • kupac - Яндекс (hu-ru)
  • kupac - Google (hu-en)
  • kupac - Helyesírási szótár (MTA)
  • kupac - Wikidata
  • kupac - Wikipédia (magyar)

Főnév

kupac hn (cirill írás купац)

  1. vásárló
  • kupac - Lingea (hr-hu)
  • kupac - Lingea (sr-hu)
  • kupac - Hrvatski jezični portal
  • kupac - Szótár.net (sr-hu)
  • kupac - Яндекс (hr-ru)
  • kupac - Wikipédia (horvát)
  • kupac - Wikipédia (szerb)
  • kupac - Wikidata
  • kupac - Wikipédia (szerbhorvát)