Programação  
 
Rede de conhecimento computador >> Programação >> Programação em Java >> Content
Qual é a complexidade do tempo das operações de fila de prioridade em Java?
A complexidade do tempo das operações comuns em um `priorityQueue` em Java depende da operação específica. Aqui está um colapso:

* `add (e e)` / `oferta (e e)` (inserção): O (log n) - Isso ocorre porque a fila de prioridade precisa manter sua propriedade Heap, que requer peneirar o novo elemento para cima ou para baixo na pilha.

* `remover ()` / `poll ()` (remoção do elemento de prioridade mais alta): O (log n) - A remoção do elemento raiz (maior prioridade) requer substituí -lo pelo último elemento e, em seguida, peneirando o elemento de substituição na pilha para restaurar a propriedade Heap.

* `peek ()` (acessando o elemento de prioridade mais alta): O (1) - Espreitar o elemento de prioridade mais alta (a raiz da pilha) é uma operação de acesso direto.

* `contém (objeto o)`: O (n) - Isso requer iterando através dos elementos da fila para verificar a igualdade. O PriorityQueues em Java não fornece uma maneira eficiente de verificar a contenção.

* `remover (objeto o)`: O (n) - semelhante a `contém ()`, isso envolve iterando os elementos para encontrar e remover o objeto especificado. Depois de remover o objeto, a propriedade Heap deve ser mantida, que, na pior das hipóteses, pode levar o tempo O (n). (Remover um elemento arbitrário não é uma operação de fila de prioridade padrão, e o desempenho reflete isso.)

* `size ()`: O (1) - O tamanho é mantido como uma variável de membro, portanto, acessar é uma operação de tempo constante.

* `isEmpty ()`: O (1) - basta verificar se o tamanho é 0.

* `clear ()`: O (n) - remove todos os elementos da fila. Embora a remoção de elementos individuais possa levar O (log n), a limpeza de toda a fila toma O (n). Em algumas implementações, isso pode ser implementado como O (1), apenas redefinindo a matriz e o tamanho internos.

* `iterator ()`: O (1) - retorna um iterador para a fila de prioridade. O próprio iterador * não é * ordenado, e a iteração dos elementos será O (n).

Considerações importantes:

* `priorityqueue` é implementado como uma pilha binária. A estrutura de dados da heap é o que lhe dá seu desempenho logarítmico para inserção e remoção do elemento de prioridade mais alta.
* O comparador é crucial. O comparador (ou a ordem natural dos elementos se nenhum comparador for fornecido) é o que determina a prioridade dos elementos. O método `Compare ()` do comparador deve ser eficiente (normalmente O (1)) para as operações gerais da fila de prioridade para manter sua complexidade declarada.
* remover elementos arbitrários (`remover (objeto o)`) é ineficiente. Se você frequentemente precisar remover elementos arbitrários de uma fila de prioridade, considere o uso de uma estrutura de dados diferente ou uma combinação de estruturas de dados (por exemplo, um `Treeeset` combinado com um` hashmap` para rastrear as posições do elemento). As filas de prioridade padrão são otimizadas para acesso eficiente ao elemento de prioridade mais alta.

em resumo:

As operações principais de `add ()` e `remover ()` (do * elemento prioritário * mais alto * são O (log n), tornando o `priorityqueue` uma opção muito eficiente para cenários em que você precisa manter uma coleção classificada e acessar repetidamente ou remover o elemento mínimo (ou máximo, dependendo do comparador).

Anterior :

Próximo : No
  Os artigos relacionados
·Como mostrar o botão de Java Applet Como Disabled 
·Como posso implementar a maior travessia da coluna em J…
·Como criar um armazenamento de chaves em Java 
·Como alterar o JDK no BEA WebLogic 8.1 
·O que é um arquivo j2k? 
·Como criar um calendário em Java 
·Diferentes tipos de relacionamento em Java 
·Como corrigir erro de localização de Java 
·Como exibir números de linha no JCreator 
·Tipos de arquivo JSP 
  Artigos em destaque
·Como ignorar linhas de comentário em C + + 
·Como verificar um Array para Cordas em Python 
·Como inserir um símbolo de porcentagem ao lado uma Str…
·Cache PHP MySQL Query Results 
·Como criar um novo VB PictureBox 
·Como verificar se a string é um número em java usando…
·Script de backup para arquivos PHP MySQL 
·Como encontrar o Diretório Perl em um servidor 
·Como acessar o Registro do Windows de Java 
·Como escrever para um arquivo com JAVA 
Cop e direita © Rede de conhecimento computador https://ptcomputador.com Todos os Direitos Reservados