Какова фактическая временная сложность исключения Гаусса?

72

В ответе на предыдущий вопрос я упомянул распространенное, но ошибочное мнение, что «гауссовское» исключение происходит за времени. Хотя очевидно, что алгоритм использует O ( n 3 ) арифметических операций, небрежная реализация может создавать числа с экспоненциально большим количеством битов. В качестве простого примера, предположим, что мы хотим диагонализировать следующую матрицу:O(n3)O(n3)

[2000120011201112]

Если мы используем версию алгоритма исключения без деления, которая добавляет только целочисленные кратные одной строки к другой, и мы всегда поворачиваемся на диагональном элементе матрицы, выходная матрица имеет вектор по диагонали.(2,4,16,256,,22n1)

Но что это фактическое время сложность исключения Гаусса? Большинство авторов комбинаторной оптимизации, похоже, довольны «сильно полиномиальными», но мне любопытно, что это за полином на самом деле.

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

Это все еще лучший анализ, известный? Существует ли стандартная ссылка, которая дает более четкую временную границу или, по крайней мере, лучшую оценку требуемой точности?

В более общем смысле: каково время работы (в целочисленном ОЗУ) самого быстрого алгоритма, известного для решения произвольных систем линейных уравнений?

Jeffε
источник
2
(вставляя жестокие волны) не могли бы вы обойти проблему большого целого числа в этом конкретном случае, используя хэширование по модулю маленьких простых трюков? алгоритм будет рандомизирован, но все же .. Правда, это не отвечает на вопрос, который вы задали ...
Суреш Венкат
1
O(n3MB[n(logn+L)])
1
Стандартный алгоритм исключения Гаусса делит строку сводки на элемент сводки перед уменьшением более поздних строк. Открытый вопрос относится к этой стандартной версии. В примере, который я привел в начале моего вопроса, используется другой вариант, который НЕ разделяется на элемент pivot.
Джефф
3
Любопытно. Граница времени Yap для алгоритма Bereiss идентична границе времени, подразумеваемой анализом Эдмондса исключения Гаусса.
Джефф
1
Rjlipton недавно провел обзор местности и цитирует кандидатскую диссертацию Каннана на эту тему. ключевой частью анализа является WRT Смит нормальная форма
ВЗН

Ответы:

35

O~(n3log(A+b))

Элиас
источник
Спасибо за ссылку! Это отвечает на мой второй вопрос, но не на мой первый.
Джефф
3
Если вы используете поворот, то размер битов промежуточных результатов в исключении Гаусса (GE) является полиномиальным, экспоненциальный взрыв отсутствует. Я думаю, что это результат Bareiss. Что касается сложности GE, в книге Гатена и Герхарда «Современная компьютерная алгебра» есть алгоритм для вычисления определителя матрицы , основанный на GE, модульной арифметике и теореме об остатках в Китае (раздел 5.5, С. 101-105). Сложность . Я думаю, что фактор может быть сохранен с помощью быстрой арифметики. Если я не ошибаюсь, это ограничение, которое упомянул user834. AO(n4log2A)n
Элиас
@ Элиас, каково определение нормы в этом выражении? Это самый большой коэффициент в абсолютном размере? Это размер в битах? Кроме того, этот результат для произвольных рациональных матриц?
Хуан Бермехо Вега
13

Я думаю, что ответом на ваш первый вопрос также является из-за следующих аргументов: статья Эдмондса не описывает вариант исключения Гаусса но это доказывает, что любое число, вычисленное в шаге алгоритма, является детерминантом некоторой подматрицы A. По книге Шрайвера «Теория линейного и целочисленного программирования» мы знаем, что если для кодирования A требуется b бит (b должно быть вO~(n3log(A+b))O~(log(A)) тогда любому из его подопределителей требуется не более 2b битов (теорема 3.2). Чтобы сделать гауссовское исключение алгоритмом полиномиального времени, мы должны позаботиться о вычисленных коэффициентах: мы должны исключить общие факторы из каждой дроби, которую мы вычисляем на любом промежуточном шаге, и тогда все числа имеют длину кодирования, линейную по длине кодирования A.

Матиас Вальтер
источник