Estou interessado no cálculo do 'th poder de um matriz . Suponha que tenhamos um algoritmo para multiplicação de matrizes que é executado no tempo . Então, pode-se calcular facilmente em . É possível resolver esse problema em menor complexidade de tempo?n × n A O ( M ( n ) ) A n O ( M ( n ) log ( n ) )
As entradas da matriz podem, em geral, ser de um semicondutor, mas você pode assumir uma estrutura adicional, se isso ajudar.
Nota: Entendo que, em computação geral, em o (M (n) \ log (m)) o tempo daria um algoritmo o (\ log m) para exponenciação. Porém, vários problemas interessantes se reduzem ao caso especial de exponenciação de matriz em que m = \ mathcal O (n) , e não pude provar o mesmo sobre esse problema mais simples. o ( M ( n ) log ( m ) ) o ( log m ) O ( n )
Respostas:
Se a matriz é diagonalizáveis em seguida, tendo on ° de energia pode ser feita em tempo
Apenas para completar os detalhes, seA = P- 1D P com uma diagonal D , então
eDn pode ser calculado por apenas tendo cada elemento da diagonal (cada valores próprios de UMA ) para o n ° de energia.
fonte
Uma boa saída é SVD de Decomposição de Valor Singular . Dada uma matriz real real de posição completa , o SVD a divide como onde é uma matriz diagonal, no tempo . Pelas propriedades de SVD, , portanto, apenas a matriz diagonal precisa ser exponenciada, e isso pode ser feito no tempo . Realizando a multiplicação final leva , então temos todas as operações . Uma Um = L Σ L T Σ S ( n 3 ) Um m = L Σ m L T S ( n log m ) L × Σ m × L T S ( n 2,3727 ) O ( n 3 + n log m )n × n UMA A = UΣ UT Σ O ( n3) Am=UΣmUT O(nlogm) U×Σm×UT O(n2.3727) O(n3+nlogm)
Atualizar após comentário O ponto é que, uma vez que o SVD é encontrado, qualquer energia leva apenas para calcular pelo seu próprio algoritmo CW. Mas essa não é sua pergunta. Se realmente houvesse um algoritmo , ele seria convertido imediatamente em um algoritmo para números inteiros. Suspeito que um desses não exista.o ( M ( n ) log ( m ) ) o ( log n )O(n2.3727+nlogm) o(M(n)log(m)) o(logn)
fonte