In einer Antwort auf eine frühere Frage erwähnte ich die verbreitete, aber falsche Annahme, dass die „Gaußsche“ Eliminierung in Zeit abläuft . Während es offensichtlich ist, dass der Algorithmus -Arithmetikoperationen verwendet, kann eine unachtsame Implementierung Zahlen mit exponentiell vielen Bits erzeugen. Nehmen wir als einfaches Beispiel an, wir möchten die folgende Matrix diagonalisieren:
Wenn wir eine Version des Eliminierungsalgorithmus ohne Division verwenden, bei der nur ganzzahlige Vielfache einer Zeile zu einer anderen hinzugefügt werden, und wir immer an einem diagonalen Eintrag der Matrix drehen, hat die Ausgabematrix den Vektor entlang der Diagonale.
Aber wie hoch ist die tatsächliche zeitliche Komplexität der Gaußschen Eliminierung? Die meisten Autoren der kombinatorischen Optimierung scheinen mit „starkem Polynom“ zufrieden zu sein, aber ich bin gespannt, was das Polynom eigentlich ist.
Eine Veröffentlichung von Jack Edmonds aus dem Jahr 1967 beschreibt eine Version der Gaußschen Eliminierung („möglicherweise aufgrund von Gauß“), die in stark polynomieller Zeit abläuft. Die wichtigste Erkenntnis von Edmonds ist, dass jeder Eintrag in jeder Zwischenmatrix die Determinante eines Minors der ursprünglichen Eingangsmatrix ist. Für eine Matrix mit -Bit ganzzahlige Einträge erweist sich , dass seine Edmonds Algorithmus ganze Zahlen mit höchstens erfordert Bits. Unter der „vernünftigen“ Annahme, dass , läuft der Edmonds-Algorithmus in der -Zeit, wenn wir eine ganzzahlige Lehrbucharithmetik verwenden, oder in der -Zeit, wenn wir FFT-basierte Multiplikation für einen Standard-Integer-RAM verwenden, der ausführen kann-Bit-Arithmetik in konstanter Zeit. (Edmonds hat diese Zeitanalyse nicht durchgeführt; er hat lediglich behauptet, sein Algorithmus sei „gut“.)
Ist dies immer noch die beste bekannte Analyse? Gibt es eine Standardreferenz, die eine bessere explizite Zeitbegrenzung oder zumindest eine bessere Begrenzung der erforderlichen Genauigkeit bietet?
Allgemeiner: Wie lang ist die Laufzeit (auf dem Integer-RAM) des schnellsten bekannten Algorithmus zum Lösen beliebiger linearer Gleichungssysteme?
Antworten:
Ich denke, die Antwort lautet , wobei wir die (poly) logarithmischen Faktoren weglassen. Die Bindung wird in "W. Eberly, M. Giesbrecht, P. Giorgi, A. Storjohann, G. Villard. Lösen spärlicher ganzzahliger linearer Systeme. Proc. ISSAC'06, Genua, Italien, ACM Press, 63-70, Juli 2006 ", aber es basiert auf einer Arbeit von Dixon:" Exakte Lösung linearer Gleichungen unter Verwendung von P-adischen Expansionen, John D. Dixon, NUMERISCHE MATHEMATIK, Band 40, Nummer 1, 137-141 ".O˜(n3log(∥A∥+∥b∥))
quelle
Ich denke, die Antwort auf Ihre erste Frage lautet auch aufgrund der folgenden Argumente: Edmonds 'Artikel beschreibt keine Variante der Gaußschen Eliminierung aber es beweist, dass jede Zahl, die in einem Schritt des Algorithmus berechnet wird, eine Determinante einer Submatrix von A ist. Nach Schrijvers Buch über die Theorie der linearen und ganzzahligen Programmierung wissen wir, dass, wenn die Codierung von A b Bits benötigt, b inO˜(n3log(∥A∥+∥b∥)) O˜(log(∥A∥) ) dann benötigt jede ihrer Subdeterminanten höchstens 2b Bits (Satz 3.2). Um die Gaußsche Elimination zu einem polynomiellen Zeitalgorithmus zu machen, müssen wir uns um die berechneten Quotienten kümmern: Wir müssen gemeinsame Faktoren aus jedem Bruch, den wir in einem Zwischenschritt berechnen, auslöschen, und dann haben alle Zahlen eine lineare Codierungslänge in der Codierungslänge von A.
quelle