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