Produk matriks boolean cepat jarang dengan kemungkinan preprocessing

12

Apa algoritma yang paling praktis efisien untuk mengalikan dua matriks boolean yang sangat jarang (katakanlah, N = 200 dan hanya ada sekitar 100-200 elemen non-nol)?

Sebenarnya, saya memiliki keuntungan bahwa ketika saya mengalikan A dengan B, B sudah ditentukan sebelumnya dan saya dapat melakukan preprocessing kompleks yang sewenang-wenang pada mereka. Saya juga tahu bahwa hasil produk selalu jarang seperti matriks asli.

Algoritma "agak naif" (memindai baris demi baris; untuk setiap 1 bit baris-A, ATAU hasil dengan baris B yang sesuai) ternyata sangat efisien dan hanya membutuhkan beberapa ribu instruksi CPU untuk menghitung satu produk. , jadi tidak akan mudah untuk melampauinya, dan itu hanya bisa dilampaui oleh faktor konstan (karena ada ratusan bit dalam hasilnya). Tapi saya tidak kehilangan harapan dan meminta bantuan komunitas :)

Jkff
sumber
1
Saya ragu kita dapat secara signifikan mengalahkan konstan 10 instruksi mesin per kata output. Apakah mungkin beberapa bentuk output implisit akan diterima?
Warren Schudy
Ya, asalkan bisa dikalikan dengan B lebih lanjut.
jkff
Apa operasi penjumlahan dan perkalian (untuk bit) yang menjadi dasar penggandaan matriks? Algoritme naif Anda menyarankan jawabannya adalah "atau" dan "dan" masing-masing, tetapi itu adalah perkalian matriks yang agak aneh karena tidak mendefinisikan suatu bidang. Apakah maksud Anda "xor", bukan "atau"?
Warren Schudy
Tidak, maksud saya "atau" dan "dan". Saya tidak perlu operasi untuk mendefinisikan bidang, itu sebenarnya masalah seperti jangkauan grafik (saya menghitung komposisi beberapa fungsi satu-ke-banyak).
jkff

Jawaban:

11

Saya enggan menjawab ini, karena satu-satunya hasil teoretis yang saya ketahui sepanjang garis ini memiliki nama saya di atas kertas ...

n×nAAn

(Catatan: algoritma ini hanya benar-benar berguna untuk kasus di mana satu matriks padat dan yang lainnya jarang. Kasus ini muncul banyak, misalnya, ketika menghitung penutupan transitif dari grafik jarang, matriks penutupan transitif akhirnya akan menjadi padat dibandingkan dengan matriks kedekatan asli.)

Kertas itu

Guy E. Blelloch, Virginia Vassilevska, Ryan Williams: Pendekatan Kombinatorial Baru untuk Masalah Grafik Jarang. ICALP (1) 2008: 108-120

ε>0O(n2+ε)n×nA

vtAvO(n(t/k+n/)/logn)k=logcnk=ε(logn)/loglognnt/logn+n2/logcnc(k)nε=logcnk=ε(logn)/loglognnt/logn+n2/logcnc

- Pembaruan baris dan kolom ke dapat dihitung dalam waktu .O ( n 1 + ε )AO(n1+ε)

Kami menggunakan struktur data ini untuk memberikan algoritma teoretis yang lebih cepat untuk APSP dalam grafik tidak tertimbang.

Ryan Williams
sumber
3
Saya hanya memperhatikan bahwa Anda juga menganggap bahwa output perkalian matriks juga jarang. Dalam hal ini, bahkan ada algoritma yang lebih cepat; lakukan pencarian web untuk "multiplikasi matriks peka-keluaran".
Ryan Williams
Ryan Williams - Saya punya pertanyaan singkat: apakah Anda mengetahui, atau apakah Anda menjelajahi metode apa pun yang digeneralisasi menjadi jarang matriks bernilai (bukan hanya Boolean)? {1,0,1}
Alexandre Cassagne
5

Saya pikir apa yang Anda sebut adalah matriks "hypersparse" (nnz <n). Saya menulis makalah beberapa tahun yang lalu tentang cara melipatgandakan mereka. Pada dasarnya, ini merupakan produk luar yang bergabung dengan penggabungan multi-arah yang pintar untuk menghilangkan realisasi tripel perantara.

Buluc dan Gilbert, IPDPS 2008: http://gauss.cs.ucsb.edu/publication/hypersparse-ipdps08.pdf

Aydin Buluc
sumber