Pertanyaan:
Apakah ada prosedur atau teori yang mapan untuk menghasilkan kode yang secara efisien menerapkan perkalian matriks-vektor, ketika matriks padat dan diisi hanya dengan nol dan satu? Idealnya, kode yang dioptimalkan akan membuat penggunaan sistematis informasi yang dihitung sebelumnya untuk mengurangi duplikasi pekerjaan.
Dengan kata lain, saya memiliki matriks dan saya ingin melakukan beberapa perhitungan berdasarkan , yang akan membuat komputasi seefisien mungkin ketika saya nanti menerima vektor .
adalah matriks biner padat persegi panjang yang dikenal pada "waktu kompilasi", sedangkan adalah vektor nyata yang tidak diketahui yang hanya dikenal pada "run time".
Contoh 1: (jendela geser)
Biarkan saya menggunakan contoh kecil yang mudah untuk menggambarkan poin saya. Pertimbangkan matriksnya, Misalkan kita menerapkan matriks ini ke vektor untuk mendapatkan . Maka entri dari hasilnya adalah,
Melakukan perkalian matriks-vektor standar akan menghitung dengan cara ini. Namun, banyak dari pekerjaan ini yang mubazir. Kita bisa melakukan perhitungan matriks yang sama dengan biaya lebih murah dengan melacak "running total", dan menambahkan / mengurangi untuk mendapatkan nomor berikutnya:
Contoh 2: (struktur hierarkis)
Pada contoh sebelumnya, kita bisa melacak total yang berjalan. Namun, biasanya orang perlu membuat dan menyimpan pohon hasil menengah. Sebagai contoh, pertimbangkan
- Hitung dan , dan tambahkan mereka untuk mendapatkan .
- Hitung dan , dan tambahkan mereka untuk mendapatkan .
- Tambahkan dan untuk mendapatkanw 3 w 1
Struktur dalam contoh di atas mudah dilihat, tetapi untuk matriks yang sebenarnya saya tertarik, strukturnya tidak begitu sederhana.
Contoh 3: (peringkat rendah)
Untuk menjernihkan kebingungan, matriks pada umumnya tidak jarang. Secara khusus, metode yang memecahkan masalah ini harus dapat menemukan metode yang efisien untuk menerapkan matriks di mana blok besar diisi dengan yang. Sebagai contoh, pertimbangkan
Matriks ini dapat didekomposisi sebagai perbedaan dari dua matriks peringkat-1,
jadi aksinya pada vektor dapat dihitung secara efisien dengan, w 1
Motivasi:
Saya sedang mengerjakan metode numerik untuk beberapa pemrosesan gambar, dan ada beberapa matriks padat besar dengan struktur berbeda yang diperbaiki untuk semua waktu. Nanti matriks-matriks ini perlu diterapkan pada banyak vektor tidak dikenal yang akan bergantung pada input pengguna. Saat ini saya menggunakan pensil-dan-kertas untuk menghasilkan kode efisien berdasarkan per-matriks, tapi saya bertanya-tanya apakah prosesnya dapat otomatis.v i
Edit: (tambahan)
Semua jawaban di sini sejauh ini (per 9/5/15) menarik, tetapi tidak ada yang menjawab pertanyaan dengan memuaskan seperti yang saya harapkan. Mungkin ternyata ini adalah pertanyaan penelitian yang sulit, dan tidak ada yang tahu jawaban yang bagus.
Karena waktu telah habis, saya memberikan hadiah untuk jawaban EvilJS karena ini menjawab pertanyaan yang tepat. Namun, saya berharap jawabannya berisi penjelasan yang lebih jelas dan terperinci.
Jawaban tranisstor membuat hubungan antara pertanyaan ini dan masalah Online Boolean Matrix-Vector Multiplication (OMv), tetapi koneksi tidak persis apa yang ditanyakan pertanyaan ini. Secara khusus, asumsi berikut ini tidak benar-benar cocok (penekanan berani saya),
Sekarang asumsikan bahwa untuk semua dan semua matriks n × n M kita tahu algoritma , bahwa untuk semua vektor menghitung dalam waktu yang benar-benar subquadratic, yaitu dalam waktu untuk beberapa . v M v O ( n 2 - ε ) ε > 0
Apakah ada atau tidak algoritma subquadratic untuk semua matriks adalah ortogonal untuk pertanyaan menemukan suatu algoritma untuk matriks tertentu yang secepat mungkin. Sebagian besar matriks 0-1 terlihat seperti noise acak dan (jika saya menebak) mungkin tidak memiliki algoritma subquadratic. Namun, fakta bahwa ada matriks yang benar-benar buruk di luar sana tidak mencegah saya menemukan algoritma cepat pada matriks yang baik, misalnya, matriks "sliding window".
jawaban vzn ini, jawaban pertama , jawaban kedua yang menarik (dan menurut saya tidak layak begitu banyak downvotes), tetapi mereka tidak berlaku untuk pertanyaan karena alasan yang dibahas dalam ada komentar.