Это не официальный сайт wikipedia.org 01.01.2023

Алгоритм Барейса — Википедия

Алгоритм Барейса

Алгоритм Барейса — алгоритм вычисления определителя или приведения к ступенчатому виду матрицы с целыми элементами с помощью исключительно целочисленной арифметики. Назван именем Э. Барейса. Любое деление, выполняемое по алгоритму, гарантирует точное деление (без остатка). Метод может быть использован также для вычисления определителя матрицы с (приблизительными) вещественными элементами, что исключает ошибки округления, за исключением ошибок, уже присутствующих во входных данных.

ИсторияПравить

Общий алгоритм Барейса отличается от одноимённого алгоритма для обращения матриц Тёплица.

В некоторых испаноязычных странах алгоритм известен также как алгоритм Барейса — Монтанте, поскольку Рене Марио Монтанте Пардо, профессор автономного университета штата Нуэво Леон в Мексике, популяризовал метод среди студентов.

ОбзорПравить

Определение определителя использует только операции умножения, сложения и вычитания. Очевидно, что определитель будет целым, если все элементы матрицы целые. Однако фактическое вычисление определителя, исходя чисто из определения или используя формулу Лейбница, непрактично, поскольку требует O ( n ! )   операций.

Метод Гаусса имеет сложность O ( n 3 )  , но использует деление, которое приводит к ошибкам округления в случае реализации с помощью арифметики с плавающей запятой.

Ошибки округления[en] можно избежать, если все числа хранить как дроби вместо чисел с плавающей запятой. Однако размер каждого элемента растёт экспоненциально в зависимости от числа строк[1].

Барейс поставил вопрос проведения исключений в целых числах, сохраняя при этом величину промежуточных коэффициентов достаточно маленькой. Предложено два алгоритма[2][3]:

  1. Алгоритм без деления — осуществляет сведение матрицы к треугольному виду вообще без операции деления.
  2. Алгоритм без остатков — использует деление для уменьшения промежуточных значений, но, вследствие тождества Сильвестера[en], преобразование остаётся целым (деление имеет нулевой остаток).

Для полноты Барейс предложил также методы исключений без умножения, но с дробями[2].

АлгоритмПравить

Вычислительная структура этого алгоритма представляет собой простой тройной цикл, как и в обычном методе Гаусса. Однако в этом случае матрица модифицируется так, что каждый элемент M k , k   содержит ведущий главный минор [M]k, k. Правильность алгоритма легко показывается индукцией по k[4].

  • Входные данные: M — n × n   матрица
    в предположении, что все ведущие главные миноры [ M ] k , k   не нулевые.
  • Положим M 0 , 0 = 1  
  • Для всех k от 1 до n-1:
    • Для всех i от k+1 до n:
      • Для всех j от k+1 до n:
        • Положим M i , j = M i , j M k , k M i , k M k , j M k 1 , k 1  
  • Выходные данные: Матрица изменена на месте[en],
    каждый элемент Mk, k содержит ведущий главный минор [ M ] k , k  ,
    значение M n , n   содержит определитель исходной матрицы M.

Если предположение о неравенству нулю главных миноров окажется неверным, то есть M k 1 , k 1 = 0  , а некоторые M i , k 1 0 ( i = k , , n )  , то мы можем переставить строки k-1 и i местами, сменив знак конечного значения.

АнализПравить

Во время выполнения алгоритма Барейса любое вычисленное целое является определителем подматрицы входной матрицы. Это позволяет с помощью неравенства Адамара ограничить размер целых чисел. В остальном алгоритм Барейса можно рассматривать как вариант метода Гаусса, который требует фактически того же числа арифметических операций.

Отсюда следует, что для n × n   матрицы с максимальным (абсолютным) значением 2 L   для каждого элемента алгоритм Барейса работает за O(n3) элементарных операций с ограничением O ( n n 2 2 n L )   на абсолютную величину промежуточных значений. Вычислительная сложность алгоритма тогда составляет O ( n 5 L 2 ( log ( n ) 2 + L 2 ) )   при использовании элементарной арифметики или O ( n 4 L ( log ( n ) + L ) log ( l o g ( n ) + L ) ) )   при использовании быстрого умножения[en].

ПримечанияПравить

ЛитератураПравить