Muszę przechowywać zestawy elementów typu a. Typ a jest częściowo uporządkowany, więc porównanie i może zwrócić mniejsze, większe, równe lub nieporównywalne.a 2
Jednym z problemów z tablicami skrótów jest to, że dwa równe elementy mogą być reprezentowane w różny sposób i nie mam dostępu do funkcji haszującej zgodnej z równością.
Porównywanie dwóch elementów może być długim procesem, dlatego interesujące byłoby zminimalizowanie porównań. W razie potrzeby można zapamiętać połączenia z operatorem porównania. Teraz zdaję sobie sprawę, że będę musiał przechowywać tylko antichains (lub załóżmy, że tak). Dokładniej, operacje, które będę musiał wykonać, są następujące:
- Usuń element z antichain;
- Spróbuj dodać element. Jeśli element jest mniejszy niż element, nie dodawaj go, w przeciwnym razie dodaj go i usuń każdy element mniejszy niż element.
Mogę również powiązać każdy element dwiema liczbami całkowitymi, więc jeśli wiem, że i , to znajomość natychmiast daje mi . Oczywiście, nie oznacza a \ nie <b ... Znalezienie granic całkowitych jest względnie tanią operacją w porównaniu do porównania pełnego elementu.i 3 < b < i 4 i 2 < i 3 a < b i 2 ≮ i 3 a ≮ b
Odpowiedzi:
Artykuł „Sorting and Selection in PoSets” autorstwa Daskalakis, Karp, Mossel, Risensefield, Verbin, 2008, który opisuje dynamiczną reprezentację PoSets w oparciu o antichains.
Być może zainteresuje Cię także artykuł „Succinct Posets” Munro, Nicholson, 2012, opublikowany niedawno w Arxivie oraz zawarta w nim bibliografia. Ich struktura danych jest statyczna, ale zakładam, że następnym krokiem jest posiadanie dynamicznej struktury danych.
źródło
Czy spojrzałeś na „Wyszukiwanie w dynamicznych częściowych zamówieniach podobnych do drzewa” ? Dają dynamiczną strukturę danych dla problemu poprzednika dotyczącego zestawów. Jest przeznaczony do pamięci RAM, ale możesz reprezentować tablice jako zrównoważone drzewa binarne i ponosić tylko zwielokrotniony narzut jednocześnie czyniąc strukturę czysto funkcjonalną.O ( lgn )
źródło
e
tworzą łańcuch.