C'è stato qualche lavoro su come trovare il numero minimo di operazioni aritmetiche elementari necessarie per calcolare il determinante di una con matrice per le piccole e fissa ? Ad esempio, .
C'è stato qualche lavoro su come trovare il numero minimo di operazioni aritmetiche elementari necessarie per calcolare il determinante di una con matrice per le piccole e fissa ? Ad esempio, .
Risposte:
È noto che il numero di operazioni aritmetiche necessarie per calcolare il determinante di una matrice è n ω + o ( 1 ) , dove ω è la costante di moltiplicazione della matrice. Vedi ad esempio questa tabella su Wikipedia, nonché le sue note e riferimenti. Si noti che la complessità asintotica dell'inversione della matrice è la stessa della moltiplicazione della matrice in questo stesso senso.
L'equivalenza è abbastanza efficace. In particolare, puoi calcolare ricorsivamente il determinante di una matrice lavorando su blocchi ( n / 2 ) × ( n / 2 ) usando il complemento di Schur:
Pertanto, è possibile calcolare un determinante calcolando due determinanti ( n / 2 ) × ( n / 2 ) , invertendo una matrice ( n / 2 ) × ( n / 2 ) , moltiplicando due coppie di ( n / 2 ) × ( n / 2 ) matrici e alcune operazioni più semplici. Espandendo ricorsivamente le chiamate determinanti, la complessità finisce per essere dominata dalla moltiplicazione e dall'inversione della matrice.
Funziona bene anche per piccoli e anche senza utilizzare algoritmi di moltiplicazione a matrice sub-cubica. (Naturalmente, finisce per essere più o meno equivalente all'eliminazione gaussiana.) Ad esempio, per n = 4 , possiamo calcolare det ( D ) con due moltiplicazioni, D - 1 con quattro divisioni, B D - 1 C con 2 × 8 = 16 moltiplicazioni, det ( A - B D - 1 C )con due moltiplicazioni e la risposta finale con una moltiplicazione. Il numero totale è moltiplicazioni più divisioni, che è inferiore a 40 dall'espansione cofattore. L'uso dell'algoritmo di Strassen consente di salvare due moltiplicazioni qui, ma in modo più asintotico.
Si può notare che questa espansione utilizza in modo cruciale la divisione. Se si desidera evitare la divisione, è possibile farlo nelle operazioni lavorando con le sequenze di Clow e la programmazione dinamica . È anche noto come ottenere moltiplicazioni n 2 + ω / 2 + o ( 1 ) e nessuna divisione.