2009-05-29 13 views

Odpowiedz

3

Cieszę się zgłosić, które zwiększają dodano teraz Boost.Heap library z niektórymi stellar data structures.

Zaletą tego jest fakt, że kupony Fibonacciego zmieniają priorytet w stałym amortyzowanym czasie.

Niestety, wszystkie zmienne stosy są oparte na węzłach (innymi słowy, mają dodatkowe pośrednie zgodnie z sugestią @wilx). Odpowiedź @ Feruccia na "zmienne stosy Boosta" ma kod, który pozwala pisać zmienne stosy oparte na wektorach, jeśli chcesz mieć wskaźniki do uchwytów zawartych w twoim typie wartości.

2

To brzmi, jakbyś potrzebował więcej pośrednictwa. Zamiast tego zapisz wskaźnik do zdarzeń w kolejce priorytetów. Gdy priorytet zmieni się w elemencie kolejki, usuń go i włóż ponownie.

10

Spójrz na Boost's mutable heaps.

+0

Dzięki, jeśli będę musiał przetaczać własne, użyję tego fragmentu, by zacząć. –

+1

skończyło się na tym rozwiązaniu –

+1

@Ferruccio Dzięki, zaoszczędziło mi dobre 45 minut i kilka błędów. –

0

ostrzeżenie jest to, że możesz skończyć z niestabilnym przypadku sortowania, czyli kolejność wydarzeń z takim samym priorytetem jest niezdefiniowany (read „zostaną zreorganizowane”).

+1

Możesz usunąć dowolny element ze sterty w czasie log (n). –

+0

Tak, masz rację, myślałeś o czymś innym :) –

+0

nie ma problemu :) –