find-min (resp. ), (resp. ) e são as três operações mais importantes de um min-heap (resp. max-heap) e geralmente possuem complexidade de , e respectivamente, se você implementar um min / max-heap por uma árvore binária.find-maxdelete-mindelete-maxinsertO(1)O(logn)O(logn)
Agora, suponha que você implemente um min-heap por uma matriz classificada (não decrescente) (o caso do max-heap é semelhante). e têm complexidade de se não for necessário em seu aplicativo, pois você pode mantenha um ponteiro que sempre aponte para o elemento mínimo em sua matriz. Quando o elemento mínimo é removido, você só precisa mover um passo para o próximo elemento na matriz.find-mindelete-minO(1)insertpp
Lidar com a inserção em uma matriz classificada não é trivial. Dado um novo elemento , podemos usar a pesquisa binária para localizar sua posição na matriz para inseri-lo. Mas o ponto é que, se você deseja inseri-lo lá, é necessário mover muitos elementos antigos (pode ser ) para criar uma vaga para o novo elemento residir. Isso é bastante ineficiente para a maioria dos aplicativos. Você também pode optar por reordenar a matriz após a inserção de um elemento ; no entanto , isso requer tempo .eO(n)O(nlogn)
O último ponto, como você implementa uma estrutura de dados realmente depende do seu aplicativo. Nenhuma implementação única é melhor para todos os casos. Analise seu aplicativo, descubra as operações mais frequentes e decida a implementação apropriada.