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?
Respostas:
Penso que a resposta é , onde omitimos os fatores (poli) logarítmicos. O limite é apresentado em "W. Eberly, M. Giesbrecht, P. Giorgi, A. Storjohann, G. Villard. Resolução de sistemas lineares inteiros esparsos. Proc. ISSAC'06, Genova, Itália, ACM Press, 63-70, julho 2006 ", mas é baseado em um artigo de Dixon:" Solução exata de equações lineares usando expansões P-adic, John D. Dixon, NUMERISCHE MATHEMATIK, Volume 40, Número 1, 137-141 ".O˜(n3log(∥A∥+∥b∥))
fonte
Eu acho que a resposta para sua primeira pergunta também é devido aos seguintes argumentos: O artigo de Edmonds não descreve uma variante da eliminação gaussiana mas prova que qualquer número calculado em uma etapa do algoritmo é determinante de alguma submatriz de A. Pelo livro de Schrijver sobre Teoria da Programação Linear e Inteira , sabemos que se a codificação de A precisa de b bits (b deve estar emO˜(n3log(∥A∥+∥b∥)) O˜(log(∥A∥) ), qualquer um dos seus subdeterminantes precisa no máximo de 2b bits (Teorema 3.2). Para tornar a eliminação gaussiana um algoritmo de tempo polinomial, precisamos nos preocupar com os quocientes computados: temos que cancelar fatores comuns de cada fração que computamos em qualquer etapa intermediária e, em seguida, todos os números têm comprimento de codificação linear no comprimento de codificação de A.
fonte