logo

Heap-kø (eller heapq) i Python

Python .

Lage en enkel haug

De heapify (iterbar) :- Denne funksjonen brukes til konverter iterable til en haug data struktur. dvs. i haugekkefølge.

Python3






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

>

>

Produksjon

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

Legge til og poppe elementer effektivt

    heappush(heap, ele) : Denne funksjonen brukes til å sette inn elementet nevnt i argumentene i en haug. De rekkefølgen justeres, slik at haugstrukturen opprettholdes. heappop(heap): Denne funksjonen brukes til å fjerne og returnere det minste elementet fra haugen. Rekkefølgen justeres, slik at haugstruktur opprettholdes.

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

>

>

Produksjon

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>

Legger til og popper samtidig

    heappushpop(heap, ele):- Denne funksjonen kombinerer funksjonen til både push- og pop-operasjoner i ett utsagn, noe som øker effektiviteten. Heap-rekkefølgen opprettholdes etter denne operasjonen. heapreplace(heap, ele) :- Denne funksjonen setter også inn og åpner elementer i en setning, men den er forskjellig fra funksjonen ovenfor. I denne blir elementet først poppet, deretter skyves elementet. dvs. verdien større enn den pressede verdien kan returneres. heapreplace() returnerer den minste verdien opprinnelig i heapen uavhengig av det pushede elementet i motsetning 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>))>

>

>

Produksjon

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

Finn de største og minste elementene fra Heap i Python

    nlargest(k, iterable, key = fun) : Denne funksjonen brukes til å returnere de k største elementene fra den iterable spesifiserte og tilfredsstille nøkkelen hvis nevnt. nsmallest(k, iterable, key = fun) : Denne funksjonen brukes til å returnere de k minste elementene fra den iterable spesifiserte og tilfredsstille nøkkelen hvis nevnt.

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

>

>

Produksjon

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

>

>

Produksjon

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 programmet lager en heap-kø ved å bruke heapq-modulen i Python og utfører ulike operasjoner som å konvertere en liste til en haug, legge til en ny verdi til haugen, fjerne det minste elementet fra haugen, hente de n minste og n største elementene fra haugen.

Merk at heapq-modulen i Python gir funksjoner for å utføre heap-operasjoner på lister på plass, uten å lage en egen datastruktur for heapen. Heapq-modulen er effektiv og enkel å bruke, noe som gjør den til et populært valg for implementering av prioriterte køer og andre datastrukturer i Python.

Fordeler med å bruke en heap-kø (eller heapq) i Python:

    Effektiv : En heap-kø er en svært effektiv datastruktur for å administrere prioriterte køer og heaps i Python. Det gir logaritmisk tidskompleksitet for mange operasjoner, noe som gjør det til et populært valg for mange applikasjoner. Plasseffektiv : Heap-køer er plasseffektive, ettersom de lagrer elementer i en array-basert representasjon, og minimerer overhead knyttet til nodebaserte datastrukturer som koblede lister. Enkel å bruke: Heap-køer i Python er enkle å bruke, med en enkel og intuitiv API som gjør det enkelt å utføre grunnleggende operasjoner som å sette inn, slette og hente elementer fra heapen. Fleksibel : Heap-køer i Python kan brukes til å implementere ulike datastrukturer som prioriterte køer, hauger og binære trær, noe som gjør dem til et allsidig verktøy for mange applikasjoner.

Ulemper ved å bruke en heap-kø (eller heapq) i Python:

    Begrenset funksjonalitet : Heap-køer er først og fremst designet for å administrere prioriterte køer og hauger, og er kanskje ikke egnet for mer komplekse datastrukturer og algoritmer. Ingen tilfeldig tilgang: Heap-køer støtter ikke tilfeldig tilgang til elementer, noe som gjør det vanskelig å få tilgang til elementer i midten av heapen eller endre elementer som ikke er på toppen av heapen. Ingen sortering: Heap-køer støtter ikke sortering, så hvis du trenger å sortere elementer i en bestemt rekkefølge, må du bruke en annen datastruktur eller algoritme. Ikke trådsikker : Heap-køer er ikke trådsikre, noe som betyr at de kanskje ikke er egnet for bruk i flertrådede applikasjoner der datasynkronisering er kritisk.

Samlet sett er heap-køer en svært effektiv og fleksibel datastruktur for å administrere prioriterte køer og heaps i Python, men kan ha begrenset funksjonalitet og passer kanskje ikke for alle applikasjoner.