Python Heapq Comparatore personalizzato

Python Heapq Comparatore personalizzato
Gli algoritmi e i concetti della struttura dei dati sono notoriamente difficili. Richiede tempo e sforzo per trovare il miglior chiarimento promettente a un problema. Di conseguenza, se rimani bloccato con l'implementazione, potresti non essere in grado di completare l'attività! Di conseguenza, sapere come utilizzare ciascuna delle principali strutture di dati ed essere consapevoli delle limitazioni specifiche di Python farà andare l'implementazione senza intoppi. Due strutture di dati poco conosciute che sono abbastanza efficaci sono un sacco di code prioritarie.

Imparerai come applicare HEAPQ nei moduli Python in questa guida. Quali tipi di problemi può essere utilizzato un mucchio per risolvere? Come superare questi problemi con il modulo heapq di Python.

Cos'è un modulo Python Heapq?

Una struttura dati heap rappresenta una coda prioritaria. Il pacchetto "heapq" in Python lo rende disponibile. La peculiarità di questo in Python è che scoppia sempre il minimo dei pezzi di mucchio (mucchio min). L'elemento heap [0] dà sempre l'elemento più piccolo.

Diverse routine heapq prendono un elenco come input e lo organizzano in un ordine min-heap. Un difetto con queste routine è che richiedono un elenco o anche una raccolta di tuple come parametro. Non ti permettono di confrontare altri iterable o oggetti.

Diamo un'occhiata ad alcune delle operazioni di base che il modulo Python Heapq supporta. Per acquisire una migliore comprensione di come funziona il modulo Python HeapQ, guarda attraverso le seguenti sezioni per esempi implementati.

Esempio 1:

Il modulo HEAPQ in Python consente di eseguire operazioni di heap sugli elenchi. A differenza di alcuni dei moduli aggiuntivi, non specifica le classi personalizzate. Il modulo Python HeapQ include routine che operano direttamente con gli elenchi.

In genere, gli elementi vengono aggiunti uno per uno in un mucchio, a cominciare da un mucchio vuoto. Se esiste già un elenco di elementi che devono essere convertiti in un heap, la funzione heaPify () nel modulo Python HeapQ può essere utilizzato per convertire l'elenco in un heap valido.

Vediamo il seguente codice passo dopo passo. Il modulo HEAPQ viene importato nella prima riga. Successivamente, abbiamo dato all'elenco il nome "uno.'Il metodo Heapify è stato chiamato e l'elenco è stato fornito come parametro. Infine, il risultato è mostrato.

importare heapq
uno = [7, 3, 8, 1, 3, 0, 2]
heapq.accumulare (uno)
Stampa (uno)

L'output del codice sopra menzionato è mostrato di seguito.

Puoi vedere che, nonostante il fatto che 7 si verifichi dopo 8, l'elenco segue ancora la proprietà heap. Ad esempio, il valore di un [2], che è 3, è inferiore al valore di un [2*2 + 2], che è 7.

HeaPify (), come puoi vedere, aggiorna l'elenco in atto ma non lo ordina. Un mucchio non deve essere organizzato per soddisfare la proprietà del heap. Quando HeaPify () viene utilizzato in un elenco ordinato, l'ordine degli elementi nell'elenco viene preservato perché ogni elenco ordinato si adatta alla proprietà HEAP.

Esempio 2:

Un elenco di elementi o un elenco di tuple può essere passato come parametro per le funzioni del modulo HEAPQ. Di conseguenza, ci sono due opzioni per modificare la tecnica di smistamento. Per fare un confronto, il primo passo è trasformare l'iterabile in un elenco di tuple/elenchi. Crea una classe wrapper che estende l'operatore ". In questo esempio, esamineremo il primo approccio menzionato. Questo metodo è semplice da usare e può essere applicato per confrontare i dizionari.

Fare uno sforzo per comprendere il seguente codice. Come puoi vedere, abbiamo importato il modulo heapq e generato un dizionario chiamato dict_one. Successivamente, l'elenco è definito per la conversione di tupla. Il quartier generale della funzione.heaPify (il mio elenco) organizza gli elenchi in un minimo e stampa il risultato.

Infine, convertiamo l'elenco in un dizionario e visualizziamo i risultati.

importare heapq come quartier generale
Dict_one = 'Z': 'Zinc', 'B': 'Bill', 'W': 'Wicket', 'A': 'Anna', 'C': 'Caouch'
list_one = [(a, b) per a, b in dict_one.elementi()]
Print ("Prima di organizzare:", list_one)
quartier generale.heapify (list_one)
Print ("Dopo l'organizzazione:", list_one)
dict_one = dict (list_one)
Print ("Dictionary Final:", dict_one)

L'uscita è collegata di seguito. Il dizionario convertito finale viene visualizzato accanto alla lista prima e dopo organizzata.

Esempio 3:

In questo esempio incorporeremo una classe wrapper. Considera uno scenario in cui gli oggetti di una classe devono essere tenuti in un minimo. Prendi in considerazione una classe che ha attributi come "nome," laurea, "dob" (data di nascita) e "tassa.'Gli oggetti di questa classe devono essere mantenuti in un minimo a seconda del loro' dob '(data di nascita).

Ora sovrascriviamo l'operatore relazionale ”al fine di confrontare la tassa di ogni studente e restituire vero o falso.

Di seguito è riportato il codice che puoi passare attraverso il passo. Abbiamo importato il modulo HEAPQ e definito lo studente di classe "in cui abbiamo scritto il costruttore e la funzione per la stampa personalizzata. Come puoi vedere, abbiamo sovrascritto l'operatore di confronto.

Ora abbiamo creato oggetti per la classe e specificato gli elenchi dello studente. Basato sul DOB, il quartier generale del codice.HeaPify (EMP) si convertirà in Min-heap. Il risultato viene visualizzato nell'ultimo pezzo di codice.

importare heapq come quartier generale
Studente di classe:
def __init __ (self, a, b, yos, c):
se stesso.nome = a
se stesso.grado = b
se stesso.Dob = yos
se stesso.Commissione = c
def print_me (self):
Stampa ("Nome:", Self.nome)
Stampa ("Grado:", Self.grado)
Stampa ("Data di nascita:", STR (self.Dob))
Stampa ("Stipendio:", STR (Self.tassa))
def __lt __ (self, nxt):
Restituisci se stessi.Dob < nxt.DOB
STD1 = Student ('Alex', 'Law', 1990, 36000)
STD2 = Student ('Mathew', 'PhD', 1998, 35000)
STD3 = Student ('Tina', 'Informatica', 1980, 70000)
STD4 = Student ('Jack', 'It', 1978, 90000)
std = [std1, std2, std3, std4]
quartier generale.heapify (std)
per i in gamma (0, len (std)):
std [i].print_me ()
stampa()

Ecco l'output completo del codice di riferimento sopra menzionato.

Conclusione:

Ora hai una migliore comprensione dell'heap e delle strutture di dati della coda prioritaria e come potrebbero aiutarti a risolvere diversi tipi di problemi. Hai studiato come generare cumuli dagli elenchi di Python usando il modulo Python Heapq. Hai anche studiato come utilizzare le varie operazioni del modulo Python Heapq. Per comprendere meglio l'argomento, leggi accuratamente l'articolo e applica gli esempi forniti.