Existe um algoritmo O (log n) para exponenciação de matriz?


9

Existe um algoritmo para criar uma matriz para o º poder em tempo?nO(logn)

Estive pesquisando on-line, mas até agora não obtive êxito.


11
Quer dizer que você tem uma matriz de tamanho fixo? de fato, se sua matriz é do tamanhom você não pode esperar encontrar O(log n)algoritmo.

As pessoas geralmente se referem a esse problema como alimentação de matriz. Exponenciação de matriz significa encontrareX
Shitikanth 10/10

@Shitikanth Ok, obrigado. Eu vou mudar isso agora.
Jack H

Respostas:


11

Aqui está o pseudocódigo para um O(lgn)algoritmo de exponenciação de matriz. Observe que o operador * indica multiplicação de matriz comum.

MATHPOWER (M, n)
if n == 1
    then return M
else
    P = MATHPOWER (M, floor(n/2))
    if n mod 2 == 0
        then return P * P
    else
        return P * P * M

Para quem vem do futuro, esta é uma resposta terrível. Ele funciona O (n ^ 3 * log (n)) quando existem algoritmos O (n ^ 3). Veja a resposta do Yuval abaixo. Como questão prática, isso normalmente é feito por decomposição SVD, elevando os elementos N da matriz D à potência e multiplicando a matriz novamente.
Michael O

@ Michael O, acho que você realmente perdeu o objetivo. Você entendeu mal o que o OP estava pedindo, ou seja, como elevar uma matriz para on-ésima potência em O(lgn)steps. A chave é que o OP está exigindo apenas que o número de etapas executadas seja O(lgn), não a complexidade geral, pois isso exigiria levar em conta também a ordem da matriz.
Massimo Cafaro

É óbvio que a abordagem proposta de dividir e conquistar tem a pior complexidade possível O(lgn) somente quando a ordem da matriz é O(1), pois nesse caso a equação de recorrência correspondente é T(n)=T(n/2)+O(1)(como um exemplo, para uma matriz 3 x 3, é possível fazer uma multiplicação da matriz usando um número constante de multiplicações e adições escalares). Uma possível aplicação do algoritmo que dei, é calcular on-th número de Fibonacci, atribuindo tarefas à matriz cujas entradas são uma11=1 1,uma12=1 1,uma21=1 1,uma22=0 0 ao n-th poder.
Massimo Cafaro

Por fim, observe também que isso já foi resolvido e totalmente compreendido: basta dar uma olhada no comentário da pergunta fornecida por @ user742.
Massimo Cafaro

7

Existem outros dois algoritmos que podem ou não ser relevantes. O primeiro algoritmo diagonaliza sua matriz (o que geralmente é possível), escrevendo-a comoM=PDP-1 1, Onde M,Dem geral, podem ter valores complexos. Você então calculaM=PDnP-1 1. Observe que é muito fácil elevar uma matriz diagonal para onpoder th. E seMnão é diagonalizável, você encontra sua forma Jordan e continua como antes (agora você também precisa calcular alguns coeficientes binomiais). Esse algoritmo provavelmente não é numericamente estável.

Outro algoritmo usa o fato de que Msatisfaz seu polinômio característico (ou mesmo seu polinômio mínimo). SuponhaP(M)=0 0 para alguns P, digamos o polinômio característico. Então podemos calcularMn sobre R[M]/(P(M))e substitua M. Isso significa que calculamosMn como um polinômio, usando o fato de que P(M)=0 0e apenas no final substitua os valores de M. Poderíamos até pré-calcular todos os poderes necessários paraM e todos os valores de Mk(modP(M)) para k<2degP-1 1, e esse algoritmo pode ser mais rápido que a resposta de Massimo Cafaro. Pode ser mais numericamente estável que o algoritmo anterior.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.