Comparador personalizado do Python Heapq

Comparador personalizado do Python Heapq
Algoritmos e conceitos de estrutura de dados são notoriamente difíceis. Requer tempo e esforço para encontrar o melhor esclarecimento promissor para um problema. Como resultado, se você ficar preso à implementação, talvez não seja capaz de terminar a tarefa! Como resultado, saber como usar cada uma das principais estruturas de dados e estar ciente das limitações específicas do Python fará com que a implementação corra bem. Duas estruturas de dados pouco conhecidas que são bastante eficazes são pilhas e filas de prioridade.

Você aprenderá como aplicar o HEAPQ nos módulos Python neste guia. Que tipos de problemas podem ser usados ​​para resolver? Como superar esses problemas com o módulo Heapq da Python.

O que é um módulo HEAPQ Python?

Uma estrutura de dados de heap representa uma fila de prioridade. O pacote "HEAPQ" em Python o torna disponível. A peculiaridade disso em Python é que ele sempre aparece o mínimo das peças de heap (Min Heap). O elemento heap [0] sempre dá o menor elemento.

Várias rotinas Heapq assumem uma lista como uma entrada e a organizam em um pedido de mini-heap. Uma falha nessas rotinas é que elas exigem uma lista ou até uma coleção de tuplas como um parâmetro. Eles não permitem que você compare nenhum outro iterável ou objetos.

Vamos dar uma olhada em algumas das operações básicas que o módulo Python HEAPQ suporta. Para adquirir uma melhor compreensão de como o módulo HEAPQ Python funciona, observe as seções a seguir para exemplos implementados.

Exemplo 1:

O módulo HEAPQ em Python permite que você execute operações de heap em listas. Ao contrário de alguns dos módulos adicionais, ele não especifica nenhuma aula personalizada. O módulo HEAPQ Python inclui rotinas que operam diretamente com listas.

Normalmente, os elementos são adicionados um a um em uma pilha, começando com uma pilha vazia. Se já houver uma lista de elementos que precisam ser convertidos em uma pilha, a função heapify () no módulo Python Heapq pode ser usada para converter a lista em uma pilha válida.

Vamos ver o seguinte código passo a passo. O módulo HEAPQ é importado na primeira linha. Depois disso, demos a lista o nome 'One.'O método heapify foi chamado e a lista foi fornecida como um parâmetro. Finalmente, o resultado é mostrado.

importar heapq
um = [7, 3, 8, 1, 3, 0, 2]
heapq.heapify (um)
Imprimir (um)

A saída do código acima mencionado é mostrado abaixo.

Você pode ver que, apesar do fato de 7 ocorrer após 8, a lista ainda segue a propriedade Heap. Por exemplo, o valor de um [2], que é 3, é menor que o valor de um [2*2 + 2], que é 7.

Heapify (), como você pode ver, atualiza a lista no lugar, mas não a classifica. Uma pilha não precisa ser organizada para cumprir a propriedade Heap. Quando Heapify () é usado em uma lista classificada, a ordem dos elementos da lista é preservada porque cada lista classificada se encaixa na propriedade Heap.

Exemplo 2:

Uma lista de itens ou uma lista de tuplas pode ser passada como um parâmetro para funções do módulo Heapq. Como resultado, existem duas opções para alterar a técnica de classificação. Para comparação, o primeiro passo é transformar o iterável em uma lista de tuplas/listas. Faça uma classe de invólucro que estenda o "operador. Neste exemplo, veremos a primeira abordagem mencionada. Este método é simples de usar e pode ser aplicado para comparar dicionários.

Faça um esforço para compreender o seguinte código. Como você pode ver, importamos o módulo Heapq e geramos um dicionário chamado dict_one. Depois disso, a lista é definida para conversão de tupla. A função HQ.heapify (minha lista) organiza as listas em um min-heap e imprime o resultado.

Finalmente, convertemos a lista em um dicionário e exibimos os resultados.

Importar HEAPQ como HQ
dict_one = 'z': 'zinc', 'b': 'bill', 'w': 'wicket', 'a': 'anna', 'c': 'caouch'
list_one = [(a, b) para a, b em dict_one.Unid()]
print ("Antes de organizar:", list_one)
HQ.heapify (list_one)
print ("Depois de organizar:", list_one)
dict_one = dict (list_one)
Print ("Dicionário Final:", Dict_One)

A saída está conectada abaixo. O dicionário final reconvertido é exibido ao lado da lista antes e depois da organização.

Exemplo 3:

Vamos incorporar uma aula de wrapper neste exemplo. Considere um cenário em que os objetos de uma classe devem ser mantidos em um min-heap. Considere uma classe que tem atributos como 'nome ", grau" DOB' (data de nascimento) e 'taxa.'Os objetos desta classe devem ser mantidos em um min-heap, dependendo do' DOB '(data de nascimento).

Agora substituímos o operador relacional ”para comparar a taxa de cada aluno e retornar verdadeiro ou falso.

Abaixo está o código que você pode passar passo a passo. Importamos o módulo Heapq e definimos o 'aluno' da classe, no qual escrevemos o construtor e a função para impressão personalizada. Como você pode ver, substituímos o operador de comparação.

Agora criamos objetos para a turma e especificamos as listas do aluno. Com base no DOB, o HQ do código.Heapify (EMP) será convertido em min-heap. O resultado é exibido na parte final do código.

Importar HEAPQ como HQ
Aluno da aula:
def __init __ (self, a, b, yos, c):
auto.nome = a
auto.grau = b
auto.DOB = YOS
auto.taxa = c
DEF Print_me (self):
print ("nome:", eu.nome)
impressão ("grau:", eu.grau)
impressão ("Data de nascimento:", STR (self.DOB))
Imprimir ("Salário:", Str (self.taxa))
def __lt __ (self, nxt):
retornar a si mesmo.Dob < nxt.DOB
std1 = aluno ('Alex', 'Law', 1990, 36000)
std2 = aluno ('Mathew', 'PhD', 1998, 35000)
std3 = aluno ('Tina', 'Ciência da Computação', 1980, 70000)
std4 = aluno ('jack', 'it', 1978, 90000)
std = [std1, std2, std3, std4]
HQ.heapify (std)
para i no intervalo (0, len (std)):
std [i].print_me ()
imprimir()

Aqui está a saída completa do código de referência mencionado acima.

Conclusão:

Agora você tem uma melhor compreensão das estruturas de dados da fila e prioridade e como elas podem ajudá -lo a resolver diferentes tipos de problemas. Você estudou como gerar pilhas de listas de Python usando o módulo Python Heapq. Você também estudou como utilizar as várias operações do módulo Python Heapq. Para compreender melhor o tópico, leia o artigo completamente e aplique os exemplos fornecidos.