Comment itérer sur des vecteurs par ordre de probabilité dans un petit espace

12

Considérons un vecteur dimensionnel vv i{ 0 , 1 } . Pour chaque i, nous connaissons p i = P ( v i = 1 ) et supposons que les v i sont indépendants. En utilisant ces probabilités, existe-t-il un moyen efficace d'itérer sur des vecteurs binaires de dimension n dans l'ordre du plus probable au moins probable (avec des choix arbitraires pour les liens) en utilisant l'espace sublinéaire dans la taille de sortie? nvvi{0,1}ipi=P(vi=1)vin

Prenons par exemple . Le vecteur le plus probable est ( 1 , 0 , 1 ) et le moins probable est { 0 , 1 , 0 } . p={0.8,0.3,0.6}(1,0,1){0,1,0}

Pour un très petit, nous pourrions étiqueter chacun des 2 n vecteurs avec sa probabilité et simplement trier, mais cela n'utiliserait bien sûr pas encore l'espace sublinéaire.n2n

Une variante proche de cette question a déjà été posée sur /cs/24123/how-to-iterate-over-vectors-in-order-of-probability .

Lembik
la source
Y a-t-il une raison pour laquelle vous n'avez pas posé la question de suivi là aussi? Le problème principal ici est-il de le faire dans l'espace sublinéaire?
Suresh Venkat
@SureshVenkat Oui, le problème concerne entièrement l'espace sublinéaire (dans la taille de sortie). Je l'ai posée ici car je pense que la question peut être très difficile.
Lembik
Résoudre ce problème dans l' espace et le temps semble nécessiter des techniques similaires à SUBSET-SUM (savoir rapidement quelles sommes de sous-ensembles annulent presque différentes sommes). Ainsi, il est peu probable d'avoir une solution rapide. poly(n)
Geoffrey Irving
@GeoffreyIrving Pensez-vous que cette intuition puisse être rendue plus formelle?
Lembik

Réponses:

9

Ce qui suit donne un algorithme qui utilise environ temps et 2 n / 2 espace.2n2n/2

Examinons d'abord le problème du tri des sommes de tous les sous-ensembles de éléments.n

Considérez ce sous-problème: vous avez deux listes triées de longueur , et vous souhaitez créer une liste triée des sommes par paire des nombres dans les listes. Vous souhaitez le faire dans un temps d'environ O ( m 2 ) (la taille de sortie), mais dans un espace sublinéaire. Nous pouvons atteindre un espace O ( m ) . Nous gardons une file d'attente prioritaire et retirons les sommes de la file d'attente prioritaire dans l'ordre croissant.mO(m2)O(m)

Soit les listes et b 1b m , triées par ordre croissant. Nous prenons les m sommes a i + b 1 , i = 1 m , et les mettons dans une file d'attente prioritaire.a1amb1bmmai+b1i=1m

Maintenant, lorsque nous tirons la plus petite somme restante de la file d'attente prioritaire, si j < m nous mettons alors la somme a i + b j + 1 dans la file d'attente prioritaire. L'espace est dominé par la file d'attente prioritaire, qui contient toujours au plus m sommes. Et le temps est O ( m 2 log m ) , puisque nous utilisons O ( log m ) pour chaque opération de file d'attente prioritaire. Cela montre que nous pouvons faire le sous-problème en O ( m 2ai+bjj<mai+bj+1mO(m2logm)O(logm) temps et O ( m ) espace.O(m2logm)O(m)

Maintenant, pour trier les sommes de tous les sous-ensembles de nombres, nous utilisons simplement ce sous-programme où la liste a i est l'ensemble des sommes des sous-ensembles de la première moitié des éléments, et la liste b i est l'ensemble des sommes des sous-ensembles de la seconde moitié des articles. On peut retrouver ces listes récursivement avec le même algorithme.naibi

Nous allons maintenant considérer le problème d'origine. Soit l'ensemble des coordonnées qui sont 0 et S 1 l'ensemble des coordonnées 1 . Alors 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)).

Le tri de ces nombres revient à trier les nombres , nous avons donc réduit le problème du tri des sommes des sous-ensembles de n éléments.iS1logp(vi=1)logp(vi=0)n

Peter Shor
la source
Y a-t-il vraisemblablement une réduction qui rendrait improbable une solution poly temps / espace?
Lembik
2nn2n
Je vous remercie. Je ne voulais pas dire poly temps bien sûr, mais plutôt quelque chose de linéaire dans la taille de sortie et l'espace poly.
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

(Nous devons également nous occuper des liens possibles, mais ce n'est pas difficile.)

Yury
la source
Je vous remercie. C'est un algorithme assez lent cependant :)
Lembik
0

Modifier: cette réponse est incorrecte. Voir les commentaires pour plus de détails. ~ gandaliter

O(2n)O(n)

  1. (i,pi)|0.5pi|

  2. vvi1pi>0.50vviv

  3. Appelez cette fonction récursive sur la liste triée et un vecteur vide.

010.5

O(2n)O(n)nO(2n)O(n)O(2n)pas de temps. Par conséquent, cet algorithme est optimal dans le pire des cas.

gandaliter
la source
Θ(2n)
Merci. Je ne l'ai clairement pas lu assez attentivement! J'ai édité ma réponse.
gandaliter
3
v1=12n1v1=1pi=0.5
Vous avez raison, cela ne fonctionne pas. Pardon!
gandaliter