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