Двоичная куча — это двоичное дерево со следующими свойствами.
1) Это полное дерево (все уровни полностью заполнены, за исключением, возможно, последнего уровня, и на последнем уровне все ключи как можно левее). Это свойство Binary Heap делает их пригодными для хранения в массиве.
2) Двоичная куча — это либо минимальная куча, либо максимальная куча. В минимальной двоичной куче ключ в корневом каталоге должен быть минимальным среди всех ключей, присутствующих в двоичной куче. Одно и то же свойство должно быть рекурсивно истинным для всех узлов в двоичном дереве. ФИЛЬМЫ ПОХОЖИЕ НА MinHeap
Примеры Min Heap:
10 10 / \ / \ 20 100 15 30 / / \ / \ 30 40 50 100 40
Как представлена двоичная куча?
Двоичная куча — это полное двоичное дерево. Бинарная куча обычно представляется в виде массива.
- Корневой элемент будет в Arr [0].
- Ниже в таблице приведены индексы других узлов для i- го узла, то есть Arr [i]:
Arr[(i-1)/2] Returns the parent node Arr[(2*i)+1] Returns the left child node Arr[(2*i)+2] Returns the right child node
Метод обхода, используемый для достижения представления Array, — Level Order

Пожалуйста, обратитесь к представлению массива двоичной кучи для деталей.
Применение кучи:
1) Сортировка кучи : Сортировка кучи использует двоичную кучу для сортировки массива за O (nLogn).
2) Приоритетная очередь. Приоритетные очереди могут быть эффективно реализованы с использованием двоичной кучи, поскольку она поддерживает операции вставки (), удаления () и extractmax (), lowerKey () за время O (logn). Биномоальная куча и куча Фибоначчи — это разновидности бинарной кучи. Эти варианты выполняют объединение также эффективно.
3) Алгоритмы графа: очереди приоритетов особенно используются в алгоритмах графа, таких как кратчайший путь Дейкстры и минимальное остовное дерево Прима .
4) Многие проблемы могут быть эффективно решены с помощью кучи. Смотрите ниже, например.
а) K-й по величине элемент в массиве .
б) Сортировать почти отсортированный массив /
в) объединить отсортированные массивы .
Операции на Min Heap:
1) getMini (): возвращает корневой элемент Min Heap. Сложность времени этой операции O (1).
2) extractMin (): удаляет минимальный элемент из MinHeap. Сложность времени этой операции равна O (Logn), так как эта операция должна поддерживать свойство heap (вызывая heapify ()) после удаления root.
3) lowerKey (): уменьшает значение ключа. Временная сложность этой операции составляет O (Logn). Если значение ключа уменьшается для узла больше, чем для родительского узла, нам ничего не нужно делать. В противном случае нам нужно пройти вверх, чтобы исправить нарушенное свойство кучи.
4) insert (): для вставки нового ключа требуется время O (Logn). Мы добавляем новый ключ в конце дерева. Если новый ключ больше, чем его родитель, тогда нам не нужно ничего делать. В противном случае нам нужно пройти вверх, чтобы исправить нарушенное свойство кучи.
5) delete (): удаление ключа также занимает O (Logn) время. Мы заменяем ключ, который будет удален, минимальным бесконечным, вызывая lowerKey (). После lowerKey (), минус бесконечное значение должно достигнуть корня, поэтому мы вызываем extractMin () для удаления ключа.
Ниже приведена реализация основных операций кучи.
|
питон
|
Выход:
2 4 1
Практика кодирования в куче
Все статьи в куче
Тест на кучу
PriorityQueue: реализация двоичной кучи в библиотеке Java
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- k самых больших (или самых маленьких) элементов в массиве | добавлен метод Min Heap
- Приложения структуры данных кучи
- Турнирное дерево (Winner Tree) и бинарная куча
- Время Сложность построения кучи
- Биноминальная куча
- Почему двоичная куча предпочтительнее BST для приоритетной очереди?
- Куча Фибоначчи | Комплект 1 (Введение)
- Как проверить, представляет ли данный массив двоичную кучу?
- Проверьте, является ли данное двоичное дерево кучей
- Обзор структур данных | Набор 2 (двоичное дерево, BST, куча и хэш)
- К-рый Куча
- Конвертировать Min Heap в Max Heap
- Куча в C ++ STL | make_heap (), push_heap (), pop_heap (), sort_heap (), is_heap, is_heap_until ()
- Реализация биномиальной кучи
- Где практически используется сортировка кучи?
0.00 (0%) 0 votes