Hızlı seyrek boolean matris zincir ürünü


13

Yani, yan uzunluğu ~ birkaç düzinelerce yaklaşık 100-200 çok seyrek kare boole matrisim var ve ürünlerini hesaplamam gerekiyor. Onları seri olarak çarparsam, ürünün genellikle her adımda seyrek kalacağını biliyorum.

Bu durumda özellikle hızlı çalışan matris zincir ürün algoritmaları var mı?

Daha yüksek bir seviyede, sorun, çoğu öğenin 0-3'ten fazla olmayacağı şekilde, oldukça küçük bir grafikte (NFA'nın geçiş işlevleri) bire-çok eşleme serisinin bileşimini hesaplamaktır.

( bunun her zamanki "matris zincir ürünü" sorunu olmadığını unutmayın , çünkü tüm matrisler aynı boyuttadır ve en uygun parantezleri seçmek zorunda değilim)


5
aslında, onları çoğalttığınız düzen, ara sonuçların esnekliğini etkileyebilir, bu nedenle bu tür hızlı algoritmalarda hala önemli bir sorun olabilir.
Joshua Grochow

Diğer sorunuzdan , toplama / çarpma değil (sorunun belirtildiği gibi) 0/1 semiring AND / OR işlemlerini kullanıyor gibi görünüyorsunuz, lütfen soruda bunu açıkça
belirtin

Yanıtlar:


10

Bu bir yorum yapmak için çok uzundu - bu matrislerin rastgele matrislerden farklı davranmalarını sağlayan bir yapıya sahip olup olmadığını merak ediyorum. Rastgele seyrek matrislerin ürünleri sıfıra gider veya hızla seyrekleşir.

İşte basit bir deney - 200 rastgele ikili 50x50 matris alın ve matris sayısının bir fonksiyonu olarak sıfır olmayanların sayısını çizin. Aşağıdaki grafikler 2000 çalışma üzerinde standart sapmayı göstermektedir. İlk arsa% 2 sparite, ikinci arsa% 3


(kaynak: yaroslavvb.com ) (kaynak: yaroslavvb.com )

Bu standart matris çarpımı kullanarak dizüstü bilgisayarımda 3 dakika sürdü

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.