logo

Front haldy (alebo heapq) v Pythone

Python .

Vytvorenie jednoduchej haldy

The heapify (opakovateľné) :- Táto funkcia sa používa previesť iterovateľné na hromadu dátová štruktúra. teda v haldovom poradí.

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ýkon

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

Efektívne pridávanie a otváranie položiek

    heappush(heap, ele) : Táto funkcia sa používa na vloženie prvku uvedeného v jeho argumentoch do haldy. The poradie sa upraví tak, aby bola zachovaná štruktúra haldy. heappop(heap) : Táto funkcia sa používa na odstránenie a vrátenie najmenšieho prvku z haldy. Poradie je upravené tak, aby bola zachovaná štruktúra haldy.

Python3




anonymná funkcia java
# 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ýkon

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>

Pridávanie a vyskakovanie súčasne

    heappushpop(heap, ele) :- Táto funkcia kombinuje fungovanie push a pop operácií v jednom príkaze, čím zvyšuje efektivitu. Po tejto operácii sa zachová poradie haldy. heapreplace(heap, ele) :- Táto funkcia tiež vkladá a zobrazuje prvky v jednom príkaze, ale je odlišná od vyššie uvedenej funkcie. Pri tomto sa prvok najskôr vypáči, potom sa prvok zatlačí. t.j. hodnotu väčšiu ako vložená hodnota možno vrátiť. heapreplace() vracia najmenšiu hodnotu pôvodne v halde bez ohľadu na tlačený prvok, na rozdiel od 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>))>

>

>

Výkon

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

Nájdite najväčšie a najmenšie prvky z Heap v Pythone

    nlargest(k, iterable, key = fun) : Táto funkcia sa používa na vrátenie k najväčších prvkov zo zadanej iterovateľnej položky a splnenie kľúča, ak je uvedený. nsmallest(k, iterable, key = fun) : Táto funkcia sa používa na vrátenie k najmenších prvkov zo zadanej iterovateľnej položky a splnenie kľúča, ak je uvedený.

Python3


čo je zhlukovanie



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

>

čítať zo súboru csv v jazyku Java
>

Výkon

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

Príklad:

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

>

>

Výkon

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ára frontu haldy pomocou modulu heapq v Pythone a vykonáva rôzne operácie, ako je konvertovanie zoznamu na haldu, pridanie novej hodnoty do haldy, odstránenie najmenšieho prvku z haldy, získanie n najmenších a n najväčších prvkov z haldy. hromada.

Poznámka že modul heapq v Pythone poskytuje funkcie na vykonávanie operácií s haldou na zoznamoch na mieste bez vytvárania samostatnej dátovej štruktúry pre haldu. Modul heapq je efektívny a ľahko použiteľný, vďaka čomu je populárnou voľbou pre implementáciu prioritných frontov a iných dátových štruktúr v Pythone.

Výhody použitia frontu haldy (alebo heapq) v Pythone:

    Efektívny: Front haldy je vysoko efektívna dátová štruktúra na správu prioritných frontov a hald v Pythone. Poskytuje logaritmickú časovú zložitosť pre mnoho operácií, vďaka čomu je obľúbenou voľbou pre mnoho aplikácií. Priestorovo efektívne: Hromadné fronty sú priestorovo efektívne, pretože ukladajú prvky v reprezentácii založenej na poli, čím sa minimalizuje réžia spojená s dátovými štruktúrami založenými na uzloch, ako sú prepojené zoznamy. Jednoduché použitie: Fronty haldy v Pythone sa ľahko používajú s jednoduchým a intuitívnym rozhraním API, ktoré uľahčuje vykonávanie základných operácií, ako je vkladanie, odstraňovanie a získavanie prvkov z haldy. Flexibilné: Haldové fronty v Pythone možno použiť na implementáciu rôznych dátových štruktúr, ako sú prioritné fronty, haldy a binárne stromy, čo z nich robí všestranný nástroj pre mnoho aplikácií.

Nevýhody použitia frontu haldy (alebo heapq) v Pythone:

    Obmedzená funkčnosť: Fronty haldy sú primárne navrhnuté na správu prioritných frontov a hald a nemusia byť vhodné pre zložitejšie dátové štruktúry a algoritmy. Žiadny náhodný prístup: Fronty haldy nepodporujú náhodný prístup k prvkom, čo sťažuje prístup k prvkom v strede haldy alebo k úprave prvkov, ktoré nie sú na vrchu haldy. Žiadne triedenie: Hromadné fronty nepodporujú triedenie, takže ak potrebujete triediť prvky v konkrétnom poradí, budete musieť použiť inú dátovú štruktúru alebo algoritmus. Nie je bezpečné pre vlákna: fronty haldy nie sú bezpečné pre vlákna, čo znamená, že nemusia byť vhodné na použitie vo viacvláknových aplikáciách, kde je synchronizácia údajov kritická.

Celkovo sú haldové fronty vysoko efektívnou a flexibilnou dátovou štruktúrou na správu prioritných frontov a hald v Pythone, ale môžu mať obmedzenú funkčnosť a nemusia byť vhodné pre všetky aplikácie.