W odpowiedzi na wcześniejsze pytanie wspomniałem o powszechnym, ale fałszywym przekonaniu, że eliminacja „gaussowska” przebiega w czasie . Chociaż oczywiste jest, że algorytm wykorzystuje operacje arytmetyczne , nieostrożna implementacja może tworzyć liczby z wykładniczo wieloma bitami. Jako prosty przykład, załóżmy, że chcemy diagonalizować następującą macierz:
Jeśli użyjemy wersji algorytmu eliminacji bez podziału, która dodaje tylko liczby całkowite jednego wiersza do drugiego, i zawsze obracamy się po ukośnym wejściu macierzy, macierz wyjściowa ma wektor wzdłuż przekątnej.
Ale jaka jest faktyczna złożoność czasowa eliminacji Gaussa? Większość kombinatorycznych autorów optymalizacji wydaje się być zadowolona z „silnie wielomianu”, ale jestem ciekawa, czym tak naprawdę jest wielomian.
Artykuł Jacka Edmondsa z 1967 r. Opisuje wersję eliminacji Gaussa („prawdopodobnie z powodu Gaussa”), która działa w silnie wielomianowym czasie. Kluczowym spostrzeżeniem Edmondsa jest to, że każdy wpis w każdej macierzy pośredniej jest wyznacznikiem niewielkiej części oryginalnej macierzy wejściowej. Dla macierzy z wpisami liczb całkowitych bitowych, Edmonds udowadnia, że jego algorytm wymaga liczb całkowitych z co najwyżej bitów. Przy „rozsądnym” założeniu, że , algorytm Edmondsa działa w czasie jeśli używamy arytmetyki liczb całkowitych podręcznika, lub w czasie jeśli użyj mnożenia opartego na FFT, na standardowej całkowitej liczbie RAM, która może wykonywać-bitowa arytmetyka w stałym czasie. (Edmonds nie przeprowadził tej analizy czasu; twierdził tylko, że jego algorytm jest „dobry”).
Czy to wciąż najlepsza znana analiza? Czy istnieje standardowe odniesienie, które zapewnia lepsze wyraźne ograniczenie czasowe lub przynajmniej lepsze ograniczenie wymaganej precyzji?
Mówiąc bardziej ogólnie: Jaki jest czas działania (na całkowitej pamięci RAM) najszybszego algorytmu znanego z rozwiązywania dowolnych układów równań liniowych?