La transformée de Walsh-Hadamard (WHT) est une généralisation de la transformée de Fourier, et est une transformation orthogonale sur un vecteur de nombres réels ou complexes de dimension . La transformation est populaire en informatique quantique, mais elle a été étudiée récemment comme une sorte de préconditionneur pour les projections aléatoires de vecteurs de grande dimension à utiliser dans la preuve du lemme de Johnson-Lindenstrauss. Sa principale caractéristique est que bien qu'il s'agisse d'une matrice carrée d × d , elle peut être appliquée à un vecteur dans le temps O ( d log d ) (plutôt que d 2 ) par une méthode de type FFT.
Supposons que le vecteur d'entrée soit clairsemé : il n'a que quelques entrées non nulles (disons ). Existe-t-il un moyen de calculer le WHT dans le temps f ( r , d ) tel que f ( d , d ) = O ( d log d ) et f ( r , d ) = o ( d log d ) pour r = o ( d ) ?
Remarque: ces exigences ne sont qu'un moyen de formaliser l'idée que j'aimerais quelque chose qui tourne plus vite que pour petit r .
la source
Réponses:
Indexez les lignes WHT par un entier x, pour . Donc x a des bits de log d. De même, indexez les colonnes. (X, y) est la position ( - 1 ) ⟨ x , y ⟩ où l'exposant est le produit scalaire de journal de longueur d. Supposons que r est une puissance de 2, arrondissant si nécessaire. Divisez la matrice dxr en blocs rxr en laissant varier les premiers bits de log r et en fixant les autres bits de log (d / r) de chacune des manières d / r. Ce bloc rxr est une matrice WHT plus petite de taille r, sauf qu'il peut y avoir des colonnes manquantes, répétées ou annulées. Dans tous les cas, prétraitez facilement le vecteur, puis effectuez un rxr WHT dans le temps r log r, puis répétez d / r fois pour le temps total d log r.0 ≤ x < d ( - 1 )⟨ X , y⟩
Exemple:
d = 4.
WHT H est
Un ensemble arbitraire de colonnes est 00 et 10 (le plus à gauche et deux de plus):
Les blocs de lignes sont
et
la source