Come scorrere i vettori in ordine di probabilità in spazi ristretti


12

Considera un vettore dimensionale v dove v i{ 0 , 1 } . Per ogni i sappiamo p i = P ( v i = 1 ) e supponiamo il v i sono indipendenti. Utilizzando queste probabilità, esiste un modo efficace per scorrere su vettori binari di dimensioni n dimensionali in modo da molto probabilmente a meno probabile (con scelte arbitrarie per i legami) usando lo spazio sublineare nella dimensione dell'output? nvvi{0,1}ipi=P(vi=1)vin

Prendiamo ad esempio . Il vettore più probabile è ( 1 , 0 , 1 ) e il meno probabile è { 0 , 1 , 0 } . p={0.8,0.3,0.6}(1,0,1){0,1,0}

Per molto piccoli potremmo etichettare ciascuno dei 2 n vettori con la sua probabilità e semplicemente ordinare, ma questo ovviamente non userebbe ancora lo spazio sublineare.n2n

Una variante stretta di questa domanda era stata precedentemente posta su /cs/24123/how-to-iterate-over-vectors-in-order-of-probability .


C'è qualche motivo per cui non hai posto la domanda di follow-up anche lì? Il problema principale qui è quello di farlo nello spazio sublineare?
Suresh Venkat,

@SureshVenkat Sì, il problema riguarda interamente lo spazio sublineare (nella dimensione dell'output). L'ho chiesto qui perché penso che la domanda possa essere molto difficile.
Lembik,

Risolvere questo in spazio e tempo sembra richiedere tecniche simili a SUBSET-SUM (sapendo rapidamente quali somme di sottoinsiemi quasi annullano diverse somme). Pertanto, è improbabile che abbia una soluzione rapida. poly(n)
Geoffrey Irving,

@GeoffreyIrving Pensi che questa intuizione possa essere resa più formale?
Lembik,

Risposte:


9

Di seguito viene fornito un algoritmo che utilizza circa tempo e 2 n / 2 di spazio.2n2n/2

Innanzitutto, esaminiamo il problema dell'ordinamento delle somme di tutti i sottoinsiemi di articoli.n

Considera questo sottoproblema: hai due elenchi ordinati di lunghezza e desideri creare un elenco ordinato delle somme a coppie dei numeri negli elenchi. Ti piacerebbe farlo in circa O ( m 2 ) di tempo (la dimensione di output), ma lo spazio sublineare. Siamo in grado di raggiungere lo spazio O ( m ) . Manteniamo una coda di priorità ed estraiamo le somme dalla coda di priorità in ordine crescente.mO(m2)O(m)

Lasciate che le liste siano e b 1 ... b m , ordinati in ordine crescente. Prendiamo le somme m a i + b 1 , i = 1 m e le mettiamo in una coda prioritaria.a1amb1bmmai+b1i=1m

Ora, quando estraiamo la somma rimanente più piccola dalla coda di priorità, se j < m inseriamo quindi la somma a i + b j + 1 nella coda di priorità. Lo spazio è dominato dalla coda di priorità, che contiene sempre al massimo m somme. E il tempo è O ( m 2 log m ) , poiché utilizziamo O ( log m ) per ogni operazione di coda prioritaria. Questo dimostra che possiamo fare il sottoproblema in O ( m 2ai+bjj<mai+bj+1mO(m2logm)O(logm) tempo e O ( m ) spazio.O(m2logm)O(m)

Ora, per ordinare le somme di tutti i sottoinsiemi di numeri, utilizziamo semplicemente questa subroutine in cui l'elenco a i è l'insieme di somme di sottoinsiemi della prima metà degli elementi e l'elenco b i è l'insieme di somme di sottoinsiemi della seconda metà degli articoli. Possiamo trovare questi elenchi in modo ricorsivo con lo stesso algoritmo.naibi

Considereremo ora il problema originale. Sia l'insieme di coordinate che sono 0 e S 1 sia l'insieme di coordinate che sono 1 . Quindi 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)).

L'ordinamento di questi numeri è lo stesso dell'ordinamento dei numeri , quindi abbiamo ridotto il problema all'ordinamento delle somme di sottoinsiemi di n elementi.iS1logp(vi=1)logp(vi=0)n


C'è forse una riduzione che renderebbe non plausibile una soluzione poli tempo / spazio?
Lembik,

2nn2n

Grazie. Ovviamente non intendevo il poli tempo, ma piuttosto qualcosa di lineare nelle dimensioni dell'output e nello spazio polifunzionale.
Lembik,

4

O(n)

  1. x{0,1}nO(n)r(x)xxp(x)>p(x)x{0,1}nxp(x)>p(x)r(x)x
  2. kxr(x)=kO(n)x{0,1}nxr(x)xr(x)=k
  3. k02n1kxr(x)=k

(Dovremmo anche occuparci dei possibili legami, ma questo non è difficile.)


Grazie. È comunque un algoritmo piuttosto lento :)
Lembik,

0

Modifica: questa risposta non è corretta. Vedi i commenti per i dettagli. ~ gandaliter

O(2n)O(n)

  1. (i,pi)|0.5pi|

  2. vvi1pi>0.50vviv

  3. Chiamare questa funzione ricorsiva nell'elenco ordinato e un vettore vuoto.

010.5

O(2n)O(n)nO(2n)O(n)O(2n)passi del tempo. Pertanto questo algoritmo è la complessità nel caso peggiore ottimale.


Θ(2n)

Grazie. Chiaramente non l'ho letto abbastanza attentamente! Ho modificato la mia risposta.
gandaliter,

3
v1=12n1v1=1pi=0.5

Hai ragione, questo non funziona. Scusate!
gandaliter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.