Quelle est la complexité temporelle réelle de l’élimination gaussienne?


72

En réponse à une question précédente , j'ai mentionné la croyance commune mais fausse selon laquelle l' élimination «gaussienne» se fait dans le temps O(n3) . Bien qu'il soit évident que l'algorithme utilise des opérations arithmétiques O(n3) , une mise en œuvre négligente peut créer des nombres avec un nombre exponentiel de bits. Comme exemple simple, supposons que nous voulions diagonaliser la matrice suivante:

[2000120011201112]

Si nous utilisons une version de l’algorithme d’élimination sans division, qui n’ajoute que des multiples entiers d’une ligne à une autre, et que nous pivotons toujours sur une entrée diagonale de la matrice, la matrice de sortie possède le vecteur (2,4,16,256,,22n1) long de la diagonale.

Mais quelle est la complexité temporelle réelle de l'élimination gaussienne? La plupart des auteurs d'optimisation combinatoire semblent satisfaits du terme «fortement polynomial», mais je suis curieux de savoir ce qu'est réellement le polynôme.

n×nmO(n(m+logn))m=O(logn)O(n5)O~(n4)O(logn)

Est-ce toujours la meilleure analyse connue? Existe-t-il une référence standard qui donne une meilleure limite de temps explicite, ou du moins une meilleure limite de précision?

Plus généralement: Quel est le temps d'exécution (sur la RAM entière) de l'algorithme le plus rapide connu pour résoudre des systèmes arbitraires d'équations linéaires?


2
(insérer une main violente) ne pourriez-vous pas contourner le problème des grands nombres entiers dans ce cas particulier en utilisant le hachage modulo de petits tours principaux? l'algorithme serait aléatoire, mais quand même .. Certes, cela ne répond pas à la question que vous avez posée ...
Suresh Venkat

1
O(n3MB[n(logn+L)])

1
L'algorithme d'élimination gaussien standard divise la ligne de pivot par l'élément pivot avant de réduire les lignes suivantes. La question ouverte fait référence à cette version standard. L'exemple que j'ai donné au début de ma question utilise une variante différente, qui ne se divise PAS par l'élément pivot.
Jeffε

3
Curieuse. La limite temporelle de Yap pour l'algorithme de Bereiss est identique à la limite temporelle impliquée par l'analyse par Edmonds de l'élimination de Gauss.
Jeffε

1
rjlipton a récemment étudié la région et cite sa thèse de doctorat sur le sujet. une partie essentielle de l'analyse concerne la forme normale de Smith
vzn

Réponses:


35

O~(n3log(A+b))


Merci pour la référence! Cela répond à ma deuxième question, mais pas à la première.
Jeffε

3
Si vous utilisez un pivot, alors la taille des résultats intermédiaires en élimination gaussienne (GE) est polynomiale, il n'y a pas d'explosion exponentielle. Je pense que c'est le résultat de Bareiss. En ce qui concerne la complexité de GE, il existe un algorithme dans le livre de Gathen et Gerhard, "Modern Computer Algebra" pour calculer le déterminant d’une matrice , basé sur GE, l’arithmétique modulaire et le théorème du reste chinois (Sec. 5.5, pp 101-105). La complexité est . Je pense qu'un facteur de pourrait être économisé en utilisant une arithmétique rapide. Si je ne me trompe pas, c'est la limite que l'utilisateur 834 a mentionnée. AO(n4log2A)n
Elias

@ Elias, quelle est la définition de la norme dans cette expression? Est-ce le plus grand coefficient en taille absolue? Est-ce la taille du bit? De plus, ce résultat concerne-t-il des matrices rationnelles arbitraires?
Juan Bermejo Vega

13

Je pense que la réponse à votre première question est aussi raison des arguments suivants: Le document de Edmonds ne décrit pas une variante de l'élimination gaussienne mais cela prouve que tout nombre calculé dans une étape de l'algorithme est un facteur déterminant de la sous-matrice de A. Dans le livre de Schrijver sur la théorie de la programmation linéaire et en nombres entiers, nous savons que si le codage de A nécessite b bits (b devrait être dansO~(n3log(A+b))O~(log(A)) alors n'importe lequel de ses sous-déterminants a besoin d'au plus 2b bits (théorème 3.2). Afin de faire de l’élimination gaussienne un algorithme polynomial, nous devons nous soucier des quotients calculés: nous devons annuler les facteurs communs de chaque fraction calculée à n’importe quelle étape intermédiaire, puis tous les nombres ont une longueur de codage linéaire dans la longueur de codage de A.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.