Muhtemel ön işleme ile hızlı seyrek boolean matris ürünü


12

İki çok seyrek boole matrisini çarpmak için pratik olarak en verimli algoritmalar nelerdir (örneğin, N = 200 ve sadece 100-200 civarında sıfır olmayan eleman vardır)?

Aslında, A'yı B ile çarptığımda, B'lerin önceden tanımlanmış olması ve üzerlerinde keyfi olarak karmaşık önişleme yapabilmem avantajım var. Ayrıca, ürünlerin sonuçlarının her zaman orijinal matrisler kadar seyrek olduğunu biliyorum.

"Oldukça saf" algoritma (A'yı satırlara göre tarayın; A satırının her 1 biti için VEYA karşılık gelen B satırıyla sonuç) çok verimli olur ve tek bir ürünü hesaplamak için sadece birkaç bin CPU talimatı gerektirir , bu yüzden onu aşmak kolay olmayacak ve sadece sabit bir faktörle aşılabilir (çünkü sonuçta yüzlerce bir bit var). Ama umudumu kaybetmiyorum ve topluluktan yardım istemiyorum :)


1
Çıktı kelimesi başına 10 makine talimatını önemli ölçüde yenebileceğimizden şüpheliyim. Çıktının bazı örtük formlarının kabul edilebilir olması mümkün müdür?
Warren Schudy

Evet, daha fazla Bs ile çarpılabildiği sürece.
jkff

Matris çarpımının dayandığı toplama ve çarpma işlemleri (bitler için) nelerdir? Saf algoritmanız cevabın sırasıyla "veya" ve "ve" olduğunu ileri sürmektedir, ancak bunlar bir alan tanımlamadığı için oldukça garip bir matris çarpımıdır. Şunu mu demek istediniz: veya "veya" yerine "xor"?
Warren Schudy

Hayır, demek istediğim "ya da" ve "ve". Bir alan tanımlamak için işlemlere ihtiyacım yok, bu aslında bir grafik ulaşılabilirlik benzeri sorun (birkaç bir-çok fonksiyonların kompozisyonunu hesaplıyorum).
jkff

Yanıtlar:


11

Buna cevap vermek istemiyordum, çünkü bu çizgiler boyunca bildiğim tek teorik sonucun kağıt üzerinde ismim var ...

n×nAAn

(Not: Bu algoritma yalnızca bir matrisin yoğun, diğeri seyrek olduğu durumda çok kullanışlıdır. Bu durum, örneğin seyrek bir grafiğin geçişli kapanışını hesaplarken, geçişli kapanış matrisi sonunda yoğunlaşacaktır. orijinal bitişiklik matrisine kıyasla.)

Kağıt

Guy E. Blelloch, Virginia Vassilevska, Ryan Williams: Seyrek Grafik Sorunlarına Yeni Bir Kombinatoryal Yaklaşım. ICALP (1) 2008: 108-120

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

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

AO(n1+ε)

Bu veri yapısını, seyrek ağırlıksız grafiklerde APSP için daha hızlı teorik algoritmalar vermek için kullandık.


3
Sadece matris çarpımının çıktısının da seyrek olduğunu varsaydığınızı fark ettim . Bu durumda, daha hızlı algoritmalar bile vardır; "çıktıya duyarlı matris çarpımı" için bir web araması yapın.
Ryan Williams

{1,0,1}

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.