logo

Черга купи (або heapq) у Python

Python.

Створення простої купи

The heapify (ітерований) :- Ця функція використовується для перетворити iterable у купу структура даних. тобто в порядку купи.



Python3






# importing 'heapq' to implement heap queue> import> heapq> # initializing list> li>=> [>5>,>7>,>9>,>1>,>3>]> # using heapify to convert list into heap> heapq.heapify(li)> # printing created heap> print> (>'The created heap is : '>,(>list>(li)))>



>

>

Вихід

The created heap is : [1, 3, 9, 7, 5]>

Ефективне додавання та видалення елементів

    heappush(heap, ele) : Ця функція використовується для вставлення елемента, згаданого в її аргументах, у купу. The порядок регулюється, щоб структура купи зберігалася. heappop(heap) : Ця функція використовується для видалення та повернення найменшого елемента з купи. Порядок регулюється, щоб структура купи зберігалася.

Python3




# importing 'heapq' to implement heap queue> import> heapq> # initializing list> li>=> [>5>,>7>,>9>,>1>,>3>]> # using heapify to convert list into heap> heapq.heapify(li)> # printing created heap> print>(>'The created heap is : '>, end>=>'')> print>(>list>(li))> # using heappush() to push elements into heap> # pushes 4> heapq.heappush(li,>4>)> # printing modified heap> print>(>'The modified heap after push is : '>, end>=>'')> print>(>list>(li))> # using heappop() to pop smallest element> 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>

Додавання та вилучення одночасно

    heappushpop(heap, ele) :- Ця функція поєднує в одному операторі операції push і pop, підвищуючи ефективність. Після цієї операції порядок купи зберігається. heapreplace(heap, ele) :- Ця функція також вставляє та висовує елементи в одному операторі, але вона відрізняється від наведеної вище функції. У цьому випадку елемент спочатку висувається, а потім штовхається. тобто можна повернути значення, більше за надіслане значення. heapreplace() повертає найменше початкове значення у купі незалежно від надісланого елемента на відміну від heappushpop().

Python3




# importing 'heapq' to implement heap queue> import> heapq> # initializing list 1> li1>=> [>5>,>1>,>9>,>4>,>3>]> # initializing list 2> li2>=> [>5>,>7>,>9>,>4>,>3>]> # using heapify() to convert list into heap> heapq.heapify(li1)> heapq.heapify(li2)> # using heappushpop() to push and pop items simultaneously> # pops 2> print>(>'The popped item using heappushpop() is : '>, end>=>'')> print>(heapq.heappushpop(li1,>2>))> # using heapreplace() to push and pop items simultaneously> # pops 3> print>(>'The popped item using heapreplace() is : '>, end>=>'')> print>(heapq.heapreplace(li2,>2>))>

>

>

Вихід

The popped item using heappushpop() is : 1 The popped item using heapreplace() is : 3>

Знайдіть найбільший і найменший елементи з Heap у Python

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

Python3

java випадкова математика випадкова




# Python code to demonstrate working of> # nlargest() and nsmallest()> # importing 'heapq' to implement heap queue> import> heapq> # initializing list> li1>=> [>6>,>7>,>9>,>4>,>3>,>5>,>8>,>10>,>1>]> # using heapify() to convert list into heap> heapq.heapify(li1)> # using nlargest to print 3 largest numbers> # prints 10, 9 and 8> print>(>'The 3 largest numbers in list are : '>, end>=>'')> print>(heapq.nlargest(>3>, li1))> # using nsmallest to print 3 smallest numbers> # prints 1, 3 and 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]>

приклад:

Python3




import> heapq> # Initialize a list with some values> values>=> [>5>,>1>,>3>,>7>,>4>,>2>]> # Convert the list into a heap> heapq.heapify(values)> # Print the heap> print>(>'Heap:'>, values)> # Add a new value to the heap> heapq.heappush(values,>6>)> # Print the updated heap> print>(>'Heap after push:'>, values)> # Remove and return the smallest element from the heap> smallest>=> heapq.heappop(values)> # Print the smallest element and the updated heap> print>(>'Smallest element:'>, smallest)> print>(>'Heap after pop:'>, values)> # Get the n smallest elements from the heap> n_smallest>=> heapq.nsmallest(>3>, values)> # Print the n smallest elements> print>(>'Smallest 3 elements:'>, n_smallest)> # Get the n largest elements from the heap> n_largest>=> heapq.nlargest(>2>, values)> # Print the n largest elements> print>(>'Largest 2 elements:'>, n_largest)>

>

>

Вихід

Heap: [1, 4, 2, 7, 5, 3] Heap after push: [1, 4, 2, 7, 5, 3, 6] Smallest element: 1 Heap after pop: [2, 4, 3, 7, 5, 6] Smallest 3 elements: [2, 3, 4] Largest 2 elements: [7, 6]>

Ця програма створює чергу купи за допомогою модуля heapq у Python і виконує різні операції, такі як перетворення списку на купу, додавання нового значення до купи, видалення найменшого елемента з купи, отримання n найменших і n найбільших елементів із купа.

Примітка що модуль heapq у Python надає функції для виконання операцій із купою зі списками на місці, без створення окремої структури даних для купи. Модуль heapq є ефективним і простим у використанні, що робить його популярним вибором для реалізації пріоритетних черг та інших структур даних у Python.

Переваги використання черги купи (або heapq) у Python:

    Ефективність: черга купи — це високоефективна структура даних для керування пріоритетними чергами та купами в Python. Він забезпечує логарифмічну складність часу для багатьох операцій, що робить його популярним вибором для багатьох програм. Ефективне використання простору: черги купи ефективно використовують простір, оскільки вони зберігають елементи в представленні на основі масиву, мінімізуючи накладні витрати, пов’язані зі структурами даних на основі вузлів, такими як зв’язані списки. Простий у використанні: черги купи в Python прості у використанні, завдяки простому та інтуїтивно зрозумілому API, який полегшує виконання базових операцій, таких як вставлення, видалення та отримання елементів із купи. Гнучкість: черги купи в Python можна використовувати для реалізації різних структур даних, таких як черги пріоритетів, купи та бінарні дерева, що робить їх універсальним інструментом для багатьох програм.

Недоліки використання черги купи (або heapq) у Python:

    Обмежена функціональність: черги купи в основному призначені для керування пріоритетними чергами та купами та можуть не підходити для складніших структур даних і алгоритмів. Без довільного доступу: черги купи не підтримують довільний доступ до елементів, що ускладнює доступ до елементів у середині купи або змінює елементи, які не знаходяться у верхній частині купи. Без сортування: черги купи не підтримують сортування, тому, якщо вам потрібно сортувати елементи в певному порядку, вам потрібно буде використовувати іншу структуру даних або алгоритм. Небезпечно для потоків: черги купи не безпечні для потоків, що означає, що вони можуть не підходити для використання в багатопотокових програмах, де синхронізація даних є критичною.

Загалом, черги купи є високоефективною та гнучкою структурою даних для керування пріоритетними чергами та купами в Python, але можуть мати обмежену функціональність і не підходити для всіх програм.