package
0.0.0-20241221191246-b80a13d7bbe0
Repository: https://github.com/yvv4git/go-algorithms.git
Documentation: pkg.go.dev

# README

Binary Heap

Info

Бинарная куча (binary heap) — это структура данных, которая представляет собой полное бинарное дерево, в котором каждый узел удовлетворяет определенному свойству кучи. Это свойство может быть либо свойством минимальной кучи (min-heap), либо свойством максимальной кучи (max-heap).

Бинарные кучи часто используются в алгоритмах, требующих эффективного доступа к минимальному или максимальному элементу, таких как алгоритмы сортировки (например, пирамидальная сортировка), алгоритмы на графах (например, алгоритм Дейкстры для поиска кратчайших путей) и других.

Бинарная куча обычно реализуется с использованием массива, что обеспечивает эффективное использование памяти и быстрый доступ к элементам. Пространственная сложность самой структуры кучи составляет O(n), где n — количество элементов в куче, так как каждый элемент хранится в массиве.

В минимальной куче (min-heap) каждый узел имеет значение, которое меньше или равно значениям его потомков. В максимальной куче (max-heap) каждый узел имеет значение, которое больше или равно значениям его потомков.

Основные операции

Основные операции с бинарной кучей включают:

  • Вставка элемента (insert) — добавление нового элемента в кучу с сохранением свойства кучи.
  • Извлечение минимального или максимального элемента (extract-min или extract-max) — удаление корневого элемента кучи и восстановление свойства кучи.
  • Проверка, пуста ли куча (is-empty) — определение, содержит ли куча элементы.
  • Получение минимального или максимального элемента без удаления (peek) — возвращение корневого элемента кучи без изменения структуры кучи.

Сложность методов

Insert

  • Временная сложность: O(log n), где n — количество элементов в куче. Это связано с тем, что после вставки элемента в конец кучи, может потребоваться "всплытие" (heapify-up) элемента до тех пор, пока не будет восстановлено свойство кучи. В худшем случае элемент всплывает до корня, что требует log n шагов.

  • Пространственная сложность: O(1), так как вставка элемента не требует дополнительной памяти, кроме небольшого количества переменных для хранения индексов.

Extract-min or Extract-max

  • Временная сложность: O(log n). После удаления корневого элемента, последний элемент кучи перемещается в корень, и затем может потребоваться "просеивание" (heapify-down) элемента до тех пор, пока не будет восстановлено свойство кучи. В худшем случае элемент просеивается до самого нижнего уровня, что требует log n шагов.

  • Пространственная сложность: O(1), так как извлечение элемента не требует дополнительной памяти, кроме небольшого количества переменных для хранения индексов.

IsEmpty

  • Временная сложность: O(1). Проверка пустоты кучи заключается в проверке количества элементов в куче.
  • Пространственная сложность: O(1), так как эта операция не требует дополнительной памяти.

Peek

  • Временная сложность: O(1). Получение корневого элемента кучи не изменяет структуру кучи и не требует дополнительных операций.
  • Пространственная сложность: O(1), так как эта операция не требует дополнительной памяти.