Мне нужно вычислить трассу матрицы в степени 3 и 4, и она должна быть настолько быстрой, насколько это возможно.
Матрица здесь - это матрица смежности простого графа, поэтомуон квадратный, симметричный, его записи всегда равны 1 или 0, а диагональные элементы всегда равны 0.
Оптимизация тривиальна для трассы матрицы до степени 2:
- Нам нужны только диагональные записи (i, i) для трассы, пропустите все остальные
- Поскольку матрица симметрична, эти записи являются просто записями i-й строки в квадрате и суммируются
- И так как записи равны только 1 или 0, квадратную операцию можно пропустить
Еще одна идея, которую я нашел в википедии, заключалась в суммировании всех элементов произведения Адамара, то есть умножении по вхождению, ноЯ не знаю, как расширить этот метод до степени 3 и 4.
См. http://en.wikipedia.org/wiki/Trace_(linear_algebra)#Properties
Возможно, я просто слепой, но не могу придумать простого решения.
В конце мне нужно реализовать C ++Примечание, но я думаю, что это не важно для вопроса.
Заранее спасибо за любую помощь.