Швидкий розріджений булевий матричний продукт


13

Отже, у мене є близько 100-200 дуже рідких квадратних булевих матриць довжиною сторони ~ кілька десятків, і мені потрібно обчислити їх добуток. Я знаю, що якщо помножувати їх послідовно, продукт зазвичай залишатиметься таким же рідким на кожному кроці.

Чи існують алгоритми продуктів матричного ланцюга, які працюють в цьому випадку особливо швидко?

На більш високому рівні проблема полягає в обчисленні складу ряду відображень від одного до багатьох на досить малому графіку (функції переходу NFA), де більшість елементів відображають не більше 0-3.

(зауважте, що це не звичайна проблема "продукт матричного ланцюга", тому що всі матриці однакового розміру, і мені не потрібно вибирати оптимальні дужки)


5
насправді порядок, у який ви їх помножите, може вплинути на рідкість проміжних результатів, тому це може бути важливою проблемою в будь-якому такому швидкому алгоритмі.
Джошуа Грохов

з вашого іншого питання ви, здається, використовуєте операції семірування 0/1 І / АБО, а не додавання / множення (як здається, проблема), будь ласка, уточнюйте це у питанні
vzn

Відповіді:


10

Це було занадто довго, щоб бути коментарем - мені цікаво, чи мають ті матриці структуру, яка змушує їх вести себе по-різному від випадкових матриць. Продукти випадкових розріджених матриць йдуть до нуля або швидко стають нерідкими.

Ось простий експеримент - візьміть 200 випадкових двійкових матриць 50x50, а число ділянок ненульових значень залежно від числа помножених матриць. На графіках нижче показано стандартне відхилення за 2000 пробігів. Перший сюжет на 2% розрідження, другий на 3%


(джерело: yaroslavvb.com ) (джерело: yaroslavvb.com )

це зайняло 3 хвилини на моєму ноутбуці, використовуючи стандартне множення матриць

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.