Trasformazione radiante di Walsh-Hadamard


15

La trasformata di Walsh-Hadamard (WHT) è una generalizzazione della trasformata di Fourier ed è una trasformazione ortogonale su un vettore di numeri reali o complessi di dimensione . La trasformazione è popolare nel calcolo quantistico, ma è stata recentemente studiata come una sorta di precondizionatore per le proiezioni casuali di vettori ad alta dimensione da utilizzare nella dimostrazione del Lemma di Johnson-Lindenstrauss. La sua caratteristica principale è che sebbene sia una matrice quadrata d × d , può essere applicata a un vettore nel tempo O ( d log d ) (piuttosto che d 2 ) con un metodo simile a FFT.d=2md×dO(dlogd)d2

Supponiamo che il vettore di input sia scarso : ha solo poche voci diverse da zero (diciamo ). Esiste un modo per calcolare il WHT nel tempo f ( r , d ) in modo tale che f ( d , d ) = O ( d log d ) e f ( r , d ) = o ( d log d ) per r = o ( d ) ?r«df(r,d)f(d,d)=O(dlogd)f(r,d)=o(dlogd)r=o(d)

Nota: questi requisiti sono semplicemente un modo per formalizzare l'idea che mi piacerebbe qualcosa che corre più veloce di per la piccola r .dlogdr


Sono sicuro che sei a conoscenza delle seguenti due facili osservazioni, ma comunque le scriverò per gli altri lettori: (1) Una semplice moltiplicazione dà O (r) tempo. È meglio di O (d log d) solo quando r = o (log d). (2) Anche se il vettore di input è scarso, in generale l'output non è scarso. Ciò significa che non possiamo sperare che f (r, d) sia o (d) anche per r = 1.
Tsuyoshi Ito,

4
Sai qual è la risposta per la stessa domanda per la trasformata di Fourier?
Robin Kothari,

Tsuyoshi: sì, sono a conoscenza di (1) e questo è in effetti ciò che viene fatto per le applicazioni che ne hanno bisogno. quanto a (2) anche questo è vero. Robin, questo è un buon punto - non so nulla per l'FT, e in effetti potrebbe essere un buon posto per iniziare a scavare.
Suresh Venkat,

Si scopre che avrei dovuto scavare su Wikipedia. la pagina FFT menziona due articoli che potrebbero essere correlati al problema di calcolo sparse.
Suresh Venkat,

Risposte:


6

Indicizza le righe WHT di un numero intero x, per . Quindi x ha i bit di log d. Allo stesso modo, indicizza le colonne. Il (, x y) è ( - 1 ) x , y dove l'esponente è il prodotto scalare di log lunghezza d. Supponiamo che r sia una potenza di 2, arrotondando se necessario. Suddividere la matrice dxr in blocchi rxr lasciando variare i primi bit di registro r e fissando gli altri bit di registro (d / r) in ciascuno dei modi d / r. Questo blocco rxr è una matrice WHT più piccola di dimensione r, tranne per il fatto che potrebbero mancare alcune colonne mancanti, ripetute o negate. In ogni caso, preelaborare facilmente il vettore, quindi eseguire un rxr WHT in time r log r, quindi ripetere d / r volte per il tempo totale d log r.0X<d(-1)X,y

Esempio:

d = 4.

WHT H è

++++
+-+-
++--
+--+

L'insieme arbitrario di colonne è 00 e 10 (all'estrema sinistra e due sopra da quello):

++
++
+-
+-

I blocchi di riga sono

++
++

e

--
--

(un',B)T(un'+B,0)T

++
+-

(un',B)T(-un'-B,0)T

++
+-
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.