A ordem parcial, em contraste com a ordem total, é suficiente para construir um monte?
C ++ std :: priority_queue só precisa de um pedido parcial. Mas se a sua implementação é umheap binário, como isso funciona? Por exemplo: suponha que tenhamos um conjunto parcialmente ordenado( {a, b, c, x}, {c < b, b < a, c < a} )
, x
não tem nada a ver coma
, b
, c
. Então, um heap máximo é:
layer 1: x
layer 2: b x
layer 3: x x a c
Depois de uma operação pop, de uma forma comumente vista em livros de texto, ou seja, substituir a raiz comc
e diminua o tamanho em 1. Então precisamos empilhar a árvore abaixo, na raiz:
layer 1: c
layer 2: b x
layer 3: x x a
Vamos trocarc
eb
Comoc < b
não vamos? E o que? Ainda não temos uma pilha válida desdeb < a
. Masb
não pode ver"a
.