Mam priorytetową kolejkę zdarzeń, ale czasami priorytety zdarzeń zmieniają się, dlatego chciałbym przechowywać iteratory od requesterów zdarzeń do sterty. Jeśli priorytet się zmieni, chciałbym, żeby sterta została skorygowana w log (n) czasie. Zawsze będę miał dokładnie jeden iterator wskazujący na każdy element w stercie.Czy istnieje klasa sterty w C++, która obsługuje zmianę priorytetu elementów innych niż głowa?
Odpowiedz
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.
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.
Spójrz na Boost's mutable heaps.
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”).
Możesz usunąć dowolny element ze sterty w czasie log (n). –
Tak, masz rację, myślałeś o czymś innym :) –
nie ma problemu :) –
- 1. Czy istnieje klasa sorted_vector, która obsługuje funkcję insert() itd.?
- 2. Czy istnieje posortowana kolekcja java, która obsługuje duplikaty?
- 3. Czy istnieje klasa C++, która implementuje operacje z permutacjami?
- 4. Czy istnieje klasa wirtualna w języku C#?
- 5. jQuery do sprawdzenia obrazu istnieje, jeśli głowa 404 niż ukryj
- 6. Czy istnieje klasa Java, która generuje plik POM.xml?
- 7. Efektywne liczenie elementów innych niż NA w data.table
- 8. Czy funkcja kasowania zestawu w C++ zmieni adres innych elementów?
- 9. Klasa bez elementów danych w C++
- 10. Minimalna wersja iOS, która obsługuje C++ 0x
- 11. Czy w JavaScript istnieje klasa adresu URL?
- 12. Sprawdź, czy istnieje klasa
- 13. Jak sprawdzić, czy istnieje klasa?
- 14. Czy istnieje standardowa cykliczna klasa całkowita w C++?
- 15. Czy istnieje sposób ustawienia priorytetu ładowania obrazów w witrynie?
- 16. Czy istnieje standardowa klasa daty/czasu w C++?
- 17. Przybornik doków: czy istnieje sposób na zamontowanie innych folderów niż z c: \ Users Windows?
- 18. Która aktywność obsługuje Intent.ACTION_CALL_PRIVILEGED?
- 19. Wyświetlanie elementów innych niż element pełnoekranowy (pełnoekranowy interfejs API HTML5)
- 20. Czy istnieje klasa IndexSet i klasa Range dla Java?
- 21. Która struktura danych obsługuje wydajne usuwanie i losowy dostęp?
- 22. Czy c-ares obsługuje IOS?
- 23. Czy istnieje sposób na zmianę właściciela JDialog?
- 24. Określanie priorytetu i priorytetu dynamicznego dla operatora w Menhir/Ocamlyacc
- 25. Czy istnieje sposób ustawienia priorytetu wątku tła używanego przez SwingWorker?
- 26. Jak sprawdzić, czy klasa istnieje w css?
- 27. Ustawianie priorytetu wątków Java
- 28. Czy istnieje minimalny rozmiar sterty dla wersji Androida?
- 29. Czy Objective-C obsługuje #elifdef?
- 30. Opis priorytetu operatorów w php
Dzięki, jeśli będę musiał przetaczać własne, użyję tego fragmentu, by zacząć. –
skończyło się na tym rozwiązaniu –
@Ferruccio Dzięki, zaoszczędziło mi dobre 45 minut i kilka błędów. –