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?
Tome por ejemplo . El vector más probable es y el menos probable es .
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.
Una variante cercana de esta pregunta se hizo anteriormente en /cs/24123/how-to-iterate-over-vectors-in-order-of-probability .
ds.algorithms
space-bounded
Lembik
fuente
fuente
Respuestas:
Lo siguiente proporciona un algoritmo que usa aproximadamente tiempo y espacio.2 n / 22n 2n/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 )m O(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 ... ma1…am b1…bm m ai+b1 i=1…m
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+bj j<m ai+bj+1 m O(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 in ai bi
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 )S0 0 S1 1
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.n∑i∈S1logp(vi=1)−logp(vi=0) n
fuente
Podemos hacerlo en el espacio (si no nos importa el tiempo de ejecución).O(n)
(También debemos ocuparnos de posibles lazos, pero esto no es difícil).
fuente
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)
Tome la lista que contiene los pares y ordénela por, más grande primero.(i,pi) |0.5−pi|
Defina una función doblemente recursiva que tome una lista de dichos pares y un vector parcialmente lleno , establezca el valor de env i 1v vi 1 pi>0.5 0 v vi v
Llame a esta función recursiva en la lista ordenada y un vector vacío.
fuente