Codifica rapida di vettori bilanciati


10

È facile vedere che per ogni n esiste una 1-1 mappatura F da {0,1} n a {0,1} n + O ( log n ) tale che per ogni x il vettore F ( x ) è " bilanciato ", ovvero ha un numero uguale di 1 e 0 secondi. È possibile definire tale F in modo che dato x possiamo calcolare F ( x ) in modo efficiente?nn+O(logn)xF(x)FxF(x)

Grazie.


Suppongo che per "efficiente" intendi O (n) o giù di lì, escludendo l'argomento "prove casuali ripetute"?
Suresh Venkat,

@Suresh, Saresti in grado di delineare l'argomento "ripetute prove casuali"?
Emil,

un modo per dimostrare l'esistenza della mappatura è con il metodo probabilistico: selezionare F a caso, quindi la mappatura funziona con una certa probabilità. Ecco cosa intendevo.
Suresh Venkat,

1
La domanda è perfettamente ben definita ma, a mio avviso, il titolo è fuorviante. Non definirei una mappatura F che soddisfa la condizione dichiarata una "codifica di vettori bilanciati" a meno che F non sia biiettivo. È più simile a una codifica di una stringa n-bit di un vettore bilanciato.
Tsuyoshi Ito,

"Perfettamente ben definito" fino a possibili interpretazioni diverse di "in modo efficiente", intendo. Ma questo non è il punto del mio commento precedente.
Tsuyoshi Ito,

Risposte:


12

Consideriamo le stringhe -bit x . definizioni:nx

  • = stringa di bit x con gli ultimi i bit integrati.f(x,i)xi
  • = "squilibrio" di x : numero di 1s in x - numero di 0s in x .b(x)xx x

Ora correggi una stringa . Considera la funzione g ( i ) = b ( f ( x , i ) ) . osservazioni:xg(i)=b(f(x,i))

  • .g(0)=b(x)
  • .g(n)=g(0)
  • per tutti i . Rimuoviamo uno 0 e aggiungiamo uno 1 o viceversa.|g(i)g(i+1)|=2i

Ora ne segue che esiste una tale che - 1 g ( i ) + 1 .i1g(i)+1

Quindi possiamo costruire una stringa di bit y come segue: concatenare f ( x , i ) e la codifica binaria dell'indice i . Il valore assoluto dello squilibrio di y è O ( log n ) . Inoltre, possiamo recuperare x dato y ; la mappatura è biiezione.(n+O(logn))yf(x,i)iyO(logn)xy

Infine, è possibile aggiungere bit fittizi che riducono lo squilibrio di y da O ( log n ) a 0 .O(logn)yO(logn)0


b (x) nella terza riga dovrebbe essere b (y).
Emil,

Penso che dovresti eventualmente aggiungere un altro bit alla stringa x per assicurarti che abbia lunghezza pari (in modo che tu possa essere sicuro che g (i) sia zero per alcuni i).
Emil,

g(i)ig(i)i1i

@Jukka: Ah sì, vedo.
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


1
E se riutilizzi il valore di un coefficiente binomiale per calcolare il coefficiente binomiale richiesto successivo, l'intero algoritmo viene eseguito nel tempo O (n).
Tsuyoshi Ito,

Grazie! Questo ha senso. Immagino che il tempo di esecuzione dipenderà dal modello computazionale. Se è possibile eseguire operazioni su numeri n-bit in unità di tempo, l'implementazione di Tsuyoshi Ito verrà eseguita in tempo O (n). D'altra parte, se si contano le operazioni sui bit, il tempo sarà O (n ^ 2), credo.
Piotr
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.