Рубрики

Очередь кучи (или heapq) в Python

Структура данных кучи в основном используется для представления очереди с приоритетами . В Python это доступно с помощью модуля « heapq ». Свойство этой структуры данных в python заключается в том, что каждый раз выталкивается наименьший элемент кучи (min heap) . Всякий раз, когда элементы перемещаются или выталкиваются, структура кучи сохраняется . Элемент heap [0] также каждый раз возвращает наименьший элемент.

Операции на куче:

1. heapify (итерируемый) : — эта функция используется для преобразования итерируемого в структуру данных кучи . т.е. в порядке кучи.

2. heappush (heap, ele) : — Эта функция используется для вставки элемента, упомянутого в его аргументах, в кучу. Порядок корректируется , так что структура кучи сохраняется .

3. heappop (heap) : — эта функция используется для удаления и возврата наименьшего элемента из кучи. Порядок корректируется , так что структура кучи сохраняется .

# Python-код для демонстрации работы
# heapify (), heappush () и heappop ()

  
# импорт "heapq" для реализации очереди кучи

import heapq

  
# инициализирующий список

li = [5, 7, 9, 1, 3]

  
# используя heapify для преобразования списка в кучу
heapq.heapify(li)

  
# печать созданной кучи

print ("The created heap is : ",end="")

print (list(li))

  
# использование heappush () для вставки элементов в кучу
# толкает 4

heapq.heappush(li,4)

  
# печать измененной кучи

print ("The modified heap after push is : ",end="")

print (list(li))

  
# с помощью heappop () вывести наименьший элемент

print ("The popped and smallest element is : ",end="")

print (heapq.heappop(li))

Выход :

The created heap is : [1, 3, 9, 7, 5]
The modified heap after push is : [1, 3, 4, 7, 5, 9]
The popped and smallest element is : 1

4. heappushpop (heap, ele) : — Эта функция объединяет функции операций push и pop в одном операторе, повышая эффективность. Порядок кучи сохраняется после этой операции.

5. heapreplace (heap, ele) : — Эта функция также вставляет и вставляет элемент в одну инструкцию, но она отличается от функции выше. При этом сначала извлекается элемент, а затем элемент — push.ie, может быть возвращено значение, большее, чем значение push.

# Python-код для демонстрации работы
# heappushpop () и heapreplce ()

  
# импорт "heapq" для реализации очереди кучи

import heapq

  
# инициализация списка 1

li1 = [5, 7, 9, 4, 3]

  
# инициализация списка 2

li2 = [5, 7, 9, 4, 3]

  
# используя heapify () для преобразования списка в кучу
heapq.heapify(li1)
heapq.heapify(li2)

  
# использование heappushpop () для одновременного нажатия и извлечения элементов
# хлопает 2

print ("The popped item using heappushpop() is : ",end="")

print (heapq.heappushpop(li1, 2))

  
# использование heapreplace () для одновременного нажатия и извлечения элементов
# хлопает 3

print ("The popped item using heapreplace() is : ",end="")

print (heapq.heapreplace(li2, 2))

Выход :

The popped item using heappushpop() is : 2
The popped item using heapreplace() is : 3

6. nlargest (k, iterable, key = fun) : — Эта функция используется для возврата k наибольших элементов из указанной повторяемой и удовлетворяющих ключу, если упомянуто.

7. nsmallest (k, iterable, key = fun) : — Эта функция используется для возврата k наименьших элементов из указанного повторяемого и удовлетворяющего ключу, если упомянуто.

# Python-код для демонстрации работы
# nlargest () и nsmallest ()

  
# импорт "heapq" для реализации очереди кучи

import heapq

  
# инициализирующий список

li1 = [6, 7, 9, 4, 3, 5, 8, 10, 1]

  
# используя heapify () для преобразования списка в кучу
heapq.heapify(li1)

  
# используя самое большое, чтобы напечатать 3 самых больших числа
# печатает 10, 9 и 8

print("The 3 largest numbers in list are : ",end="")

print(heapq.nlargest(3, li1))

  
# используя nsmallest для печати 3 самых маленьких чисел
# печатает 1, 3 и 4

print("The 3 smallest numbers in list are : ",end="")

print(heapq.nsmallest(3, li1))

Выход :

The 3 largest numbers in list are : [10, 9, 8]
The 3 smallest numbers in list are : [1, 3, 4]

Эта статья предоставлена Манджитом Сингхом . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Очередь кучи (или heapq) в Python

0.00 (0%) 0 votes