The Walsh-Hadamard Transform (WHT) adalah generalisasi dari transformasi Fourier, dan transformasi ortogonal pada vektor bilangan real atau kompleks dimensi . Transformasi ini populer dalam komputasi kuantum, tetapi telah dipelajari baru-baru ini sebagai semacam prasyarat untuk proyeksi acak vektor dimensi tinggi untuk digunakan sebagai bukti dari Johnson-Lindenstrauss Lemma. Fitur utamanya adalah walaupun ini adalah kuadrat matriks, ia dapat diterapkan pada vektor dalam waktu (daripada ) dengan metode seperti FFT.
Misalkan vektor input jarang : hanya memiliki beberapa entri bukan nol (katakanlah ). Apakah ada cara untuk menghitung WHT dalam waktu sedemikian rupa sehingga dan untuk ?
Catatan: persyaratan ini hanyalah salah satu cara memformalkan gagasan bahwa saya ingin sesuatu yang berjalan lebih cepat daripada untuk kecil .
sumber
Jawaban:
Indeks baris WHT dengan bilangan bulat x, untuk . Jadi x memiliki log d bit. Demikian pula, indeks kolom. (X, y) posisi adalah ( - 1 ) ⟨ x , y ⟩ mana eksponen adalah produk titik panjang log d. Asumsikan r adalah kekuatan 2, mengumpulkan jika perlu. Pecahkan matriks dxr menjadi blok rxr dengan membiarkan bit log pertama r bervariasi dan memperbaiki bit log lain (d / r) dalam setiap cara d / r. Blok rxr ini adalah matriks WHT yang lebih kecil dengan ukuran r, kecuali mungkin ada beberapa kolom yang hilang, berulang, atau dinegasikan. Bagaimanapun, preprocess vektor dengan mudah kemudian lakukan rxr WHT dalam waktu r log r, lalu ulangi d / r kali untuk total waktu d log r.0 ≤ x < d ( - 1 )⟨ X , y⟩
Contoh:
d = 4.
WHT H adalah
Rangkaian kolom yang sewenang-wenang adalah 00 dan 10 (paling kiri dan dua di atasnya):
Blok baris adalah
dan
sumber