Houve algum trabalho em encontrar o número mínimo de operações aritméticas elementares necessários para calcular o determinante de um por matriz para pequeno e fixo ? Por exemplo, .n n n = 5
Houve algum trabalho em encontrar o número mínimo de operações aritméticas elementares necessários para calcular o determinante de um por matriz para pequeno e fixo ? Por exemplo, .n n n = 5
Respostas:
Sabe-se que o número de operações aritméticas necessário para calcular o determinante de um matriz é n ω + O ( 1 ) , onde ω é a constante multiplicação de matrizes. Veja, por exemplo, esta tabela na Wikipedia, bem como suas notas de rodapé e referências. Observe que a complexidade assintótica da inversão da matriz também é a mesma que a multiplicação da matriz no mesmo sentido.
A equivalência é bastante eficaz. Em particular, você pode recursivamente calcular o determinante de uma matriz, trabalhando em ( n / 2 ) x ( n / 2 ) blocos usando o complemento de Schur:
Assim, é possível calcular uma determinante calculando dois ( n / 2 ) x ( n / 2 ) determinantes, invertendo uma ( n / 2 ) x ( n / 2 ) matriz, multiplicando-se dois pares de ( n / 2 ) × ( n / 2 ) matrizes e algumas operações mais simples. Expandindo as chamadas determinantes recursivamente, a complexidade acaba sendo dominada pela multiplicação e inversão da matriz.
Isso funciona bem mesmo para pequenos e mesmo sem o uso de algoritmos de multiplicação de matriz sub-cúbica. (É claro que acaba sendo mais ou menos equivalente à eliminação gaussiana.) Por exemplo, para n = 4 , podemos calcular det ( D ) com duas multiplicações, D - 1 com quatro divisões, B D - 1 C com 2 × 8 = 16 multiplicações, det ( A - B D - 1 C )com duas multiplicações e a resposta final com uma multiplicação. O número total é multiplicações mais divisões, que é menor que os 40 da expansão do cofator. O uso do algoritmo de Strassen salva duas multiplicações aqui, mas mais assintoticamente.
Você pode perceber que essa expansão usa crucialmente a divisão. Se você deseja evitar a divisão, pode-se fazê-lo nas operações trabalhando com sequências Clow e programação dinâmica . É também ele conhecido como conseguir n 2 + ω / 2 + S ( 1 ) multiplicações e divisões não há.