Os algoritmos de multiplicação de matrizes são analisados em termos de complexidade aritmética . O modelo de computação é programas lineares com instruções do formulárioa ← b ∘ c, Onde ∘ ∈ { + , - , × , ÷ }, uma é uma variável e b , cpodem ser variáveis, entradas ou constantes. Além disso, certas variáveis são distinguidas como saídas . Por exemplo, aqui está como multiplicar dois2 × 2 matrizes usando o algoritmo usual, com matrizes de entrada umaeu j,beu j e matriz de saída ceu j:
x11x12x21x22←uma11×b11←uma11×b12←uma21×b11←uma21×b12y11y12y21y22←uma12×b21←uma12×b22←uma22×b21←uma22×b22c11c12c21c22←x11+y11←x12+y12←x21+y21←x22+y22
A medida de complexidade é o número de linhas no programa.
Para multiplicação de matrizes, pode-se provar uma forma normal para todos os algoritmos. Todo algoritmo pode ser convertido em um algoritmo da seguinte forma, ao custo de apenas um aumento multiplicativo constante na complexidade:
- Certas combinações lineares αEu da matriz de entrada umaj k são calculados.
- Certas combinações lineares βEu da matriz de entrada bj k são calculados.
- γEu→αEu×βEu.
- Cada entrada na matriz de saída é uma combinação linear de γEus.
Isso é conhecido como forma normal bilinear . No algoritmo de multiplicação de matrizes mostrado acima,xj k,yj k funcionar como o γEu, mas no algoritmo de Strassen as combinações lineares são mais interessantes; eles são oMEuestá na descrição da Wikipedia .
Usando uma abordagem de tensor (ou seja, aplicando recursivamente o mesmo algoritmo), semelhante à análise assintótica do algoritmo de Strassen, pode-se mostrar que, dado esse algoritmo para multiplicar n × n matriz com r produtos (ie r variáveis γEu), então arbitrário N× N matrizes podem ser multiplicadas em complexidade O (Nregistronr); portanto, apenas o número de produtos é importante assintoticamente. No algoritmo de Strassen,n = 2 e r = 7e, portanto, o limite é O (Nregistro27).
O problema de encontrar o número mínimo de produtos necessários para calcular a multiplicação de matrizes pode ser formulado como a classificação de um tensor de terceira ordem (uma "matriz" com três índices em vez de dois), e isso forma a conexão com a teoria da complexidade algébrica. Você pode encontrar mais informações neste livro ou nestas notas da aula (continuação aqui ).
A razão pela qual esse modelo é usado é dupla: primeiro, é muito simples e passível de análise; segundo, está intimamente relacionado ao modelo de RAM mais comum.
Programas lineares podem ser implementados no modelo de RAM, e a complexidade de ambos os modelos está fortemente relacionada: operações aritméticas têm custo unitário em várias variantes do modelo (por exemplo, o modelo de RAM com números reais) e, de outra forma, são polinomialmente relacionadas para o tamanho dos números. No caso da multiplicação de matrizes modulares, portanto, a complexidade aritmética fornece um limite superior à complexidade no modelo de RAM. No caso de multiplicação de matriz inteira ou racional, pode-se mostrar que, para algoritmos bilineares resultantes de tensorização, o tamanho dos números não cresce muito e, portanto, a complexidade aritmética fornece um limite superior para o modelo de RAM, até fatores logarítmicos .
Pode ser a priori que uma máquina de RAM possa fazer alguns truques aos quais o modelo aritmético não sabe. Mas geralmente queremos que os algoritmos de multiplicação de matrizes funcionem para matrizes em campos arbitrários (ou mesmo anéis) e, nesse caso, o algoritmo uniforme deve usar apenas as operações aritméticas especificadas pelo modelo. Portanto, este modelo é uma formalização de algoritmos "independentes de campo".