Nie zastanawiałem się nad tym bardzo, więc proszę, poprawcie mnie, jeśli się mylę.
Powiedz „ to szerokość zestawu.w
Dla zestawu, który jest połączeniem łańcuchów rozłącznych, potrzebujesz przynajmniej ocen po prostu stosując standardową dolną granicę złożoności zapytania wyszukiwania binarnego dla każdego łańcucha.wwlognP
Ponieważ dajesz porównania za darmo, możesz obliczyć rozkład łańcucha posetu łańcuchy w za darmo. Wykonaj wyszukiwanie binarne w każdym łańcuchu zidentyfikować pierwszy element, który spełnia . Następnie przejrzyj zidentyfikowane elementy i usuń wszystkie zdominowane. Liczba ocen wynosi . To identyfikuje wszystkie maksymalne elementy, ponieważ może być najwyżej jeden maksymalny element na łańcuch.wPPO(wlogn)
DODATKOWO: W rzeczywistości widzę prosty algorytm rekurencyjny, który działałby znacznie lepiej ( ) dla sieci podzbiorów ( EDYCJA : domotor opisał ogólną strategię w swojej odpowiedzi). Tutaj zakładam, że jest monotoniczny w dół (tj. Podzbiory tworzą niższy zbiór), co myślę, co masz na myśli. Oto algorytm znajdowania członka niższego zestawu:O(n)2[n]P{X:P(X)=1}
a) Test . Jeśli 0, to przestań.P(∅)
b) Test . P({n})
bi) Jeśli 0, to powtórz (OK, ponieważ żaden zestaw zawierający może znajdować się w dolnym zestawie).2[n−1]n
b.ii) Jeśli 1, oznacza to, że istnieje element niższego zestawu w sublattice . Ta podsieć jest izomorficzna do więc po raz kolejny możemy się powtórzyć. Dokładniej, możemy uruchomić algorytm dla , ale kiedy algorytm prosi o ocenę , oceniamy gdzie .{X:n∈X}2[n−1]2[n−1]P(Y)P(X)X=Y∪{n}
Tak więc na każdym kroku powracamy do podsieci, która jest o połowę mniejsza od oryginalnej. Ogólnie rzecz biorąc, musimy ocenić co najwyżej razy (w rzeczywistości możesz zaimplementować algorytm, aby oszacować predykat razy, jak wskazuje Yoshio, ponieważ wystarczy sprawdzić tylko raz).P2nn+1∅