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?
Odpowiedzi:
Myślę, że odpowiedź brzmi , gdzie pomijamy czynniki (poli) logarytmiczne. Granica jest przedstawiona w „W. Eberly, M. Giesbrecht, P. Giorgi, A. Storjohann, G. Villard. Rozwiązywanie rzadkich całkowitych układów liniowych. Proc. ISSAC'06, Genova, Włochy, ACM Press, 63-70, lipiec 2006 ”, ale opiera się na pracy Dixona:„ Dokładne rozwiązanie równań liniowych z wykorzystaniem rozszerzeń P-adycznych, John D. Dixon, NUMERISCHE MATHEMATIK, Tom 40, Numer 1, 137-141 ”.O˜(n3log(∥A∥+∥b∥))
źródło
Myślę, że odpowiedź na twoje pierwsze pytanie brzmi również powodu następujących argumentów: praca Edmondsa nie opisuje wariantu eliminacji Gaussa ale dowodzi to, że dowolna liczba obliczona na jednym etapie algorytmu jest wyznacznikiem pewnej podmacierzy A. W książce Schrijvera o teorii programowania liniowego i liczb całkowitych wiemy, że jeśli kodowanie A wymaga bitów (b powinno być wO˜(n3log(∥A∥+∥b∥)) O˜(log(∥A∥) ), to którykolwiek z jego subdeterminantów potrzebuje co najwyżej 2b bitów (Twierdzenie 3.2). Aby eliminacja Gaussa była algorytmem wielomianowym, musimy dbać o obliczone ilorazy: Musimy zlikwidować wspólne czynniki z każdej frakcji, którą obliczamy w dowolnym kroku pośrednim, a następnie wszystkie liczby mają długość kodowania liniową w długości kodowania A.
źródło