Como usar o heap máximo em Java?

Como Usar O Heap Maximo Em Java



O programador pode recuperar facilmente o elemento máximo utilizando o botão “ pilha máxima ” árvore binária. Como nesta árvore, o elemento máximo sempre reside no nó superior da árvore que é conhecido como “ raiz ' nó. Além disso, oferece inserção e exclusão eficientes de elementos enquanto mantém a ordem de classificação. Além disso, um “Max Heap” pode facilmente executar trabalhos agendados com base em sua prioridade ou outros critérios.

Este artigo explica o seguinte conteúdo:







Como usar o heap máximo em Java?

A ' pilha máxima ” é utilizado como a estrutura de dados subjacente para implementar uma fila de prioridade. Na fila de prioridade, os dados são processados ​​com base no valor de prioridade atribuído. Também pode ser utilizado para classificar os elementos de dados em ordem decrescente, de forma eficiente.



O “Max Heap” pode ser gerado usando dois métodos que são descritos ao longo do exemplo de codec abaixo:



Método 1: Use o método “maxHeapify ()”

O ' maxHeapify() ” método gera um “ pilha máxima ” de uma coleção existente de elementos, transformando estruturas de dados. Além disso, esse método ajuda a modificar o array original no local, reduzindo a necessidade de memória adicional.





Por exemplo, visite o código abaixo para gerar um “ pilha máxima ” usando o método “maxHeapify()”:

importar java.util.ArrayList;
importar java.util.Collections;
importar java.util.List;

classe pública MaxHeapifyExam {
public static void main ( Corda [ ] argumentos ) // criação de principal ( ) método
{
Lista < inteiro > testesEle = new ArrayList <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 3 ) ;
testEle.add ( 8 ) ;
testEle.add ( 2 ) ;
testEle.add ( 1 ) ;
testEle.add ( 7 ) ;
System.out.println ( 'Lista Original: ' + testesEle ) ;
maxHeapify ( TESTE ) ;
System.out.println ( 'A pilha máxima gerada: ' + testesEle ) ;
}

private static void maxHeapify ( Lista < inteiro > TESTE ) {
int k = testEle.size ( ) ;
para ( int i = k / 2 - 1 ; eu > = 0 ; eu-- ) {
amontoar ( testaEle, k, i ) ;
}
}

heapify vazio estático privado ( Lista < inteiro > testesEle, int k, int i ) {
int maior = i;
int Ladoesquerdo = 2 * eu + 1 ;
int lado direito = 2 * eu + 2 ;
se ( lado esquerdo < k && testEle.get ( lado esquerdo ) > testEle.get ( maior ) ) {
maior = lado esquerdo;
}
se ( lado direito < k && testEle.get ( lado direito ) > testEle.get ( maior ) ) {
maior = lado direito;
}
se ( maior ! = eu ) {
Coleções.trocar ( testesEle, i, maior ) ;
amontoar ( testesEle, k, maior ) ;
}
}
}



Explicação do código acima:

  • Primeiro, a lista “ TESTE ” é inicializado com elementos de dados fictícios no “ principal() ” e impresso no console.
  • Em seguida, a lista “testEle” é passada para a função “maxHeapify()” e, em seguida, a List retornada é exibida no console.
  • Então o ' maxHeapify() ” é inicializado e o tamanho da lista fornecida é recuperado utilizando o método “ tamanho() ” método.
  • Em seguida, utilize o “ para ” para definir a estrutura do heap e calcular a posição de cada nó.
  • Agora, use o “ heapify() ” e defina a posição para os nós “top”, “left” e “right” atribuindo valores às variáveis ​​“greater”, “leftSide” e “rightSide”, respectivamente.
  • Depois disso, utilize vários “ se ” declarações condicionais para verificar se o “ lado esquerdo ” nó é maior que o nó “ lado direito ” nó e vice-versa. No final, o maior valor é armazenado no “ maior ' nó.
  • Finalmente, o novo “ maior ” valor do nó é verificado com o valor já armazenado no “ maior ” variável de nó. E a ' trocar() ” funciona de acordo para definir o maior valor no “ maior ' variável.

Após o final da fase de execução:

O instantâneo mostra que o heap máximo é gerado usando o “ maxHeapify() ” método em Java.

Método 2: Use o método “Collections.reverseOrder()”

O ' Coleções.reverseOrder() ” oferece um método simples e conciso para gerar um “ pilha máxima ” classificando a coleção na ordem inversa. Isso permite que o código seja reutilizado e evita a necessidade de implementar o personalizado “ amontoar ” lógica, conforme mostrado no trecho de código abaixo:

importar java.util.ArrayList;
importar java.util.Collections;
importar java.util.List;

classe pública ReverseOrderExample {
public static void main ( Corda [ ] argumentos ) // criação de principal ( ) método
{
Lista < inteiro > testesEle = new ArrayList <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 38 ) ;
testEle.add ( 98 ) ;
testEle.add ( 26 ) ;
testEle.add ( 1 ) ;
testEle.add ( 73 ) ;
System.out.println ( 'Lista original: ' + testes ) ;
Coleções.sort ( testesEle, Collections.reverseOrder ( ) ) ;
System.out.println ( 'A pilha máxima gerada: ' + testes ) ;
}
}

Explicação do código acima:

  • Primeiro, importe o “ ArrayList ”, “ Coleções ' e ' Lista ” utilitários no arquivo Java.
  • Em seguida, crie um “ Lista 'chamado' TESTE ” e insira elementos fictícios na lista.
  • A seguir, o “ organizar() ” é utilizado para classificar os elementos de dados em ordem crescente e passar a lista como um parâmetro ao longo do “ Coleções.reverseOrder() ” método. Isso faz com que a classificação do “ TESTE ” na ordem inversa.

Após o término da fase de execução:

O instantâneo mostra que “Max Heap” é gerado e classificado usando o método “Collections.reverseOrder()”.

Conclusão

Ao criar um “ pilha máxima ”, os usuários podem utilizar os métodos “maxHeapify()” e “Collections.reverseOrder()”. Eles gerenciam uma coleção de elementos de forma a permitir acesso rápido ao máximo de elementos e manutenção eficiente de uma ordem classificada. Depende apenas dos requisitos específicos e do nível de controle necessário sobre o processo de criação do heap.