Encodage rapide de vecteurs équilibrés

10

Il est facile de voir que pour tout n il existe un mappage 1-1 F de {0,1} n à {0,1} n + O ( log n ) de telle sorte que pour tout x le vecteur F ( x ) est " équilibré ", c'est-à-dire qu'il a un nombre égal de 1 et de 0. Est-il possible de définir un tel F pour que, étant donné x, nous pouvons calculer F ( x ) efficacement?nn+O(logn)xF(x)FxF(x)

Merci.

Piotr
la source
Je suppose que par «efficace» vous voulez dire O (n) ou à peu près, excluant l'argument des «essais aléatoires répétés»?
Suresh Venkat
@Suresh, seriez-vous capable d'esquisser l'argument des "essais aléatoires répétés"?
Emil
une façon de prouver que la cartographie existe est par la méthode probabiliste: choisir F au hasard, puis la cartographie fonctionne avec une certaine probabilité. c'est ce que je voulais dire.
Suresh Venkat
1
La question est parfaitement bien définie mais, à mon avis, le titre est trompeur. Je n'appellerais pas un mappage F satisfaisant à la condition énoncée un «codage de vecteurs équilibrés» à moins que F ne soit bijectif. Cela ressemble plus à un codage d'une chaîne de n bits par un vecteur équilibré.
Tsuyoshi Ito du
«Parfaitement bien défini» jusqu'à des interprétations éventuellement différentes de «efficacement», je veux dire. Mais ce n'est pas le point de mon commentaire précédent.
Tsuyoshi Ito du

Réponses:

12

nx

  • f(x,i)xi
  • b(x)xx x

xg(i)=b(f(x,i))

  • g(0)=b(x)
  • g(n)=g(0)
  • |g(i)g(i+1)|=2i

i1g(i)+1

(n+O(logn))yf(x,i)iyO(logn)xy

O(logn)yO(logn)0

Jukka Suomela
la source
b (x) dans la 3e ligne doit être b (y).
Emil
Je pense que vous devez éventuellement ajouter un autre bit à la chaîne x pour vous assurer qu'il a une longueur égale (afin que vous puissiez être sûr que g (i) est nul pour certains i).
Emil
g(i)ig(i)i1i
@Jukka: Ah oui je vois.
Emil
1
g(i)ii01102log(n)
9

knn/2k(n-1)n/2n-1k-(n-1k(n1n/2)k(n1)n/2n1(n-1)n/2-1k(n1n/2)(n1)n/21

Zeyu
la source
1
Et si vous réutilisez la valeur d'un coefficient binomial pour calculer le prochain coefficient binomial requis, l'algorithme entier s'exécute en temps O (n).
Tsuyoshi Ito du
Merci! C'est logique. Je suppose que le temps d'exécution dépendra du modèle de calcul. Si vous pouvez effectuer des opérations sur des nombres à n bits en temps unitaire, l'implémentation par Tsuyoshi Ito s'exécutera en temps O (n). D'un autre côté, si vous comptez les opérations sur les bits, le temps sera O (n ^ 2), je pense.
Piotr