logo

Heap-kø (eller heapq) i Python

Python.

Oprettelse af en simpel bunke

Det heapify (iterbar) :- Denne funktion bruges til konverter det iterable til en bunke datastruktur. dvs i bunkerækkefølge.

Python3






itererende kort 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 : '>,(>list>(li)))>

>

>

Produktion

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

Tilføjelse og popning af elementer effektivt

    heappush(heap, ele) : Denne funktion bruges til at indsætte elementet nævnt i dets argumenter i en heap. Det orden justeres, så bunkestruktur bevares. heappop(heap): Denne funktion bruges til at fjerne og returnere det mindste element fra heapen. Rækkefølgen justeres, så bunkestruktur bevares.

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

>

>

Produktion

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>

Tilføjelse og popping samtidigt

    heappushpop(heap, ele):- Denne funktion kombinerer funktionen af ​​både push- og pop-operationer i én sætning, hvilket øger effektiviteten. Heap-rækkefølgen opretholdes efter denne operation. heapreplace(heap, ele):- Denne funktion indsætter og popper også elementer i én sætning, men den er forskellig fra ovenstående funktion. I denne bliver elementet først poppet, derefter skubbes elementet. dvs., at værdien, der er større end den skubbede værdi, kan returneres. heapreplace() returnerer den mindste værdi oprindeligt i heapen uanset det pushede element i modsætning til 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>))>

>

>

Produktion

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

Find de største og mindste elementer fra Heap i Python

    nlargest(k, iterable, key = fun) : Denne funktion bruges til at returnere de k største elementer fra den iterable specificerede og opfylde nøglen, hvis nævnt. nsmallest(k, iterable, key = fun) : Denne funktion bruges til at returnere de k mindste elementer fra den iterable specificerede og opfylde nøglen, hvis nævnt.

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

>

>

Produktion

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

Eksempel:

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

>

>

Produktion

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

Dette program opretter en heap-kø ved hjælp af heapq-modulet i Python og udfører forskellige operationer, såsom at konvertere en liste til en heap, tilføje en ny værdi til heapen, fjerne det mindste element fra heapen, hente de n mindste og n største elementer fra. dyngen.

Bemærk at heapq-modulet i Python giver funktioner til at udføre heap-operationer på lister på stedet, uden at der oprettes en separat datastruktur for heapen. Heapq-modulet er effektivt og nemt at bruge, hvilket gør det til et populært valg til implementering af prioritetskøer og andre datastrukturer i Python.

Fordele ved at bruge en heap-kø (eller heapq) i Python:

    Effektiv : En heap-kø er en yderst effektiv datastruktur til styring af prioriterede køer og heaps i Python. Det giver logaritmisk tidskompleksitet for mange operationer, hvilket gør det til et populært valg til mange applikationer. Pladseffektiv : Heap-køer er pladseffektive, da de gemmer elementer i en matrixbaseret repræsentation, hvilket minimerer overhead forbundet med node-baserede datastrukturer som sammenkædede lister. Nem at bruge: Heap-køer i Python er nemme at bruge med en enkel og intuitiv API, der gør det nemt at udføre grundlæggende handlinger som at indsætte, slette og hente elementer fra heapen. Fleksibel : Heap-køer i Python kan bruges til at implementere forskellige datastrukturer som prioritetskøer, heaps og binære træer, hvilket gør dem til et alsidigt værktøj til mange applikationer.

Ulemper ved at bruge en heap-kø (eller heapq) i Python:

    Begrænset funktionalitet : Heap-køer er primært designet til at administrere prioriterede køer og heaps og er muligvis ikke egnede til mere komplekse datastrukturer og algoritmer. Ingen tilfældig adgang : Heap-køer understøtter ikke tilfældig adgang til elementer, hvilket gør det vanskeligt at få adgang til elementer i midten af ​​heapen eller ændre elementer, der ikke er i toppen af ​​heapen. Ingen sortering: Heap-køer understøtter ikke sortering, så hvis du skal sortere elementer i en bestemt rækkefølge, skal du bruge en anden datastruktur eller algoritme. Ikke trådsikker: Heap-køer er ikke trådsikre, hvilket betyder, at de muligvis ikke er egnede til brug i flertrådede applikationer, hvor datasynkronisering er kritisk.

Samlet set er heap-køer en yderst effektiv og fleksibel datastruktur til styring af prioritetskøer og heaps i Python, men kan have begrænset funktionalitet og er muligvis ikke egnet til alle applikationer.