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, але можуть мати обмежену функціональність і не підходити для всіх програм.