Jak iterować po wektorach w kolejności prawdopodobieństwa na małej przestrzeni

12

Rozważmy wymiarowy wektor gdzie . Dla każdego wiemy i załóżmy, że są niezależne. Wykorzystując te prawdopodobieństwa, czy istnieje skuteczny sposób na iterację binarnych wektorów wymiarowych w kolejności od najbardziej prawdopodobnego do najmniej prawdopodobnego (z dowolnymi wyborami wiązań) z wykorzystaniem przestrzeni podliniowej w wielkości wyjściowej? v v i{ 0 , 1 } i p i = P ( v i = 1 ) v i nnvvi{0,1}ipi=P(vi=1)vin

Weźmy na przykład . Najbardziej prawdopodobny wektor to a najmniej prawdopodobne to . ( 1 , 0 , 1 ) { 0 , 1 , 0 }p={0.8,0.3,0.6}(1,0,1){0,1,0}

W przypadku bardzo małej liczby możemy oznaczyć każdy z wektorów prawdopodobieństwem i po prostu posortować, ale to oczywiście nie użyłoby przestrzeni podliniowej.2 nn2n

Dokładny wariant tego pytania został wcześniej zadany na stronie /cs/24123/how-to-iterate-over-vectors-in-order-of-probability .

Lembik
źródło
Czy jest jakiś powód, dla którego nie zadałeś też pytania uzupełniającego? Czy głównym problemem jest tutaj robienie tego w przestrzeni podliniowej?
Suresh Venkat
@SureshVenkat Tak, problem dotyczy wyłącznie przestrzeni podliniowej (w wielkości wyjściowej). Zadałem to pytanie, ponieważ myślę, że pytanie może być bardzo trudne.
Lembik
Rozwiązanie tego w przestrzeni i czasie wydaje się wymagać technik podobnych do SUBSET-SUM (szybko wiedząc, które sumy podzbiorów prawie anulują różne sumy). Dlatego jest mało prawdopodobne, aby mieć szybkie rozwiązanie. poly(n)
Geoffrey Irving,
@GeoffreyIrving Czy uważasz, że tę intuicję można uczynić bardziej formalną?
Lembik

Odpowiedzi:

9

Poniżej podano algorytm, który wykorzystuje około czasu i przestrzeni.2 n / 22n2n/2

Najpierw spójrzmy na problem sortowania sum wszystkich podzbiorów elementów.n

Zastanów się nad tym podproblemem: masz dwie posortowane listy o długości i chciałbyś stworzyć posortowaną listę sum par liczb na listach. Chciałbyś to zrobić w przybliżeniu w czasie (rozmiar wyjściowy), ale w przestrzeni podliniowej. Możemy osiągnąć przestrzeń . Trzymamy kolejkę priorytetową i wyciągamy sumy z kolejki priorytetowej w kolejności rosnącej.O ( m 2 ) O ( m )mO(m2)O(m)

Niech wykazy być 1 ... a m i b 1 ... b m , sortowane w porządku rosnącym. Bierzemy m sum a i + b 1 , i = 1 m i umieszczamy je w kolejce priorytetowej.a1amb1bmmai+b1i=1m

Teraz, gdy wyciągniemy najmniejszą pozostałą sumę z kolejki priorytetowej, jeśli j < m , wówczas umieszczamy sumę a i + b j + 1 w kolejce priorytetowej. W przestrzeni dominuje kolejka priorytetowa, która zawsze zawiera najwyżej m sum. Czas to O ( m 2 log m ) , ponieważ używamy O ( log m ) dla każdej operacji kolejki priorytetowej. To pokazuje, że możemy zrobić podproblem w O ( m 2ai+bjj<mai+bj+1mO(m2logm)O(logm) czas i przestrzeń O ( m ) .O(m2logm)O(m)

Teraz, aby uporządkować sumy wszystkich podzbiorów liczb, po prostu korzystać z tego podprogramu gdzie lista I jest zbiorem sumy podzbiorów pierwszej połowie pozycji, a lista b I jest zbiorem sumy podzbiorów drugiej połowy przedmiotów. Możemy znaleźć te listy rekurencyjnie za pomocą tego samego algorytmu.naibi

Rozważymy teraz oryginalny problem. Niech będzie zbiorem współrzędnych, które są 0 , a S 1 będzie zbiorem współrzędnych, które są 1 . Następnie i S 0 p ( v i = 0 ) i S 1 p ( v i = 1 )S00S11

iS0p(vi=0)iS1p(vi=1)=1inp(vi=0)iS1p(vi=1)p(vi=0)=1inp(vi=0)exp(iS1logp(vi=1)p(vi=0)).

Sortowanie tych liczb jest takie samo jak sortowanie liczb , więc zredukowaliśmy problem do sortowania sum podzbiorów n elementów.iS1logp(vi=1)logp(vi=0)n

Peter Shor
źródło
Czy istnieje prawdopodobna redukcja, która spowodowałaby, że rozwiązanie poli-czas / przestrzeń byłoby niewiarygodne?
Lembik
Prawdopodobnie nie dostaniesz rozwiązania, które zajmuje mniej niż czasu, ponieważ jest to wielkość wyniku (a moje rozwiązanie wymaga n2n czasie). Nie mam jednak dobrej dolnej granicy przestrzeni. n2n
Peter Shor,
Dziękuję Ci. Nie miałem oczywiście na myśli czasu poli, ale raczej coś liniowego w wielkości wyjściowej i przestrzeni poli.
Lembik
4

Możemy to zrobić w przestrzeni (jeśli nie zależy nam na czasie działania).O(n)

  1. Dla danego ciągu możemy obliczyć w przestrzeni O ( n ) liczbę r ( x ) ciągów, które są bardziej prawdopodobne niż x ; to znaczy liczba x st p ( x ) > p ( x ) : wystarczy przejrzeć wszystkie x { 0 , 1 } n i policzyć liczbę x stx{0,1}nO(n)r(x)xxp(x)>p(x)x{0,1}nx . Zauważ, że r ( x ) to kolejny numer ciągu x na wyjściu.p(x)>p(x)r(x)x
  2. Dla każdego możemy znaleźć x z r ( x ) = k w przestrzeni O ( n ) : przejrzyj wszystkie x { 0 , 1 } n , dla każdego x obliczenia r ( x ) , zatrzymaj i wyjmij x, jeśli r ( x ) = k .kxr(x)=kO(n)x{0,1}nxr(x)xr(x)=k
  3. Teraz wystarczy przejrzeć wszystkie od 0 do 2 n - 1 , dla każdego k drukuj x z r ( x ) = k .k02)n-1kxr(x)=k

(Powinniśmy również zadbać o możliwe powiązania, ale nie jest to trudne).

Yury
źródło
Dziękuję Ci. Jest to jednak dość powolny algorytm :)
Lembik
0

Edycja: ta odpowiedź jest niepoprawna. Zobacz komentarze, aby uzyskać szczegółowe informacje. ~ gandaliter

Liniowy na wyjściu oznacza . Myślę, że oczywisty algorytm wykorzystuje tylko przestrzeń O ( n ) , oczywiście poza samym wyjściem.O(2n)O(n)

  1. Weź listę zawierającą pary i posortuj ją według | 0,5 - p i | , najpierw największy.(i,pi)|0.5pi|

  2. Zdefiniuj podwójnie rekurencyjną funkcję, która pobiera listę takich par i częściowo wypełnionego wektora , ustawia wartość v i na 1, jeśli p i > 0,5 , a 0 w przeciwnym razie, i powtarza (używając końca listy i v ) , następnie odwraca v i powtarza się ponownie. Jeśli lista jest pusta, zamiast tego wyprowadza v .vvi1pi>0.50vvjav

  3. Wywołaj tę funkcję rekurencyjną na posortowanej liście i pustym wektorze.

Intuicja polega na tym, że najpierw ustawiasz wartości najbardziej pewnych elementów w wektorze (tych, których prawdopodobieństwa są najbliższe i 1 ), i wypełniasz wektor w ten sposób, kończąc na tych, których prawdopodobieństwa są najbliższe 0,5 . Każda możliwa wartość, jaką może przyjąć cały wektor, jest wyprowadzana w kolejności prawdopodobieństwa.010,5

Czas działania wynosi , co stanowi dolną granicę, ponieważ jest to długość wyniku. Złożoność przestrzeni wynosi O ( n ), ponieważ sortowanie nie wymaga więcej, a długość rekurencyjna to długość wektora, który wynosi n . Uważam, że jest to również dolna granica, ponieważ musi istnieć inny stan w pamięci dla każdego kroku działania algorytmu, a złożoność czasu wynosi O ( 2 n ) . Stany O ( n ) w pamięci są wymagane do wyliczenia O ( 2 n )O(2)n)O(n)nO(2)n)O(n)O(2)n)kroki czasowe. Dlatego algorytm ten jest optymalizowany w najgorszym przypadku.

gandaliter
źródło
Druga odpowiedź jest z pewnością inna, ponieważ wymaga kolejki priorytetowej, a zatem używa spacji . Θ(2n)
Lembik
Dzięki. Najwyraźniej nie przeczytałem go wystarczająco uważnie! Zredagowałem swoją odpowiedź.
gandaliter
3
v1=12)n-1v1=1pja=0,5
Masz rację, to nie działa. Przepraszam!
gandaliter