Cómo iterar sobre vectores en orden de probabilidad en un espacio pequeño

12

Considere un vector dimensional donde . Para cada sabemos y supongamos que son independientes. Usando estas probabilidades, ¿hay una manera eficiente de iterar sobre vectores binarios dimensionales en orden de más probable a menos probable (con opciones arbitrarias para los lazos) usando el espacio sublineal en el tamaño de salida? nvvi{0,1}ipi=P(vi=1)vin

Tome por ejemplo . El vector más probable es y el menos probable es . p={0.8,0.3,0.6}(1,0,1){0,1,0}

Para muy pequeño podríamos etiquetar cada uno de los vectores con su probabilidad y simplemente ordenarlos, pero esto, por supuesto, aún no usaría espacio sublineal.n2n

Una variante cercana de esta pregunta se hizo anteriormente en /cs/24123/how-to-iterate-over-vectors-in-order-of-probability .

Lembik
fuente
¿Hay alguna razón por la que no hiciste la pregunta de seguimiento allí también? ¿El problema principal aquí es hacer esto en el espacio sublineal?
Suresh Venkat
@SureshVenkat Sí, el problema es completamente sobre el espacio sublineal (en el tamaño de salida). Lo pregunté aquí porque creo que la pregunta puede ser muy difícil.
Lembik
Resolver esto en espacio y tiempo parece requerir técnicas similares a SUBSET-SUM (saber rápidamente qué sumas de subconjuntos casi cancelan diferentes sumas). Por lo tanto, es poco probable que tenga una solución rápida. poly(n)
Geoffrey Irving
@GeoffreyIrving ¿Crees que esta intuición se puede hacer más formal?
Lembik

Respuestas:

9

Lo siguiente proporciona un algoritmo que usa aproximadamente tiempo y espacio.2 n / 22n2n/2

Primero, veamos el problema de ordenar las sumas de todos los subconjuntos de elementos.n

Considere este subproblema: tiene dos listas ordenadas de longitud , y le gustaría crear una lista ordenada de las sumas por pares de los números en las listas. Le gustaría hacer esto en aproximadamente tiempo (el tamaño de salida), pero en un espacio sublineal. Podemos lograr el espacio . Mantenemos una cola de prioridad y sacamos las sumas de la cola de prioridad en orden creciente.O ( m 2 ) O ( m )mO(m2)O(m)

Deje que las listas sean y , ordenadas en orden creciente. Tomamos las sumas , , y las en una cola prioritaria.b 1 ... b m m a i + b 1 i = 1 ... ma1amb1bmmai+b1i=1m

Ahora, cuando sacamos la suma más pequeña restante de la cola de prioridad, si entonces colocamos la suma en la cola de prioridad. El espacio está dominado por la cola de prioridad, que siempre contiene como máximo sumas. Y el tiempo es , ya que usamos para cada operación de cola prioritaria. Esto muestra que podemos hacer el subproblema en el tiempo y el espacio . j < m a i + b j + 1 m O ( m 2 log m ) O ( log m ) O ( m 2 log m ) O ( m )ai+bjj<mai+bj+1mO(m2logm)O(logm)O(m2logm)O(m)

Ahora, para ordenar las sumas de todos los subconjuntos de números, solo usamos esta subrutina donde la lista es el conjunto de sumas de subconjuntos de la primera mitad de los elementos, y la lista es el conjunto de sumas de subconjuntos de segunda mitad de los artículos. Podemos encontrar estas listas de forma recursiva con el mismo algoritmo.a i b inaibi

Ahora consideraremos el problema original. Sea el conjunto de coordenadas que son y el conjunto de coordenadas que son . Entonces 0 S 1 1 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)).

Ordenar estos números es lo mismo que ordenar los números , por lo que hemos reducido el problema a ordenar las sumas de subconjuntos de artículos.niS1logp(vi=1)logp(vi=0)n

Peter Shor
fuente
¿Existe una reducción plausible que haga que una solución poli tiempo / espacio sea inverosímil?
Lembik
Probablemente no va a obtener una solución que tome menos de tiempo, ya que ese es el tamaño de la salida (y mi solución toma tiempo). Sin embargo, no tengo un buen límite inferior para el espacio. n2nn2n
Peter Shor
Gracias. No me refería al tiempo polivinílico, por supuesto, sino a algo lineal en el tamaño de salida y el espacio polivinílico.
Lembik
4

Podemos hacerlo en el espacio (si no nos importa el tiempo de ejecución).O(n)

  1. Para una cadena dada , podemos calcular en el espacio el número de cadenas que son más probables que ; es decir, el número de st : simplemente revise todos y cuente el número de st . Tenga en cuenta que es el número secuencial de la cadena en la salida.x{0,1}nO(n)r(x)xxp(x)>p(x)x{0,1}nxp(x)>p(x)r(x)x
  2. Para cada , podemos encontrar con en el espacio : repasar todo , para cada calcular , detener y generar si .kxr(x)=kO(n)x{0,1}nxr(x)xr(x)=k
  3. Ahora solo repase todas las de a , para cada imprima con .k02n1kxr(x)=k

(También debemos ocuparnos de posibles lazos, pero esto no es difícil).

Yury
fuente
Gracias. Sin embargo, es un algoritmo bastante lento :)
Lembik
0

Editar: esta respuesta es incorrecta. Ver comentarios para más detalles. ~ gandaliter

Lineal en la salida significa . Creo que el algoritmo obvio solo usa el espacio , aparte de la salida en sí, por supuesto.O(2n)O(n)

  1. Tome la lista que contiene los pares y ordénela por, más grande primero.(i,pi)|0.5pi|

  2. Defina una función doblemente recursiva que tome una lista de dichos pares y un vector parcialmente lleno , establezca el valor de env i 1vvi1pi>0.50vviv

  3. Llame a esta función recursiva en la lista ordenada y un vector vacío.

010.5

O(2n)O(n)O ( 2 n ) O ( n ) O ( 2 n )nO(2n)O(n)O(2n)

gandaliter
fuente
La otra respuesta es ciertamente diferente, ya que requiere una cola prioritaria y, por lo tanto, utiliza el espacio . Θ(2n)
Lembik
Gracias. ¡Claramente no lo leí con suficiente cuidado! He editado mi respuesta.
gandaliter
3
¿Estás seguro de que esta solución funciona? No pude entender los detalles de la doble recursión (¡el pseudocódigo ayudaría!), Pero no veo cómo podría funcionar. En particular, su solución parece ser local: si establece , ahora generará respuestas con . Pero las respuestas reales no deberían verse de esta manera. De hecho, hasta donde entendí su solución, parece fallar incluso para el caso más simple donde todos . 2 n - 1 v 1 = 1 p i = 0.5v1=12n1v1=1pi=0.5
mobius dumpling
Tienes razón, esto no funciona. ¡Lo siento!
gandaliter