Рубрики
Без рубрики

Реализация Python Max Heap | Python Max Heap

В python max heap данные хранятся таким образом, что каждый родительский элемент больше дочернего. Он используется в очередях приоритетов.

Автор оригинала: Team Python Pool.

Реализация Python Max Heap | Python Max Heap

Структуры данных-это способы организации или эффективного хранения различных типов данных. Они являются неотъемлемой частью многих различных алгоритмов и позволяют нам, программистам, эффективно поддерживать данные. Мы ищем способ хранения наших данных таким образом, чтобы он требовал минимального потребления памяти, .And время, затраченное на извлечение данных из него, должно быть минимальным. Одной из таких важных структур данных является python max heap.

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

Что такое Max Heap в Python и почему он используется?

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

Важность Python Min Heap

В интервью по разработке программного обеспечения много вопросов задается по этим кучам. Причина этого заключается в том, что кучи очень полезны при реализации очередей приоритетов. И приоритетные очереди важны в Операционных системах для приоритизации задач.Расстановка приоритетов задач означает, на каких задачах операционная система должна сосредоточиться в первую очередь, а на каких-нет. Это происходит из-за ограничения доступности ресурсов в многозадачной системе. Для операционной системы важно решить, как распределить ресурсы для всех задач таким образом, чтобы каждое задание было выполнено в порядке важности.Короче говоря, приоритетная очередь полезна для балансировки нагрузки.

Представление кучи Python Max

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

Предположим, что у нас есть максимальная куча-

python max heap
python max heap

Он может быть представлен в массиве как-[10 ,9 ,7 ,5 ,6 ,2 ]

Мы видим, что элементы расположены таким образом, что каждый ребенок имеет меньшую ценность, чем его родитель.

Еще одна важная вещь, которую мы должны знать, это то, что родитель ребенка находится в индексе-

Arr[(i-1)/2]

Где Arr – массив- [10, 9, 7 ,5 ,6, 2]

“я” – это индекс ребенка.

Так, например, родительским узлом для) является-

Арр[(3-1)/2][2/2)][1]

Примечание – Здесь индекс начинается с “0”.

Аналогично, если мы хотим найти дочерние элементы определенного родительского узла, формула выглядит следующим образом::

Слева[2*i+ 1]

Где родительского узла.

Предположим, мы хотим найти левого ребенка 10 лет)

Арр[2*0+1][1]

Правый ребенок = Arr[2*i+2]

Предположим, мы хотим найти правильный дочерний элемент элемента ‘9’)

Арр[(2*1)+1][2+1][3]

Мы рассмотрели почти все важное в теоретической части о максимальной куче, и пришло время перейти непосредственно к части реализации.

Реализация Max Heap в Python

Операции:

  1. push() – Мы можем вставить каждый элемент в кучу. Мы всегда добавляем элемент в конце дерева. Временная сложность операции равна O(log(n)). Каждый раз, когда мы делаем вставку, мы должны убедиться, что куча все еще находится в правильном порядке, проверяя значение нового элемента с родительским.
  2. Pop ()– Мы можем удалить корень кучи. Мы должны поменять корень с последним элементом и снова проверить, все ли в порядке с кучей. А если нет, то мы должны сделать его кучей. Временная сложность этой операции также равна O(log(n)).
  3. Peek () – Используя peek, мы можем посмотреть на первое значение кучи (самое большое значение). Время href=”https://en.wikipedia.org/wiki/Complexity”>сложность операции peek равна O(1). href=”https://en.wikipedia.org/wiki/Complexity”>сложность операции peek равна O(1).

Программа Max Heap на Python

class Max_Heap:
    # initializing the constructor with arr (array that we have to convert into heap). The default value is None([])
    def __init__(self, arr=[]):
        # Initializing the heap with no elements in it
        self._heap = []
        
        # If the array by the user is not empty, push all the elements
        if arr is not None:
            for root in arr:
                self.push(root)

# push is used to insert new value to the heap
    def push(self, value):
        # Appending the value given by user at the last
        self._heap.append(value)
        # Calling the bottom_up() to ensure heap is in order.
        # here we are passing our heap 
        _bottom_up(self._heap, len(self) - 1)

# push is used to insert new value to the heap
    def pop(self):
        if:
        # swapping the root value with the last value.

            _swap(self._heap, len(self) - 1, 0)
        # storing the popped value in the root variable

           ._heap.pop()

        #Calling the top_down function to ensure that the heap is still in order 
            _top_down(self._heap, 0)
            
        else:
           
        return root

# It tells the length of the heap
    def __len__(self):
        return len(self._heap)
# print the first element (The root)
    def peek(self):
        if:
            return(self._heap[0])
        else:
            return("heap is empty")


# Swaps value in heap between i and j index
def _swap(L, i, j):
    L[i],[j], L[i]

# This is a private function used for traversing up the tree and ensuring that heap is in order
def _bottom_up(heap, index):
    # Finding the root of the element
    root_index = (index - 1) // 2
    
    # If we are already at the root node return nothing
    if root_index < 0:
        return

    # If the current node is greater than the root node, swap them
    if heap[index] > heap[root_index]:
        _swap(heap, index,root_index)
    # Again call bottom_up to ensure the heap is in order
        _bottom_up(heap, root_index)

# This is a private function which ensures heap is in order after root is popped
def _top_down(heap, index):
    * index + 1
    # If we are at the end of the heap, return nothing
    if child_index(heap):
        return

    # For two children swap with the larger one
    if child_index + 1 < len(heap) and heap[child_index] < heap[child_index + 1]:
        child_index

    # If the child node is smaller than the current node, swap them
    if heap[child_index] > heap[index]:
        _swap(heap, child_index, index)
        _top_down(heap, child_index)
# Making the object of the Heap class and passing the array to convert into heap([1,2,3,4,5,6])
# Checking the value at top
print("Value at top:",m.peek())
# pushing elements into heap
m.push(1)
m.push(11)
print("Value at top:",m.peek())
# Deleting the root node
print("Root popped:",m.pop())
m.push(7)
m.push(9)
m.push(15)
print("Value at top:",m.peek())
print("Root popped:",m.pop())

Выход-

Value at top: 6
Value at top: 11
Root popped: 11
Value at top: 15
Root popped: 15

Результирующая куча-

python max heap
python max heap

Должен Читать

  • Как преобразовать строку в нижний регистр в
  • Как вычислить Квадратный корень
  • Пользовательский ввод | Функция ввода () | Ввод с клавиатуры
  • Лучшая книга для изучения Python

Вывод

Мы изучили реализацию max heap в python с нуля, потому что для понимания работы за любой структурой данных мы должны знать работу за ней. В операционных системах использование сортировки кучи с использованием кучи для распределения ресурсов на задачи с более высоким весом имеет больший приоритет при обработке.

Попробуйте запустить программы на вашей стороне и дайте нам знать, если у вас есть какие-либо вопросы.

Счастливого кодирования!