logo

Fronta haldy (nebo heapq) v Pythonu

Python .

Vytvoření jednoduché haldy

The heapify (opakovatelné) :- Tato funkce se používá převést iterovatelné na hromadu datová struktura. tj. v pořadí hromady.

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)))>

>

>

Výstup

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

Efektivní přidávání a otevírání položek

    heappush(heap, ele) : Tato funkce se používá k vložení prvku uvedeného v jeho argumentech do haldy. The pořadí je upraveno tak, aby byla zachována struktura haldy. heappop(heap) : Tato funkce se používá k odstranění a vrácení nejmenšího prvku z haldy. Pořadí je upraveno tak, aby byla zachována struktura haldy.

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))>

>

>

Výstup

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>

Připojování a vyskakování zároveň

    heappushpop(heap, ele) :- Tato funkce kombinuje fungování jak push, tak pop operací v jednom příkazu, čímž zvyšuje efektivitu. Po této operaci je zachováno pořadí haldy. heapreplace(heap, ele) :- Tato funkce také vkládá a vyskakuje prvky do jednoho příkazu, ale liší se od výše uvedené funkce. V tomto případě je prvek nejprve vysunut, poté je prvek zatlačen. tj. lze vrátit hodnotu větší než vložená hodnota. heapreplace() na rozdíl od heappushpop() vrací nejmenší hodnotu původně v haldě bez ohledu na vložený prvek.

Python3


konverze řetězce na int v jazyce Java



# 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>))>

>

>

Výstup

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

Najděte největší a nejmenší prvky z Heap v Pythonu

    nlargest(k, iterable, key = fun) : Tato funkce se používá k vrácení k největších prvků ze zadané iterovatelné a ke splnění klíče, pokud je zmíněn. nsmallest(k, iterable, key = fun) : Tato funkce se používá k vrácení k nejmenších prvků ze zadané iterovatelné a ke splnění klíče, pokud je zmíněn.

Python3




# 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))>

>

>

Výstup

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

Příklad:

Python3


čtvrtletí v roce



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)>

>

>

Výstup

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]>

Tento program vytváří frontu haldy pomocí modulu heapq v Pythonu a provádí různé operace, jako je převod seznamu na haldu, přidání nové hodnoty do haldy, odstranění nejmenšího prvku z haldy, získání n nejmenších a n největších elementů z haldy. hromada.

Poznámka že modul heapq v Pythonu poskytuje funkce pro provádění operací s haldou na seznamech na místě, aniž by bylo nutné pro haldu vytvářet samostatnou datovou strukturu. Modul heapq je efektivní a snadno použitelný, díky čemuž je oblíbenou volbou pro implementaci prioritních front a dalších datových struktur v Pythonu.

Výhody použití fronty haldy (nebo heapq) v Pythonu:

    Efektivní: Fronta haldy je vysoce efektivní datová struktura pro správu prioritních front a hald v Pythonu. Poskytuje logaritmickou časovou složitost pro mnoho operací, takže je oblíbenou volbou pro mnoho aplikací. Prostorově efektivní: Fronty haldy jsou prostorově nenáročné, protože ukládají prvky v reprezentaci založené na poli, čímž se minimalizuje režie spojená s datovými strukturami založenými na uzlech, jako jsou propojené seznamy. Snadné použití: Fronty haldy v Pythonu se snadno používají s jednoduchým a intuitivním rozhraním API, které usnadňuje provádění základních operací, jako je vkládání, mazání a načítání prvků z haldy. Flexibilní: Haldové fronty v Pythonu lze použít k implementaci různých datových struktur, jako jsou prioritní fronty, haldy a binární stromy, což z nich dělá všestranný nástroj pro mnoho aplikací.

Nevýhody použití fronty haldy (nebo heapq) v Pythonu:

    Omezená funkčnost: Fronty haldy jsou primárně určeny pro správu prioritních front a hald a nemusí být vhodné pro složitější datové struktury a algoritmy. Žádný náhodný přístup: Fronty haldy nepodporují náhodný přístup k prvkům, což ztěžuje přístup k prvkům uprostřed haldy nebo úpravě prvků, které nejsou v horní části haldy. Žádné řazení: Fronty haldy nepodporují řazení, takže pokud potřebujete seřadit prvky v určitém pořadí, budete muset použít jinou datovou strukturu nebo algoritmus. Není bezpečné pro vlákna: Fronty haldy nejsou bezpečné pro vlákna, což znamená, že nemusí být vhodné pro použití ve vícevláknových aplikacích, kde je kritická synchronizace dat.

Celkově jsou haldové fronty vysoce efektivní a flexibilní datová struktura pro správu prioritních front a hald v Pythonu, ale mohou mít omezenou funkčnost a nemusí být vhodné pro všechny aplikace.