Czy częściowy porządek, w przeciwieństwie do całkowitego porządku, wystarczy, by zbudować kupę?
C ++ std :: priority_queue wymaga tylko częściowej kolejności. Ale jeśli jego realizacja jeststerta binarna, jak to działa? Na przykład: załóżmy, że mamy zestaw częściowo uporządkowany( {a, b, c, x}, {c < b, b < a, c < a} )
, x
nie ma z tym nic wspólnegoa
, b
, c
. Wtedy maksymalna kupa to:
layer 1: x
layer 2: b x
layer 3: x x a c
Po operacji pop, w sposób powszechnie spotykany w podręcznikach, tj. Zastąpienie roota przezc
i zmniejsz rozmiar o 1. Następnie musimy skropić drzewo poniżej, w katalogu głównym:
layer 1: c
layer 2: b x
layer 3: x x a
Zamienimy sięc
ib
tak jakc < b
, prawda? I co? Od tego czasu nadal nie mamy prawidłowej stertyb < a
. Aleb
nie można zobaczyć"a
.