Em resposta a uma pergunta anterior , mencionei a crença comum, mas falsa, de que a eliminação "gaussiana" ocorre no tempo . Embora seja óbvio que o algoritmo usa operações aritméticas , a implementação descuidada pode criar números com muitos bits exponencialmente. Como um exemplo simples, suponha que desejemos diagonalizar a seguinte matriz:
Se usarmos uma versão do algoritmo de eliminação sem divisão, que apenas adiciona múltiplos inteiros de uma linha a outra, e sempre rodarmos em uma entrada diagonal da matriz, a matriz de saída terá o vetor ao longo da diagonal.
Mas qual é a complexidade de tempo real da eliminação gaussiana? A maioria dos autores de otimização combinatória parece estar feliz com "fortemente polinomial", mas estou curioso sobre o que realmente é o polinômio.
Um artigo de 1967 de Jack Edmonds descreve uma versão da eliminação gaussiana ("possivelmente devido a Gauss") que é executada em tempo fortemente polinomial. O principal insight de Edmonds é que cada entrada em cada matriz intermediária é o determinante de uma menor da matriz de entrada original. Para uma matriz com entradas inteiras de bits, Edmonds prova que seu algoritmo requer números inteiros com no máximo bits. Sob a suposição "razoável" de que , o algoritmo de Edmonds é executado em se usarmos aritmética de número inteiro do livro, ou em se use multiplicação baseada em FFT, em uma RAM inteira padrão, que pode executarm O ( n ( m + log n ) ) m = O ( log n ) O˜ O ( n 4 ) O ( log n )aritmética de bits em tempo constante. (Edmonds não fez essa análise do tempo; ele apenas afirmou que seu algoritmo é "bom".)
Essa ainda é a melhor análise conhecida? Existe uma referência padrão que fornece um limite de tempo explícito melhor ou pelo menos um limite melhor na precisão necessária?
De maneira mais geral: qual é o tempo de execução (na RAM inteira) do algoritmo mais rápido conhecido por resolver sistemas arbitrários de equações lineares?