logo

Coda heap (o heapq) in Python

Pitone.

Creazione di un semplice heap

IL heapify (iterabile) :- Questa funzione viene utilizzata per convertire l'iterabile in un heap struttura dati. cioè in ordine heap.



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



>

>

Produzione

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

Aggiunta e selezione di elementi in modo efficiente

    heappush(heap, ele): questa funzione viene utilizzata per inserire l'elemento menzionato nei suoi argomenti in un heap. IL l'ordine viene regolato, in modo da mantenere la struttura dell'heap. heappop(heap): questa funzione viene utilizzata per rimuovere e restituire l'elemento più piccolo dall'heap. L'ordine viene modificato in modo da mantenere la struttura dell'heap.

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

>

>

Produzione

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>

Aggiunta e estrazione contemporaneamente

    heappushpop(heap, ele): - Questa funzione combina il funzionamento delle operazioni push e pop in un'unica istruzione, aumentando l'efficienza. L'ordine dell'heap viene mantenuto dopo questa operazione. heapreplace(heap, ele): - Anche questa funzione inserisce e visualizza elementi in un'istruzione, ma è diversa dalla funzione precedente. In questo caso, l'elemento viene prima fatto scoppiare, quindi l'elemento viene spinto. ovvero, è possibile restituire il valore maggiore del valore inserito. heapreplace() restituisce il valore più piccolo originariamente nell'heap indipendentemente dall'elemento inserito rispetto a 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>))>

>

>

Produzione

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

Trova gli elementi più grandi e più piccoli da Heap in Python

    nlargest(k, iterable, key = fun) : questa funzione viene utilizzata per restituire i k elementi più grandi dall'iterabile specificato e soddisfare la chiave se menzionata. nsmallest(k, iterable, key = fun) : questa funzione viene utilizzata per restituire i k elementi più piccoli dall'iterabile specificato e soddisfare la chiave se menzionata.

Python3

Java analizza la stringa in int




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

>

>

Produzione

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

Esempio:

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

>

>

Produzione

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

Questo programma crea una coda heap utilizzando il modulo heapq in Python ed esegue varie operazioni come convertire una lista in un heap, aggiungere un nuovo valore all'heap, rimuovere l'elemento più piccolo dall'heap, ottenere gli n elementi più piccoli e gli n elementi più grandi da il mucchio.

Nota che il modulo heapq in Python fornisce funzioni per eseguire operazioni heap su elenchi sul posto, senza creare una struttura dati separata per l'heap. Il modulo heapq è efficiente e facile da usare, rendendolo una scelta popolare per implementare code di priorità e altre strutture dati in Python.

Vantaggi dell'utilizzo di una coda heap (o heapq) in Python:

    Efficiente: una coda di heap è una struttura dati altamente efficiente per la gestione di code e heap di priorità in Python. Fornisce complessità temporale logaritmica per molte operazioni, rendendolo una scelta popolare per molte applicazioni. Efficienza in termini di spazio: le code heap sono efficienti in termini di spazio, poiché memorizzano gli elementi in una rappresentazione basata su array, riducendo al minimo il sovraccarico associato alle strutture dati basate su nodi come gli elenchi collegati. Facile da usare: le code heap in Python sono facili da usare, con un'API semplice e intuitiva che semplifica l'esecuzione di operazioni di base come l'inserimento, l'eliminazione e il recupero di elementi dall'heap. Flessibile: le code heap in Python possono essere utilizzate per implementare varie strutture dati come code di priorità, heap e alberi binari, rendendole uno strumento versatile per molte applicazioni.

Svantaggi dell'utilizzo di una coda heap (o heapq) in Python:

    Funzionalità limitate: le code heap sono progettate principalmente per la gestione di code e heap con priorità e potrebbero non essere adatte per strutture dati e algoritmi più complessi. Nessun accesso casuale: le code dell'heap non supportano l'accesso casuale agli elementi, rendendo difficile l'accesso agli elementi al centro dell'heap o la modifica degli elementi che non si trovano nella parte superiore dell'heap. Nessun ordinamento: le code heap non supportano l'ordinamento, quindi se è necessario ordinare gli elementi in un ordine specifico, sarà necessario utilizzare una struttura dati o un algoritmo diverso. Non thread-safe: le code heap non sono thread-safe, il che significa che potrebbero non essere adatte all'uso in applicazioni multi-thread in cui la sincronizzazione dei dati è fondamentale.

Nel complesso, le code heap sono una struttura dati altamente efficiente e flessibile per la gestione delle code e degli heap con priorità in Python, ma potrebbero avere funzionalità limitate e potrebbero non essere adatte a tutte le applicazioni.