Python.
Een eenvoudige hoop creëren
De ophopen (itereerbaar) : - Deze functie wordt gebruikt converteer de iterabele naar een heap data structuur. dat wil zeggen in hoopvolgorde.
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)))> |
>
>
Linux-foutcodesUitvoer
The created heap is : [1, 3, 9, 7, 5]>
Items efficiënt toevoegen en weergeven
- heappush(heap, ele) : Deze functie wordt gebruikt om het element dat in de argumenten wordt genoemd in een heap in te voegen. De De volgorde wordt aangepast, zodat de heapstructuur behouden blijft. heappop(heap) : Deze functie wordt gebruikt om het kleinste element uit de heap te verwijderen en terug te sturen. De volgorde wordt aangepast, zodat de heapstructuur behouden blijft.
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))> |
>
>Uitvoer
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>
Toevoegen en knallen tegelijkertijd
- heappushpop(heap, ele): - Deze functie combineert de werking van zowel push- als pop-bewerkingen in één statement, waardoor de efficiëntie toeneemt. Na deze bewerking blijft de heapvolgorde behouden. heapreplace(heap, ele): - Deze functie voegt ook elementen in en laat deze verschijnen in één statement, maar verschilt van de bovenstaande functie. Hierbij wordt het element eerst uitgeklapt en vervolgens wordt het element geduwd. d.w.z. de waarde die groter is dan de gepushte waarde kan worden geretourneerd. heapreplace() retourneert de kleinste waarde die oorspronkelijk in de heap aanwezig was, ongeacht het gepushte element, in tegenstelling tot 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>))> |
>
>Uitvoer
The popped item using heappushpop() is : 1 The popped item using heapreplace() is : 3>
Vind de grootste en kleinste elementen van Heap in Python
- nlargest(k, iterable, key = fun): Deze functie wordt gebruikt om de k grootste elementen uit de opgegeven iterabele te retourneren en aan de sleutel te voldoen, indien vermeld. nsmallest(k, iterable, key = fun): Deze functie wordt gebruikt om de k kleinste elementen uit de opgegeven iterabele te retourneren en aan de sleutel te voldoen, indien vermeld.
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))> |
>
>Uitvoer
The 3 largest numbers in list are : [10, 9, 8] The 3 smallest numbers in list are : [1, 3, 4]>
Voorbeeld:
Python3
woordenboekinitialisatie c#
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)> |
>
>Uitvoer
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]>
Dit programma maakt een heap-wachtrij aan met behulp van de heapq-module in Python en voert verschillende bewerkingen uit, zoals het converteren van een lijst naar een heap, het toevoegen van een nieuwe waarde aan de heap, het verwijderen van het kleinste element uit de heap, het ophalen van de n kleinste en n grootste elementen uit de hoop.
Opmerking dat de heapq-module in Python functies biedt voor het uitvoeren van heap-bewerkingen op interne lijsten, zonder een aparte gegevensstructuur voor de heap te creëren. De heapq-module is efficiënt en gemakkelijk te gebruiken, waardoor het een populaire keuze is voor het implementeren van prioriteitswachtrijen en andere datastructuren in Python.
Voordelen van het gebruik van een heap-wachtrij (of heapq) in Python:
- Efficiënt: een heap-wachtrij is een zeer efficiënte gegevensstructuur voor het beheren van prioriteitswachtrijen en heaps in Python. Het biedt logaritmische tijdscomplexiteit voor veel bewerkingen, waardoor het een populaire keuze is voor veel toepassingen. Ruimte-efficiënt: Heap-wachtrijen zijn ruimte-efficiënt, omdat ze elementen opslaan in een array-gebaseerde weergave, waardoor de overhead die gepaard gaat met op knooppunten gebaseerde datastructuren zoals gekoppelde lijsten wordt geminimaliseerd. Eenvoudig te gebruiken: Heap-wachtrijen in Python zijn eenvoudig te gebruiken, met een eenvoudige en intuïtieve API die het gemakkelijk maakt om basisbewerkingen uit te voeren, zoals het invoegen, verwijderen en ophalen van elementen uit de heap. Flexibel: Heap-wachtrijen in Python kunnen worden gebruikt om verschillende datastructuren te implementeren, zoals prioriteitswachtrijen, heaps en binaire bomen, waardoor ze een veelzijdig hulpmiddel zijn voor veel toepassingen.
Nadelen van het gebruik van een heap-wachtrij (of heapq) in Python:
- Beperkte functionaliteit: Heap-wachtrijen zijn primair ontworpen voor het beheren van prioriteitswachtrijen en heaps, en zijn mogelijk niet geschikt voor complexere datastructuren en algoritmen. Geen willekeurige toegang: Heap-wachtrijen ondersteunen geen willekeurige toegang tot elementen, waardoor het moeilijk wordt om toegang te krijgen tot elementen in het midden van de heap of om elementen aan te passen die niet bovenaan de heap staan. Geen sortering: Heap-wachtrijen ondersteunen geen sortering, dus als u elementen in een specifieke volgorde moet sorteren, moet u een andere gegevensstructuur of een ander algoritme gebruiken. Niet thread-safe: Heap-wachtrijen zijn niet thread-safe, wat betekent dat ze mogelijk niet geschikt zijn voor gebruik in multi-threaded toepassingen waarbij gegevenssynchronisatie van cruciaal belang is.
Over het geheel genomen zijn heap-wachtrijen een zeer efficiënte en flexibele gegevensstructuur voor het beheren van prioriteitswachtrijen en heaps in Python, maar ze hebben mogelijk een beperkte functionaliteit en zijn mogelijk niet geschikt voor alle toepassingen.