Python .
Crearea unui grămad simplu
The heapify (iterabil) :- Această funcție este folosită pentru converti iterabilul într-un heap structură de date. adică în ordinea grămezilor.
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)))> |
>
>Ieșire
elimina primul caracter din excel
The created heap is : [1, 3, 9, 7, 5]>
Adăugarea și afișarea eficientă a elementelor
- heappush(heap, ele): Această funcție este folosită pentru a insera elementul menționat în argumentele sale într-un heap. The ordinea este ajustată, astfel încât structura heap este menținută. heappop(heap): Această funcție este folosită pentru a elimina și returna cel mai mic element din heap. Ordinea este ajustată, astfel încât structura heap este menținută.
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))> |
>
>Ieșire
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>
Adăugarea și Popping simultan
- heappushpop(heap, ele) :- Această funcție combină funcționarea ambelor operațiuni push și pop într-o singură declarație, crescând eficiența. Ordinea grămezilor este menținută după această operațiune. heapreplace(heap, ele) :- Această funcție inserează și afișează și elemente într-o singură instrucțiune, dar este diferită de funcția de mai sus. În aceasta, elementul este mai întâi explodat, apoi elementul este împins. adică, valoarea mai mare decât valoarea împinsă poate fi returnată. heapreplace() returnează cea mai mică valoare inițial din heap, indiferent de elementul împins, spre deosebire de 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>))> |
>
>Ieșire
The popped item using heappushpop() is : 1 The popped item using heapreplace() is : 3>
Găsiți cele mai mari și mai mici elemente din Heap în Python
- nlargest(k, iterable, key = fun) : Această funcție este folosită pentru a returna cele mai mari k elemente din iterabilul specificat și pentru a satisface cheia dacă este menționată. nsmallest(k, iterable, key = fun) : Această funcție este folosită pentru a returna cele mai mici k elemente din iterabilul specificat și pentru a satisface cheia dacă este menționată.
Python3
ciclul de viață sdlc
# 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))> |
>
cum deselectați în gimp
>Ieșire
The 3 largest numbers in list are : [10, 9, 8] The 3 smallest numbers in list are : [1, 3, 4]>
Exemplu:
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)> |
>
>Ieșire
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]>
Acest program creează o coadă heap utilizând modulul heapq din Python și efectuează diverse operații, cum ar fi conversia unei liste într-un heap, adăugarea unei noi valori la heap, eliminarea celui mai mic element din heap, obținerea celor n elemente cele mai mici și n cele mai mari din grămada.
Notă că modulul heapq din Python oferă funcții pentru efectuarea operațiunilor heap pe liste în loc, fără a crea o structură de date separată pentru heap. Modulul heapq este eficient și ușor de utilizat, ceea ce îl face o alegere populară pentru implementarea cozilor prioritare și a altor structuri de date în Python.
Avantajele utilizării unei cozi heap (sau heapq) în Python:
- Eficientă: o coadă heap este o structură de date extrem de eficientă pentru gestionarea cozilor prioritare și a grămezilor în Python. Oferă complexitate de timp logaritmică pentru multe operațiuni, ceea ce îl face o alegere populară pentru multe aplicații. Eficiente din punct de vedere al spațiului: cozile heap sunt eficiente din punct de vedere al spațiului, deoarece stochează elemente într-o reprezentare bazată pe matrice, minimizând suprasarcina asociată cu structurile de date bazate pe noduri, cum ar fi listele legate. Ușor de utilizat: cozile heap în Python sunt ușor de utilizat, cu un API simplu și intuitiv care facilitează efectuarea operațiunilor de bază precum inserarea, ștergerea și preluarea elementelor din heap. Flexibil: cozile heap în Python pot fi folosite pentru a implementa diferite structuri de date, cum ar fi cozile prioritare, heaps și arbori binari, făcându-le un instrument versatil pentru multe aplicații.
Dezavantajele utilizării unei cozi heap (sau heapq) în Python:
- Funcționalitate limitată: cozile heap sunt concepute în principal pentru gestionarea cozilor și heap-urilor prioritare și este posibil să nu fie potrivite pentru structuri de date și algoritmi mai complexe. Fără acces aleatoriu: cozile heap nu acceptă acces aleatoriu la elemente, ceea ce face dificilă accesarea elementelor din mijlocul heap-ului sau modificarea elementelor care nu se află în partea de sus a heap-ului. Fără sortare: cozile heap nu acceptă sortarea, așa că dacă trebuie să sortați elemente într-o anumită ordine, va trebui să utilizați o structură de date sau un algoritm diferit. Nu sunt sigure pentru fire: cozile heap nu sunt sigure pentru fire, ceea ce înseamnă că este posibil să nu fie adecvate pentru utilizare în aplicații cu mai multe fire în care sincronizarea datelor este critică.
În general, cozile heap sunt o structură de date extrem de eficientă și flexibilă pentru gestionarea cozilor prioritare și heap-urilor în Python, dar pot avea funcționalități limitate și pot să nu fie potrivite pentru toate aplicațiile.