Menu
Coddy logo textTech

What is a Heap?

Урок 2 из 14 курса Кучи и очереди с приоритетом — Структуры данных №7 на Coddy.

Куча — это древовидная структура данных, которая подчиняется одному простому инварианту: каждый родитель меньше (или равен) своих потомков. Наименьшее значение всегда находится в корне, готовое к чтению за O(1). Эта конкретная разновидность называется min-heap (минимальная куча); зеркальное отображение с инвариантом «наибольшее в корне» — это max-heap (максимальная куча).

Хитрость заключается в способе хранения. Хотя мы представляем её как дерево, куча располагается в плоском массиве. Для узла с индексом i:

  • Его родитель находится по индексу (i - 1) / 2.
  • Его левый потомок находится по индексу 2 * i + 1.
  • Его правый потомок находится по индексу 2 * i + 2.

Никаких указателей, никаких объектов узлов: только математика индексов. Это делает кучи очень эффективными для кэша и простыми в реализации.

 

Пять основных операций над min-heap:

  1. Peek: Возвращает наименьшее значение (корень).
  2. Insert: Добавляет значение и поднимает его («всплытие») на нужное место.
  3. ExtractMin: Удаляет и возвращает наименьшее значение.
  4. Size: Возвращает количество хранящихся значений.
  5. IsEmpty: Проверяет, пуста ли куча.

 

Давайте создадим класс MinHeap!

Попробуйте сами

В этом уроке нет задания по программированию.

Все уроки раздела Кучи и очереди с приоритетом — Структуры данных №7